Android java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader報錯解決方法

錯誤分析
這個錯誤是so庫加載問題,報錯一般以 java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader開頭。一般是程序在運行過程中調用System.loadLibrary(“xxxxxxxx”);是無法找到libxxxxxx.so文件導致的報錯。針對這個錯誤我們可以一邊排查一邊來解決。 

 

問題分析和解決
1.查看so庫是不是已經在編譯的過程中打包到apk裏。
方法:
找到項目的這個目錄app\build\outputs\apk,然後用壓縮軟件打開app-debug.apk這個文件或者你是比較新版本的android studio 可以直接在軟件中打開APK去查看,去libs裏找有沒有報錯的libxxxxxx.so文件。
解決:
如果有就下一步,沒有就檢查自己是不是把libxxxxxx.so文件沒有放在正確的位置,然後重新打包。

2.查看項目是不是加載了so庫
方法&解決:
找到項目app的build.gradle文件,看是不是引入了libs文件的依賴。正確的寫法如下:

android {
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
}
記住,sourceSets一定要放在android的代碼塊內。如果沒有就加上這一句然後重新編譯一遍,問題解決。

3.查看NDK是不是排除了你的設備架構
方法:

android {
    defaultConfig {
        ........//此處省略其他設置
        ndk {
            abiFilters  "armeabi"
        }
    }
}

這個設置就是隻加載armabi架構(目錄下)的so庫,如果是別的架構,就會找不到。
解決:
我們可以添加自己需要的架構,這樣做的好處是apk體積可以變小代碼如下:

android {
    defaultConfig {
        ........//此處省略其他設置
        ndk {
            abiFilters  "armeabi","x86"
        }
    }
}

這樣我們就又引入了x86架構,一定要注意每一個目錄下放的so庫一定要是相應架構下的目錄。

4.查看是否是armeabi和armeabi-v7a都有so庫
方法&解決:
我們可以引入armeabi-v7a這個架構,然後把armeabi裏的文件複製一份進anmeabi-v7a目錄下,然後重新編譯。armeabi和armeabi-v7a文件不一致也有可能導致程序異常。
————————————————

以下是我的小見解

如果你的demo包的LIB文件裏面沒有 so文件。建議先找到APK重命名爲RAR找到LIB中的so文件複製到你的工程下面。如果是引用的大廠官網的那就去官網下載demo中找。

希望能解決你的問題!!!!!!!!!!!!!!

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