Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]


Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]

參考: https://blog.csdn.net/Leafage_M/article/details/86675699

1.問題由來。
使用AndroidStudio在genymotion模擬器上安裝一個app的時候出現了這個錯誤報告:

 

剛開始沒有仔細看前面的error提示,還以為是之前的數據沒有清理干凈,於是直接點了OK並且見到了一個之前遇到過的錯誤提示,


下意識的按照之前的錯誤進行處理排查。但是沒有成效,在把模擬器刪除重新創建之后還是出現這個問題,意識到這是一個全新的問題。使用本人的Android真機運行無誤,那么問題就是出在了模擬器身上。

2.問題原因。
於是查了查發現:

 

由於安裝的APP中使用了與當前CPU架構不一致的native libraries,所以導致報錯,因為現在絕大多數的智能手機還都是采用ARM架構的,雖然android是支持ARM和x86架構,但是它們的指令集是有差別的,APP在開發的時候使用的是ARM的本地庫,而我們在用AVD創建模擬器的時候使用的是x86的CPU,因此導致報錯。所以,如果APP是在x86架構下編譯的我們就創建x86cpu的模擬器,如果APP是在ARM架構編譯的我們就創建ARMcpu的模擬器。

問題已經很清楚了,是當前的app使用了native libraries與模擬器的CPU架構不一致所導致的,而genymotion模擬器默認創建的只支持x86架構而不支持arm架構,這樣看來這個app使用了支持arm架構的一些庫,所以在x86上會無法安裝。事實就是源碼中使用了.so文件,當一個應用安裝在設備上,只有該設備支持的CPU架構對應的.so文件會被安裝。所以對應的arm部分文件無法安裝從而導致安裝失敗。

3.解決辦法。
那么解決問題可以分為兩個方法:

讓genymotion模擬器支持arm架構。

既然創建的是x86模擬器,那么需要使用轉換包使其能夠支持arm。

這里提供網上的一些資源:

鏈接:https://pan.baidu.com/s/15UpeGLOsaCpWDkmJe-fjjw
提取碼:fx4r

本人使用里面提供的ARM_Translation_Marshmallow 完成了轉換,使用的是模擬器版本如下:

 

啟動模擬器,把這個zip文件直接拖進模擬器進行安裝:

點擊OK


安裝成功:


然后我們重啟一下模擬器再次嘗試安裝app,重啟的時候可能會慢一點。

讓該app項目將arm和x86的文件都包含進去。

可以在app的build.gradle中的android{}添加如下內容:

splits {
abi {
enable true
reset()
include ‘x86’, ‘armeabi-v7a’,‘x86_64’
universalApk true
}
}


其中對應的含義如下所示:


以上兩種方法均可解決本人所遇到的問題。

 

其實除了cpu指令不兼容外,還有Android 本身版本兼容問題有關,本人發現同樣為cpu x86平台的模擬器(真機),在android10 x86不能安裝的apk,安裝時提示上面-113錯誤,但是在androdi4.4 x86上卻能成功安裝運行。

測試apk如下:下載地址

 1.Android正式版學習手冊破解版.apk

 2.java學習手冊破解版.apk


 

參考文章:
https://stackoverflow.com/questions/24572052/install-failed-no-matching-abis-when-install-apk
http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits (ABI相關知識)
https://www.cnblogs.com/janehlp/p/7473240.html (.so文件相關知識)
https://www.jb51.net/article/99714.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM