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
- Driver de sistema de archivos de usuario de Android en un dispositivo no enraizado?
- Android ndk vs sdk - si las características se refiere
- Condición de carrera en android dlopen ()?
- Construyendo SDL para ARM usando la herramienta independiente de Android
- Android NDK: Incluye la biblioteca de boost c ++
#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í?
- Android- Cómo compilar ffmpeg para todas las arquitecturas cpu
- Decodificación de vídeo acelerado por hardware para H.264 en android antes de Jelly Bean
- Los rastreos de la pila se detienen antes de llegar a mi código (en Android usando NDK)
- No se puede construir Android APK en Qt Creator
- Android: los sockets nativos no eliminan el modo de suspensión 3G en el primer intento
- Uso de archivos .so en Android Studio
- Trabajar alrededor de QString móvil error
- Problemas con Android NDK-7 y AWK
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!
- Firebase para Android, ¿Cómo puedo recorrer un niño (para cada niño = x hacer y)
- Múltiples archivos dex definen Lcom / amazon / ags / BuildConfig cuando se usa GameCircleSDK en Android Studio