Maak een C ++ -klasse en gebruik die klasse In een andere C ++-klasse die JNI-methoden in ndk-android bevat

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

In Android ondervind ik problemen bij het verbinden van twee cpp-klassen in native Android. Ik heb getest met de enkele klasse, het werkt prima.

maar als ik een ander bestand heb gemaakt en nu een probleem ondervind door het te linken met het huidige cpp-bestand.

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) 

Fout: ongedefinieerde verwijzing naar `ClassNativeHandler :: getType (_JNIEnv *, _jobject *) '

op deze regel retourneer classNativeHandler.getType (env, context);

Dus ik kan het .so-bestand niet bouwen. Help me alsjeblieft

1 Comments
Joe C 07/27/2017
Wat heeft deze vraag met Java te maken?

1 Answers


taskinoor 07/27/2017.

U hebt native-handler.cpp niet gecompileerd. U moet dit in LOCAL_SRC_FILES specificeren, zodat NDK het compileert.

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

3 comments
Amjad Khan 07/27/2017
Nu kan ik het bestand compileren, maar krijg een foutmelding over het uitvoeren van de applicatie, zoals {JNI DETECTED ERROR IN APPLICATION: gebruik van verwijderde lokale referentie 0x7f5bc55a3d}
taskinoor 07/27/2017
Inside ClassNativeHandler::getType u hebt lokale jstring jstringObject gedefinieerd, jstring jstringObject het globale jstringObject effectief wordt geschaduwd dat de ongeldige lokale referentiefout kan veroorzaken.
Amjad Khan 07/27/2017
Het wordt niet opgeslagen in het geheugen wanneer opnieuw wordt ClassNativeHandler::getType naar de locatie die null krijgt, dus wordt er fout ClassNativeHandler::getType op ClassNativeHandler::getType Which gebruikt jstring jstringObject variable jstring jstringObject

Related questions

Hot questions

Language

Popular Tags