Buat kelas C ++ dan Gunakan kelas itu Dalam Kelas C ++ yang lain yang mengandungi kaedah JNI dalam android ndk

Amjad Khan 07/27/2017. 1 answers, 51 views
android android c++ android-ndk android-ndk native

Di Android, saya menghadapi masalah dalam menghubungkan dua kelas cpp dalam Android asli. Saya telah menguji dengan kelas tunggal yang berfungsi dengan baik.

tetapi apabila saya telah mencipta fail lain dan kini menghadapi masalah dalam menghubungkannya dengan fail cpp semasa.

MainClass.cpp

#include #include "native-handler.h"

extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_fragment_SampleFragment_setTitle(JNIEnv *env,jobject instance,jobject context) {

    ClassNativeHandler classNativeHandler;
    return classNativeHandler.getType(env,context);
} 

native-handler.cpp

#include #include "native-handler.h"

jstring jstringObject;

jstring ClassNativeHandler::getType(JNIEnv *env, jobject contextObject) {
    jstring jstringObject = env->NewStringUTF("Hello world");
    return jstringObject;
}

void ClassNativeHandler::setType(jstring string) {
    myType = string;
    jstringObject = string;
} 

native-handler.h

#ifndef SAMPLE_NATIVE_HANDLER_H
#define SAMPLE_NATIVE_HANDLER_H

#include #include class ClassNativeHandler
{
private:
    jstring myType;

public:
    void setType(jstring string);
    jstring getType(JNIEnv *env, jobject contextObject);
    jstring getHeaderName(JNIEnv *env);

};

#endif //SAMPLE_NATIVE_HANDLER_H 

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := Native
LOCAL_SRC_FILES := ../cpp/mainClass.cpp
LOCAL_C_INCLUDES := ../cpp/native-handler.h
LOCAL_LDLIBS := -lz -llog -ljnigraphics
include $(BUILD_SHARED_LIBRARY) 

Ralat: rujukan tidak jelas kepada `ClassNativeHandler :: getType (_JNIEnv *, _jobject *) '

pada baris ini mengembalikan classNativeHandler.getType (env, konteks);

Jadi saya tidak dapat membina fail .so. Tolong memandu saya

1 Comments
Joe C 07/27/2017
Apakah soalan ini berkaitan dengan Jawa?

1 Answers


taskinoor 07/27/2017.

Anda belum menyusun native-handler.cpp . Anda perlu menentukannya dalam LOCAL_SRC_FILES supaya NDK mengkompilinya.

LOCAL_SRC_FILES := ../cpp/mainClass.cpp ../cpp/native-handler.cpp

3 comments
Amjad Khan 07/27/2017
Sekarang saya boleh Menyusun fail, Tetapi dapatkan ralat semasa menjalankan aplikasi seperti {JNI DETECTED RALAT DI APLIKASI: penggunaan rujukan tempatan yang dihapuskan 0x7f5bc55a3d}
taskinoor 07/27/2017
Di dalam ClassNativeHandler::getType anda telah menentukan jstring jstringObject tempatan secara berkesan membayangi jstringObject global yang mungkin menyebabkan kesilapan rujukan tempatan tidak sah.
Amjad Khan 07/27/2017
Ia tidak disimpan di dalam memori ketika menunjuk ke lokasi yang mendapat null jadi mendapat ralat pada ClassNativeHandler::getType Yang menggunakan variable jstring jstringObject

Related questions

Hot questions

Language

Popular Tags