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

  • Wann ist die getView () - Methode von ListView aufgerufen?
  • Dynamisches Hinzufügen und Entfernen von Tabellenzeilen - Android
  • Warum beginnen viele Android-Klassen (Beispiele und Quelle) mit "m"?
  • Wie klar Fragment Backstack in Android zu löschen
  • Starten Sie eine Aktivität aus einem Fragment
  • Android OnEditorActionListener () actionId geben 0, wenn ich auf Done Key klicke
  • #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?

  • Kann ich Android's eingebaute Bug-Capture-Funktionalität aus meiner App auslösen?
  • Ein großes Bild in PNG speichern
  • Wie gibt es verschiedene Hintergründe und Farben für Trennwände in GridView?
  • Crashlytics Entwickler-Tools Fehler beim Aufbau von Android-Setup-Projekt
  • Java.security.UnrecoverableKeyException: keine Übereinstimmung
  • So senden und empfangen Sie Voice Stream mit RTP
  • 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.