Android-ABIFilter-Device supports x86,but APK only supports armeabi-v7a,armeabi,x86_64


 

我遇到一個小問題: device supports armeabi-V7a  but apk only supports armeabi

Android 的 so 庫和 ABI 配置我原先也是沒有什么概念的,直到上個周,在我嘗試跑一個程序的時候,真機運行沒問題,但是用偉大的模擬機的時候,遇到了這么一個錯誤:

模擬機的下面顯示:

Device supports x86,but APK only supports armeabi-v7a,armeabi,x86_64;

模擬機的設備是 x86,但是運行的這個程序的 apk 卻只支持 armeabi-v7a,armeabi 和 x86_64 三種。

這個問題不僅僅是一個問題,它是很多個問題

是的,那么問題來了

  • x86,armeabi-v7a,armeabi,x86_64 到底是什么玩意?
  • 我們的代碼是在哪里設置apk對它們支持的?
  • 怎么查看和設置模擬機的支持類型?
  • 為什么我連接的真機大華為 HUAWEI PE-TL20 沒有顯示這樣的錯誤?

寶寶發現了真相,快來誇我

為了弄明白上面的幾個疑問,我 google 了很多相關方面的內容,終於召喚真相~~下面一個個來解釋~

1.x86,armeabi-v7a,armeabi,x86_64 到底是什么玩意?

這四個玩意都是 CPU 架構類型的名稱。 
目前 Android 支持的 CPU 架構有有以下幾種:

CPU架構 描述
armeabi 第5代 ARM v5TE,使用軟件浮點運算,兼容所有ARM設備,通用性強,速度慢
armeabi-v7a 第7代 ARM v7,使用硬件浮點運算,具有高級擴展功能
arm64-v8a 第8代,64位,包含AArch32、AArch64兩個執行狀態對應32、64bit
x86 intel 32位,一般用於平板
x86_64 intel 64位,一般用於平板
mips 少接觸
mips64 少接觸

2.我們的代碼是在哪里設置apk對它們支持的?

如果你和我用的開發工具都是 Android Studio 的話,那么在程序的主module 的 build.gradle中你會發現有這么個代碼:

 defaultConfig {
        ndk {
            abiFilters "armeabi", "armeabi-v7a", "x86_64" } }
  • 1
  • 2
  • 3
  • 4
  • 5

就是這里設置了支持的 CPU 的類型, 和剛才提示的 apk 支持的 CPU的類型是一模一樣的. 但是,在這里,我也發現了一個不認識的標簽屬性 abiFiliter 硬翻過來是 abi 過濾器, abi 是什么?

ABI, (application binary interface,縮寫為ABI),應用二進制接口。在計算機中,ABI 描述了應用程序(或者其他類型)和操作系統之間或其他應用程序的低級接口

3.怎么查看和設置模擬機的支持類型?

這個問題非常簡單,我們在創建一個模擬機的時候,就有 ABI 的選擇,因為粗心,之前一直都沒有發現,看下圖:

4.為什么我連接的真機大華為 HUAWEI PE-TL20 沒有顯示這樣的錯誤?

問題解決到這里,我們幾乎都猜到了答案,就是大華為 HUAWEI PE-TL20 這個設備支持的CPU 架構 ,肯定是 代碼中支持的 armeabi-v7a,armeabi,x86_64 中的一種。

到底是其中的哪一個呢?我們可以通過adb命令行的方式查看。

具體步驟: 
1.連接手機到電腦上 
2.打開 cmd 命令窗口,輸入命令 adb shell 
3.然后輸入命令 cat /proc/cpuinfo

如果你使用adb的過程中,出現了adb錯誤“'adb' 不是內部或外部命令,也不是可運行的程序或批處理文件,不要慌,這是因為沒有配置 adb 的環境變量,配置一下,就好了。具體配置步驟,可以移步這里 adb錯誤“’adb’ 不是內部或外部命令,也不是可運行的程序或批處理文件

大華為 HUAWEI PE-TL20 的結果如下:

顯示是ARMv7, 對應的應該是armeabi-v7a,看來我們的猜測果然是對的。

學習永遠都沒有結束

其實,這都是關於這個問題的一些小疑惑,我也只是遇到了這個問題,才發現了 ABI 這方面的大欠缺,ABI 到底怎么使用,和 so庫 怎么配合使用,接下來的工作中可能暫時涉及不到,但是私下有時間還是要繼續了解的,希望會有下篇關於我對 ABI 知識 總結的博客誕生。

晚安,世界。

參考資料

android多cpu架構適配開篇

如何查看Android設備的CPU架構信息


免責聲明!

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



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