2015-07-20 69 views
1

我已经采用了本地活动的工作示例,并且我试图在main()中添加一个调用到已编译的.so文件中可用的函数。如何使用Android Studio 1.3和Gradle插件包含多个共享库?

我已经将.so放在自己的ABI文件夹下的jniLibs中,然后将库名添加到我的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的机器人/斌/劳工处:找不到-lmylib

这是否意味着该公司试图以一个静态lmylib.a添加到二进制?

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

编辑

的问题肯定是AS无法与这样的内部jniLibs文件夹链接。

添加:

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

到gradle这个build文件似乎并没有解决这个问题。是否支持标志?

+0

我遇到了同样的问题,你有没有找到解决方案? – Maurizio

回答

0

检查我的问题: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" 
     } 
    } 
} 
相关问题