studio ndk android android-ndk cmake

studio - android ndk



¿Cómo se vincula la biblioteca de terceros en el sistema de compilación externo de Android cmake? (2)

Android Studio 2.2 presenta el sistema de compilación externo cmake. El problema es que la documentación realmente no existe y no sé cómo debo vincular las bibliotecas de terceros. He intentado la directiva cmake target_link_libraries:

target_link_libraries(native-lib libs/libSomething.so)

Y "funciona" en esa aplicación compila pero luego recibo un error de dlopen en tiempo de ejecución porque libSomething.so no se ha empaquetado con la aplicación. El directorio libs está en "aplicación" si eso cambia algo y he comenzado con el proyecto JNI predeterminado generado por Android Studio 2.2 ...

[Actualizar]

Intenté poner libSomething.so en app / src / main / jniLibs / armeabi-v7a pero ahora la biblioteca "main" (native-lib) no está empaquetada.

[Update2]

He agregado la configuración del conjunto de código fuente que incluye cmake output dir y esto funciona pero es feo como el infierno y no es realmente una solución permanente ...

sourceSet { main { jniLibs.srcDirs = [ "libs", ".externalNativeBuild/cmake/debug/obj"] } }


Por ahora terminé copiando libSomething.so para chacer el directorio de salida de la biblioteca en un paso posterior a la compilación. Esto funciona porque resulta que Android Studio copia en apk TODO lo que está en ese directorio.

El comando en cmake es el siguiente:

add_custom_command(TARGET native-lib POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/libs/${ANDROID_ABI}/libSomething.so ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libSomething.so )


Por ahora, también podría colocar sus bibliotecas compartidas en el directorio y configurar jniLibs para que apunte a ese directorio, que lo empaquetará. Hay una muestra aquí: https://github.com/googlesamples/android-ndk/tree/master/hello-libs , sigue a gperf para ver si eso ayuda. De esta manera la aplicación no depende de las carpetas generadas de compilación. Cuando el estudio de Android agregó libs de empaquetado, la solución de jniLibs ya no es necesaria