java.lang.UnsatisfiedLinkError

異常信息

顯然,這是由于讀取不到so文件導(dǎo)致的異常。

我嘗試了如下方法:

  1. 檢查了jniLibs目錄下的文件結(jié)構(gòu)和so文件,都穩(wěn)穩(wěn)的躺在那兒;
    jniLibs目錄結(jié)構(gòu)
  2. 試圖使用如下方式重新指定目錄,依然無(wú)果;
sourceSets { 
      main {
            jniLibs.srcDirs = ['libs'] 
      } 
}
  1. 請(qǐng)教提供so文件的開(kāi)發(fā)同學(xué)是否與targetSdkVersion等有關(guān)系,并且試圖配置了和他們一樣的version
  2. Clean ProjectRebuild Project
  3. 反編譯查看apk中的libs目錄下確實(shí)也存在so文件

然而,并無(wú)卵用!

奇怪的是這個(gè)異常在真機(jī)(OnePlus2,HUAWEI MATE8)上有,而在模擬器上卻安然無(wú)恙。

于是乎,查看到OnePlus2的CPU架構(gòu)CPU_ABI=arm64-v8a。翻閱到一篇文章描述到:

對(duì)于一個(gè) cpuarm64-v8a架構(gòu)的手機(jī),它運(yùn)行app時(shí),進(jìn)入jnilibs去讀取庫(kù)文件時(shí),先看有沒(méi)有arm64-v8a文件夾:
如果沒(méi)有該文件夾,去找armeabi-v7a文件夾,如果沒(méi)有,再去找armeabi文件夾,如果連這個(gè)文件夾也沒(méi)有,就拋出異常
如果有arm64-v8a文件夾,那么就去找特定名稱的.so文件,注意:如果沒(méi)有找到,不會(huì)再往下(armeabi-v7a文件夾)找了,而是直接拋出異常

如上圖jniLibs目錄結(jié)構(gòu),本地并不存在arm64-v8a文件夾,反編譯apk后發(fā)現(xiàn)竟然存在此目錄,顯然是由于其他aar的引入會(huì)生成此目錄,用于存放其相關(guān)so文件。

過(guò)濾掉此目錄:

defaultConfig { 
      //省略其余配置 
      ndk {
            //這句話的意思是指定ndk需要兼容的架構(gòu),其余文件夾so文件全部過(guò)濾掉
            abiFilters "armeabi", "armeabi-v7a", "x86" 
      }
}```

這么個(gè)問(wèn)題,兩天的光景沒(méi)了!藍(lán)瘦,香菇。

[關(guān)于abiFilters的使用](http://blog.csdn.net/wove55678/article/details/52313208)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容