¿Cómo enlazar la biblioteca de terceros en el sistema de compilación externa de cmake de Android?

Android Studio 2.2 introduce el sistema de compilación externa de cmake. El problema es que la documentación es realmente falta y no sé cómo debo enlazar bibliotecas de terceros? He intentado cmake directiva target_link_libraries:

target_link_libraries(native-lib libs/libSomething.so)

Y "funciona" en esa aplicación compila pero luego me sale dlopen error en tiempo de ejecución porque libSomething.so no ha sido empaquetado con la aplicación. El directorio libs está en "app" si eso cambia algo y he empezado con el proyecto JNI por defecto generado por Android Studio 2.2 …

[Actualizar]

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

[Update2]

He añadido set set de configuración que incluye cmake salida 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"] } } 

2 Solutions collect form web for “¿Cómo enlazar la biblioteca de terceros en el sistema de compilación externa de cmake de Android?”

Por ahora terminé copiando libSomething.so para cmake directorio de salida de biblioteca en un paso de construcción de post. Esto funciona porque resulta que Android Studio copias en apk todo lo que está en ese directorio.

El comando en cmake es: 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 puedes poner tus libs compartidas en el directorio, y configurar jniLibs para apuntar a ese directorio, que lo empaquetará. Una muestra está aquí: https://github.com/googlesamples/android-ndk/tree/master/hello-libs , siga gperf para ver si eso ayuda. De esta manera no depende de las carpetas de generación generadas. Cuando android studio agregó libs de empaque, la solución de jniLibs ya no es necesaria

  • Android ndk (cmake): 'referencia indefinida a `__android_log_write' cuando se usa log api en la segunda biblioteca jni
  • Cómo importar bibliotecas compartidas en Cmake para Android
  • Cmake gui da el comando CMake desconocido "CHECK_LIBRARY_EXISTS"
  • ¿Cómo especificar bibliotecas sólo para plataforma Android construir en el archivo .pro?
  • CMake para Android con Qt Creator - Bug
  • Depuración de módulos de biblioteca C ++ / nativa que no funcionan con Android Studio (Cmake utilizado)
  • Compilación de la aplicación Qt para Android usando CMake (no por Qt Creator)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.