如何在 Android cmake 外部构建系统中链接第三方库? [英] How do you link third party library in Android cmake external build system?

查看:21
本文介绍了如何在 Android cmake 外部构建系统中链接第三方库?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Android Studio 2.2 引入了 cmake 外部构建系统.问题是文档真的很缺乏,我不知道我应该如何链接第三方库?我试过 cmake 指令 target_link_libraries:

Android Studio 2.2 introduces cmake external build system. The problem is that documentation is really lacking and I do not know how should I link third party libraries? I've tried cmake directive target_link_libraries:

target_link_libraries(native-lib libs/libSomething.so)

它在该应用程序编译中工作",但随后我在运行时收到 dlopen 错误,因为 libSomething.so 尚未与应用程序打包.如果有任何改变,libs 目录位于app"下,并且我已经开始使用 Android Studio 2.2 生成的默认 JNI 项目...

And it "works" in that app compiles but then I get dlopen error at runtime because libSomething.so has not been packaged with application. The libs directory is under "app" if that changes anything and I've started with default JNI project generated by Android Studio 2.2...

[更新]

我尝试将 libSomething.so 放在 app/src/main/jniLibs/armeabi-v7a 下,但现在主"(native-lib)库未打包.

I've tried putting libSomething.so under app/src/main/jniLibs/armeabi-v7a but now the "main" (native-lib) library is not packaged.

[更新2]

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

I've added source set config that includes cmake output dir and this works but is ugly as hell and is not really a permanent solution...

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

推荐答案

现在我最终在构建后的步骤中将 libSomething.so 复制到 cmake 库输出目录.这是可行的,因为事实证明 Android Studio 会将该目录中的所有内容复制到 apk 中.

For now I ended up copying libSomething.so to cmake library output directory in a post build step. This works because it turns out that Android Studio copies into apk EVERYTHING that is in that directory.

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
    )

这篇关于如何在 Android cmake 外部构建系统中链接第三方库?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆