Undefinierter Verweis auf AAssetManager_fromJava

Ich versuche, auf Assets von einem Android-Apk mit AAssetManager zuzugreifen. Allerdings bekomme ich immer "Undefinierte Referenz auf AAssetManager_fromJava", obwohl ich Asset_manager.h und asset_manager_jni.h enthalten habe. Andere Funktionen von asset_manager.h, wie zB AAssetManager_openDir (mgr, "") usw. können auch nicht referenziert werden.

Hier ist der komplette Code

#define EXPORT_API #include <string.h> #include <jni.h> #include <android\log.h> #include <sys\types.h> #include <android\asset_manager.h> #include <android\asset_manager_jni.h> #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, "com.devin - native", __VA_ARGS__) JNIEnv* env=0; #ifdef __cplusplus extern "C" { #endif JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* pvt){ LOGD("JNI_OnLoad() called"); vm->AttachCurrentThread(&env, 0); return JNI_VERSION_1_2; } EXPORT_API void LoadAsset(char* filename, jobject assetManager){ AAssetManager* mgr = AAssetManager_fromJava(env, assetManager); /* More stuff */ } #ifdef __cplusplus }; #endif 

Dieser Code ist in einer .cpp-Datei und wird mit NDK R8 kompiliert. Bin ich hier etwas schrecklich falsch?

  • Q_RETURN_ARG und QQmlComponent - Komponente nicht bereit
  • Nicht in der Lage, den Break-Point in ndk-gdb in Android zu treffen
  • Ndk-gdb-Fehler: Gerät unterstützt nicht die gezielten CPU-ABIs der Anwendung
  • Android: Datei IO von SD-Karte mit dem NDK
  • Ist die NDK für eine gute Leistung bei der Entwicklung eines Android Game erforderlich?
  • Kann keine native Shared Library mit Abhängigkeiten in einer nativen Activity App laden
  • Android NDK: Was soll ich in Application.mk für APP_ABI setzen?
  • Wo soll Android.mk sein?
  • 4 Solutions collect form web for “Undefinierter Verweis auf AAssetManager_fromJava”

    Mein Fehler. Ich habe nicht "Android" -Bibliothek hinzugefügt, um den Linker. Ich habe eigentlich Setup NDK dev Umgebung auf Visual Studio Express und "Android" -Bibliothek wurde nicht zu meinem Projekt standardmäßig hinzugefügt.

    Wenn Sie makefiles verwenden, sollten Sie bei der Verwendung von nativem AssetManager unbedingt -landroid zu Ihrem LOCAL_LDLIBS hinzufügen.

    Ich habe folgendes zu gradle.build hinzugefügt

    android.ndk { ldLibs.addAll(["android", "log"]) }

    Ich habe es behoben, indem ich folgendes zu Android.mk hinzufüge

     LOCAL_SHARED_LIBRARIES += libandroid 

    Android Studio-Entwickler Wenn Sie ExternalNativeBuild-Datei haben, die als "CMakeList.txt" bezeichnet wird, müssen Sie diesen Code an CMakeList.txt anfügen

     find_library( # Sets the name of the path variable. android-lib # Specifies the name of the NDK library that # you want CMake to locate. android ) target_link_libraries( ${log-lib} ${android-lib}) 

    Wenn du auch native lib hast, kannst du einfach so hinzufügen

     target_link_libraries( native-lib ${log-lib} ${android-lib}) 

    Das ist es sehr gut!

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.