Skapa en C ++-klass och använd den klassen i en annan C ++-klass som innehåller JNI-metoder i ndk android

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

I Android står jag inför problem med att ansluta två cpp-klasser i inbyggd Android. Jag har testat med den enda klassen som fungerar bra.

men när jag har skapat en annan fil och nu står inför ett problem med att länka det med nuvarande cpp-fil.

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) 

Fel: Odefinierad referens till `ClassNativeHandler :: getType (_JNIEnv *, _jobject *) '

på denna linje returnera classNativeHandler.getType (env, context);

Så jag kan inte bygga .so-filen. Vänligen vägleda mig

1 Comments
Joe C 07/27/2017
Vad har denna fråga att göra med Java?

1 Answers


taskinoor 07/27/2017.

Du har inte sammanställt native-handler.cpp . Du måste ange det i LOCAL_SRC_FILES så att NDK sammanställer det.

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

3 comments
Amjad Khan 07/27/2017
Nu kan jag kompilera filen, men få fel på att köra programmet som {JNI DETECTED ERROR IN APPLICATION: använd av borttagen lokal referens 0x7f5bc55a3d}
taskinoor 07/27/2017
Inside ClassNativeHandler::getType du har definierat lokal jstring jstringObject skuggar effektivt det globala jstringObject som kan orsaka det ogiltiga lokala referensfelet.
Amjad Khan 07/27/2017
Det lagras inte i minnet när du pekar igen till platsen blir noll så att du får fel på ClassNativeHandler::getType Vilket använder locai variabel jstring jstringObject

Related questions

Hot questions

Language

Popular Tags