Android Studio 2.2引入了cmake外部构建系统。问题是文档确实缺乏,我不知道如何链接第三方库?我已经尝试过cmake指令target_link_libraries:
target_link_libraries(native-lib libs/libSomething.so)
它"工作"在该应用程序编译但然后我在运行时得到dlopen错误,因为libSomething.so尚未与应用程序打包。 libs目录位于" app"如果这改变了什么,我已经开始使用Android Studio 2.2生成的默认JNI项目......
[更新]
我已经尝试将libSomething.so放在app / src / main / jniLibs / armeabi-v7a下,但现在" main" (native-lib)库未打包。
[UPDATE2]
我已经添加了包含cmake输出目录的源集配置,但是这很有效,但实际上并不是一个永久的解决方案......
sourceSet
{
main
{
jniLibs.srcDirs = [ "libs", ".externalNativeBuild/cmake/debug/obj"]
}
}
答案 0 :(得分:14)
现在我最终在后期构建步骤中将libSomething.so复制到cmake库输出目录。这是有效的,因为事实证明Android Studio会复制到该目录中的apk EVERYTHING。
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 :(得分:2)
现在,您还可以将共享库放入目录中,并将jniLibs配置为指向该目录,然后将其打包。这里有一个示例:https://github.com/googlesamples/android-ndk/tree/master/hello-libs,请关注gperf,看看是否有帮助。这种应用程序不依赖于生成的构建文件夹。当android studio添加了包装库时,不再需要jniLibs解决方法