2015-07-20 43 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" 
     } 
    } 
} 
相關問題