1. 程式人生 > >Android-ABIFilter-Device supports x86,but APK only supports armeabi-v7a,armeabi,x86_64

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

我遇到一個小問題

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"
        }
    }

就是這裡設定了支援的 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 知識 總結的部落格誕生。

晚安,世界。

參考資料


歡迎關注博主的微信公眾號,快快加入哦,期待與你一起成長!