【问题标题】:How do you link third party library in Android cmake external build system?如何在 Android cmake 外部构建系统中链接第三方库?
【发布时间】:2017-01-05 06:56:21
【问题描述】:

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 下,但现在“主”(native-lib)库未打包。

[更新2]

我添加了包含 cmake 输出目录的源集配置,这可以工作,但丑得要命,并不是真正的永久解决方案...

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

【问题讨论】:

    标签: android android-ndk cmake


    【解决方案1】:

    现在我最终在构建后步骤中将 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
        )
    

    【讨论】:

      【解决方案2】:

      现在,您还可以将共享库放入目录中,并将 jniLibs 配置为指向该目录,这将打包它。一个示例在这里:https://github.com/googlesamples/android-ndk/tree/master/hello-libs,关注 gperf 看看是否有帮助。这种方式应用程序不依赖于生成的构建文件夹。当android studio添加打包库时,不再需要jniLibs解决方法

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-03
        • 1970-01-01
        • 2020-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多