Referencia indefinida a AAssetManager_fromJava

Estoy intentando tener acceso a los recursos de un androide apk usando AAssetManager. Sin embargo, sigo recibiendo "Referencia indefinida a AAssetManager_fromJava" aunque he incluido asset_manager.h y asset_manager_jni.h Otras funciones de asset_manager.h, como AAssetManager_openDir (mgr, "") etc, tampoco se pueden referenciar.

Aquí está el código completo

#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 

Este código está en un archivo .cpp y se está compilando con NDK R8. ¿Estoy haciendo algo terriblemente mal aquí?

Mi error. No tenía la biblioteca "android" añadida al vinculador. En realidad, he configurado el entorno NDK dev en Visual Studio Express y la biblioteca "android" no se agregó a mi proyecto de forma predeterminada.

Si está utilizando makefiles, asegúrese de agregar -landroid a su LOCAL_LDLIBS cuando use AssetManager nativo.

Agregué lo siguiente a gradle.build

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

Lo arreglé agregando el siguiente a Android.mk

 LOCAL_SHARED_LIBRARIES += libandroid 

Desarrolladores de Android Studio Si tiene un archivo ExternalNativeBuild denominado "CMakeList.txt", debe agregar este código a CMakeList.txt

 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}) 

Si también tiene lib nativo puede agregar fácilmente como este

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

Eso es que funciona muy bien!

  • Pruebas unitarias Llamadas JNI
  • Integrar MuPDF como un proyecto de biblioteca (Android)
  • Java.io.IOException: com.android.jack.api.v01.CompilationException: Error al compilar
  • ¿Utilizar un archivo mapeado en memoria como un archivo de intercambio?
  • Android / GDB - Dolor de cabeza - no puede encontrar símbolos de depuración
  • Procesamiento nativo de mapa de bits y ALPHA_8
  • Llamar al teclado virtual de Android desde un archivo C ++
  • Cómo crear named pipe (mkfifo) en Android?
  • Obtener 'Señal fatal 11 (SIGSEGV) en 0x00000010 (código = 1)' al escribir en matriz jfloat
  • Cómo construir openssl en android
  • Posicione ejecutables independientes y Android Lollipop
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.