2016-08-29 1 views
6

Android Studio 2.2 представляет внешнюю систему сборки cmake. Проблема в том, что документация действительно отсутствует, и я не знаю, как мне связать сторонние библиотеки? Я попытался директива CMake target_link_libraries:Как вы связываете стороннюю библиотеку в системе внешнего сборщика Android cmake?

target_link_libraries(native-lib libs/libSomething.so)

И это «работает» в том, что приложение компилируется, но затем я получаю dlopen ошибки во время выполнения, поскольку libSomething.so не был упакован с приложением. Каталог ЛИЭСА находится под «приложением», если это меняет что-нибудь, и я начал с проектом по умолчанию JNI генерируемого Android Studio 2.2 ...

[Update]

Я попытался положить libSomething.so под приложением/src/main/jniLibs/armeabi-v7a, но теперь основная библиотека (native-lib) не упакована.

[Update2]

Я добавил источник набор конфигурации, который включает выходной CMake реж и это работает, но это некрасиво, как ад, и на самом деле не окончательное решение ...

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

ответ

9

Сейчас Я закончил копирование libSomething.so в директорию вывода библиотеки cmake на этапе пост-сборки. Это работает, потому что получается, что Android Studio копирует в apk ВСЕ, что в этом каталоге.

Команда в cmake заключается в следующем:

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

На данный момент, вы можете также положить ваши общие LIBS в папку, а также настроить jniLibs, чтобы указать на этот каталог, который будет упаковать его. Один образец находится здесь: https://github.com/googlesamples/android-ndk/tree/master/hello-libs, следуйте gperf, если это поможет. Таким образом, приложение не зависит от сгенерированных папок сборки. Когда в студии android добавлена ​​упаковка libs, обходной путь jniLibs больше не нужен

Смежные вопросы