Δημιουργήστε μια κλάση C ++ και χρησιμοποιήστε αυτήν την τάξη σε μια άλλη κλάση C ++ που περιέχει τις μεθόδους JNI στο ndk android

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

Στο Android, αντιμετωπίζω προβλήματα στη σύνδεση δύο κλάσεων cpp σε native Android. Έχω δοκιμάσει με την ενιαία κατηγορία που λειτουργεί καλά.

αλλά όταν έχω δημιουργήσει ένα άλλο αρχείο και τώρα αντιμετωπίζει ένα πρόβλημα στη σύνδεση με το τρέχον αρχείο cpp.

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) 

Σφάλμα: ακαθόριστη αναφορά στο 'ClassNativeHandler :: getType (_JNIEnv *, _jobject *)'

σε αυτή την γραμμή επιστροφής classNativeHandler.getType (env, context);

Επομένως, δεν μπορώ να δημιουργήσω το αρχείο .so. Παρακαλώ με καθοδηγήστε

1 Comments
Joe C 07/27/2017
Τι έχει να κάνει η ερώτηση αυτή με την Java;

1 Answers


taskinoor 07/27/2017.

Δεν έχετε συντάξει native-handler.cpp . Πρέπει να το ορίσετε σε LOCAL_SRC_FILES έτσι ώστε να το LOCAL_SRC_FILES η NDK.

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

3 comments
Amjad Khan 07/27/2017
Τώρα μπορώ να μεταγλωττίσω το αρχείο, αλλά να πάρω σφάλμα κατά την εκτέλεση της εφαρμογής όπως {JNI DETECTED ERROR IN APPLICATION: χρήση διαγραμμένης τοπικής αναφοράς 0x7f5bc55a3d}
taskinoor 07/27/2017
Μέσα στο ClassNativeHandler::getType έχετε ορίσει το τοπικό jstring jstringObject σκιάζει αποτελεσματικά το σφαιρικό jstringObject που μπορεί να προκαλέσει το μη έγκυρο σφάλμα τοπικής αναφοράς.
Amjad Khan 07/27/2017
Δεν είναι αποθηκευμένο στη μνήμη όταν δείχνει ξανά στη θέση που παίρνει null έτσι να πάρει λάθος για ClassNativeHandler::getType που χρησιμοποιεί jstring jstringObject μεταβλητή jstring jstringObject

Related questions

Hot questions

Language

Popular Tags