Android studio ndk:第三方so庫引用的坑

着手開發新的項目,因爲要依賴第三方手環的SDK,是個aar包,這個SDK裏面引用了so庫。

剛開始調用的時候報了這個錯誤:couldn’t find “libCommand.so

2019-01-03 11:26:19.575 18023-18023/com.lepu.iwown E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.lepu.iwown, PID: 18023
    java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.lepu.iwown-xwIWej6Uien1cnjsNLtApg==/base.apk"],nativeLibraryDirectories=[/data/app/com.abc.abc-xwIWej6Uien1cnjsNLtApg==/lib/arm64, /data/app/com.lepu.iwown-xwIWej6Uien1cnjsNLtApg==/base.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]]] couldn't find "libCommand.so"
        at java.lang.Runtime.loadLibrary0(Runtime.java:1011)
        at java.lang.System.loadLibrary(System.java:1657)
        at com.mediatek.wearable.LoadJniFunction.<clinit>(Unknown Source:2)
        at com.mediatek.wearable.LoadJniFunction.a(Unknown Source:0)
        at com.mediatek.wearable.WearableConfig.getEpoUrl(Unknown Source:0)
        at com.mediatek.ctrl.epo.EpoDownloadController.<init>(Unknown Source:31)
        at com.mediatek.ctrl.epo.EpoDownloadController.getInstance(Unknown Source:9)
        at com.zeroner.blemidautumn.bluetooth.impl.BleService.onCreate(BleService.java:212)
        at android.app.ActivityThread.handleCreateService(ActivityThread.java:3443)
        at android.app.ActivityThread.-wrap4(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1712)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:176)
        at android.app.ActivityThread.main(ActivityThread.java:6701)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:246)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783)

導致這個錯誤產生的原因是:引用的SDK裏面對應的jniLibs文件夾,下arm64-v8a下沒有對應的so文件。但是其他第三方依賴確有引用arm64-v8a的so庫。

所以解決辦法就是:

1.讓SDK提供者更新SDK版本,提供對應so庫
2.在build.gradle文件裏,android的defaultConfig裏面加上下面這段代碼,因爲armeabi兼容性最好,幾乎所有第三方框架都會有這個so庫,我集成的這個也不例外,只有armeabi。只是性能比較差,要是想要兼顧性能,可以選擇第一種方法,提供其他平臺的so。
		ndk{
			abiFilters "armeabi" //指定要ndk需要兼容的架構(這樣其他依賴包裏mips,x86,armeabi,arm-v8之類的so會被過濾掉)
		}

就醬!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章