如何在Android cmake外部构建系统中链接第三方库?

时间:2016-08-29 09:34:30

标签: android android-ndk cmake

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"]
    }
}

2 个答案:

答案 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解决方法