【问题标题】:How do I include more than one shared libraries using Android Studio 1.3 & Gradle plugin?如何使用 Android Studio 1.3 和 Gradle 插件包含多个共享库?
【发布时间】:2015-10-09 02:12:23
【问题描述】:

我已经采用了工作示例 native-activity,我正在尝试在 main() 中添加一个调用到一个已编译的 .so 文件中可用的函数。

我已将 jniLibs 下的 .so 放在它自己的 ABI 文件夹中,然后将库名称添加到我的 gradle 构建文件中。

android.ndk {
    moduleName ="native-activity"
    CFlags += "-I${file("src/main/jni/native_app_glue")}".toString()
    ldLibs += ["log", "android", "EGL", "GLESv1_CM", "mylib"]
}

对 ldLibs 的额外更改使代码可以编译。所以它正在寻找图书馆。当我检查 apk 时,它都在正确的 ABI 下(用于 Nexus 5 设备的 armeabi-v7a。)

奇怪的是,当我从命令行使用 gradle 时,我收到以下错误消息:

arch64-linux-android/bin/ld: 找不到 -lmylib

这是否意味着它正在尝试将静态 lmylib.a 添加到二进制文件中?

当然,通过从 gradle ldLibs 列表中删除“mylib”,应用程序会再次运行,所以 ldLibs 似乎正在强制 native-lib 加载失败的 .so?但为什么呢?

编辑

问题肯定是AS无法链接到jniLibs文件夹里面的so。

添加:

    ldFlags += "-L${file("src/main/jniLibs/")}".toString()

到 gradle 构建文件似乎无法解决问题。是否支持标志?

【问题讨论】:

  • 我也遇到了同样的问题,你找到解决办法了吗?

标签: android android-studio gradle android-gradle-plugin


【解决方案1】:

检查我的问题:OpenCv with Android studio 1.3+ using new gradle - undefined reference 有了这个我解决了链接错误。

android.productFlavors {
    create("armv7") {
            ndk.with {
                abiFilters += "armeabi-v7a"
                File curDir = file('./')
                curDir = file(curDir.absolutePath)
                String libsDir = curDir.absolutePath+"\\src\\main\\jniLibs\\armeabi-v7a\\" //"-L" +
                ldLibs += libsDir + "libnative_camera_r4.3.0.so"
                ldLibs += libsDir + "libopencv_contrib.a"
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-05
    • 2016-08-02
    • 2015-09-17
    • 2016-06-07
    • 2017-09-19
    • 2020-11-18
    • 2014-01-29
    • 1970-01-01
    相关资源
    最近更新 更多