Erstellen Sie eine C ++ - Klasse und verwenden Sie diese Klasse in einer anderen C ++ - Klasse, die JNI-Methoden in ndk android enthält

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

In Android habe ich Probleme, zwei cpp-Klassen in nativem Android zu verbinden. Ich habe mit der einzelnen Klasse getestet, es funktioniert gut.

aber wenn ich eine andere Datei erstellt habe und nun ein Problem damit habe, sie mit der aktuellen cpp-Datei zu verknüpfen.

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) 

Fehler: undefinierter Verweis auf `ClassNativeHandler :: getType (_JNIEnv *, _jobject *) '

Geben Sie in dieser Zeile classNativeHandler.getType (env, context);

Daher kann ich die .so-Datei nicht erstellen. Bitte führen Sie mich

1 Comments
Joe C 07/27/2017
Was hat diese Frage mit Java zu tun?

1 Answers


taskinoor 07/27/2017.

Sie haben native-handler.cpp nicht kompiliert. Sie müssen es in LOCAL_SRC_FILES angeben, damit NDK es kompiliert.

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

3 comments
Amjad Khan 07/27/2017
Jetzt kann ich die Datei kompilieren, aber bekomme Fehler beim Ausführen der Anwendung wie {JNI DETECTED ERROR IN APPLICATION: Verwendung der gelöschten lokalen Referenz 0x7f5bc55a3d}
taskinoor 07/27/2017
Innerhalb von ClassNativeHandler::getType Sie ein lokales jstring jstringObject definiert, jstring jstringObject effektiv das globale jstringObject , das den ungültigen lokalen Referenzfehler verursachen könnte.
Amjad Khan 07/27/2017
Es wird nicht im Speicher gespeichert, wenn erneut auf den Speicherort ClassNativeHandler::getType wird, der null erhält, so dass ein Fehler bei ClassNativeHandler::getType der locai-Variable jstring jstringObject

Related questions

Hot questions

Language

Popular Tags