了解 Android CPU 架構 (ABI):為什麼 arm64-v8a、armeabi-v7a 和 x86 很重要

Diagram showing one app bundle splitting into arm64-v8a, armeabi-v7a, and x86 architecture-specific APKs

如果您曾經合併過一組拆分的 APK 文件,然後發現您的手機返回“應用程式未安裝”,或者更糟的是,您看到它安裝得很好,但在您點擊圖標的瞬間就崩潰了,那麼真正的問題很可能與損壞的下載無關。几乎可以肯定,这与架构有关:手机运行的 CPU 与编译应用程序本机代码的 CPU 之间不匹配。大多數 Android 用戶從來都不需要考慮這個問題,直到它悄悄破壞某些東西的那一刻,然後它很快就會變得相關。以下是 CPU 架構對於 APK 的含義、為什麼 Play 商店中的單一應用程式會秘密地以多個不同的版本形式發布,以及如何在安裝任何內容之前檢查相容性。

什麼是 ABI

ABI 代表應用程式二進位介面。實際上,它是晶片理解的指令集——處理器可以直接執行的原始機器碼格式。大多數 Android 應用程式(用 Java 或 Kotlin 編寫的部分)都會編譯成在 Android 運行時 (ART) 內運行的字節碼,而 ART 並不特別關心它恰好位於哪個晶片上。該層在設計上與架構無關,這也是 Android 應用程式通常可以在如此廣泛的硬體上「正常運行」的一個重要原因。

本機代碼則是另一回事。許多應用程序,尤其是遊戲、相機應用程式、機器學習工具以及任何進行大量音訊或視訊處理的應用程序,都透過 Android NDK 提供用 C 或 C++ 編寫的本機庫。這些函式庫提前編譯成特定指令集的機器碼,而為一種指令集建構的晶片通常無法執行為不同指令集所寫的機器碼。這就是 ABI 作為值得理解的東西而存在的全部原因:當應用程式包含一個本機 .so 函式庫時,其相容性就與該函式庫所針對的架構相關聯。

您將會遇到的架構

這個領域曾經有更多的種類(還記得簡單的 armeabi 或 MIPS 嗎?),但到 2026 年,該領域已縮小到四個值得了解的 ABI:

ABI位元寬典型裝置筆記
arm64-v8a64位元ARM大約自 2019 年以來售出的幾乎所有手機新應用程式的預設目標;多年來,Google 一直要求新的 Play 商店提交內容支援 64 位元。
armeabi-v7a32位元ARM較舊或廉價的設備,一些低成本手機仍在新興市場銷售儘管大多數活躍設備不再需要它,但許多應用程式仍然提供向後相容性。
x8632位英特爾基於 Intel 的舊平板電腦、傳統模擬器大部分已經過時;如今您很少會遇到真正的 32 位元 x86 手機。
x86_6464位英特爾一些 Chromebook、桌面 Android 模擬器、一些 x86 平板電腦如果您在模擬器(例如基於 x86 的 Android Studio AVD 或某些 BlueStacks 版本)中測試應用程序,這一點很重要。

如果您手上的手機是在過去五、六年內購買的,那麼幾乎可以肯定它是arm64-v8a。值得記住的例外是模擬器和 Chromebook,它們經常在 x86_64 上運行,因為它與底層筆記型電腦或桌上型電腦 CPU 相符。

為什麼應用程式要費心交付多個版本

一個明顯的問題是,為什麼開發人員不將每個架構的本機庫塞進一個 APK 中並完成它。有些應用程式正是這樣做的,它被稱為通用或「胖」APK。缺點是尺寸。與僅包含設備所需的一種架構的構建相比,包含 arm64-v8a、armeabi-v7a、x86 和 x86_64 的本機庫全部捆綁在一起的遊戲的大小可以輕鬆增加一倍或三倍。將其乘以數百萬次安裝,您會看到真正浪費了大量的頻寬和儲存空間,而這些程式碼永遠不會在該裝置上運行。

為了避免這種浪費,Google Play 和 Android App Bundle 格式將應用程式拆分為一個小型基礎 APK 和一系列配置 APK,其中一個專用於架構。當您的手機要求應用程式時,Play 商店會提供基本 APK 以及僅與您的晶片匹配的架構拆分,以及匹配的螢幕密度和語言拆分。您最終會得到一個行為類似於單個應用程式的安裝,但由多個在幕後專門構建的部分組裝而成。

拆分 APK 和應用程式套件如何使用此功能

如果您曾經開啟過 .apks 或 .xapk 軟體包,並注意到 split_config.arm64_v8a.apk、split_config.armeabi_v7a.apk、split_config.xxhdpi.apk 和 split_config.en.apk 等檔案名稱位於 base.apk 旁邊,那麼這正是該系統正在運行的情況,只是作為一組檔案名稱位於 旁邊,那麼這正是該系統正在運行的情況,只是作為一組檔案匯出,而不是由 Play 默默商店提供。密度和语言分割通常可以安全地随意安装,因为手机会简单地忽略它不需要的资源。架构划分是不同的:安装错误的架构,或者无法安装匹配的架构,你就会遇到真正的麻烦。

當您使用轉換器將分割包合併回單一可安裝的 APK 時,合併過程必須選擇要合併的架構分割。一個好的轉換器會保留真正有用的每個架構拆分,或者讓您選擇,而不是默默地只保留一個並希望它與您的設備匹配。

當架構不匹配時會發生什麼

有兩種不同的故障模式值得區分,因為它們對一般使用者來說看起來和感覺都不同。

第一個是徹底的安裝失敗。如果一個應用程式幾乎完全圍繞本機程式碼構建,沒有任何有意義的回退,Android 的套件管理器將根本拒絕安裝它,通常會出現類似 INSTALL_FAILED_NO_MATCHING_ABIS 的錯誤。你甚至無法打開該應用程式;安裝人員把你攔在門口。

第二個更令人沮喪的結果是無聲的部分成功。如果應用程式有一個可以自行正常載入的 Java 或 Kotlin 入口點,但隨後嘗試呼叫您的架構中不存在的本機程式庫,則安裝會正常完成。一切看起來都很好,直到您點擊該圖標,此時應用程式幾乎立即崩潰,通常會在日誌中隱藏 UnsatisfiedLinkError。這是經典的「我轉換了它,安裝了它,然後它立即關閉」的故事,它幾乎總是一個體系結構問題而不是損壞的檔案。

Diagram comparing a matching arm64 APK that installs and runs successfully against an x86-only APK that fails to install on an arm64 phone with error INSTALL_FAILED_NO_MATCHING_ABIS

如何檢查自己手機的架構

對於絕大多數人來說,這很簡單:如果您的手機是 2019 年或更高版本的,則假設使用 arm64-v8a 並繼續。如果您想確定,或者您正在使用舊的或不尋常的設備,有一些實用的選擇:

如何檢查 APK 支援哪些架構

在從 Play 商店外部安裝檔案之前,值得確認其中的內容而不是猜測。 APK 的本機程式庫位於 lib/ 目錄中以其架構命名的資料夾中,例如 lib/arm64-v8a/ 或 lib/armeabi-v7a/。任何可以檢查 APK 內部結構的工具都可以準確地告訴您存在哪些資料夾,從而準確地告訴您該檔案將在哪些裝置上運行。

安裝前檢查

我們的 APK資訊工具 讀取 APK 的內部 lib/ 資料夾並列出其建置的每個架構,因此您可以在旁加載任何內容之前確認相容性。當您使用我們的 XAPKS 到 APK 轉換器 轉換拆分包時,我們也會在每次轉換後自動顯示此信息,列出合併文件中找到的架構,並在構建似乎缺少常見設備所需的切片時對其進行標記。

通用 APK 與單一 ABI APK:您應該使用哪一個?

指標通用/胖APK單一 ABI APK
文件大小更大,有時 2-4 倍體積小,僅包含您的裝置所需的內容
相容性幾乎適用於任何設備僅適用於匹配的架構
最適合共享一個應該在任何地方都可以使用的文件,不確定收件人當您已經了解其架構時,您自己的設備
風險ABI 不符的風險非常低如果你選錯了就會失敗或崩潰

人們在使用拆分包時常犯的錯誤

重點

  • ABI 是晶片可以理解的指令集;它僅對包含本機 (C/C++) 程式碼的應用程式很重要。
  • arm64-v8a 幾乎涵蓋所有現代手機; armeabi-v7a 適用於較舊的設備; x86/x86_64 主要出現在模擬器和 Chromebook 中。
  • 應用程式通常按架構劃分,以避免將不必要的本機程式碼傳送到每個裝置。
  • 不匹配的體系結構要么完全阻止安裝,要么在看似成功的安裝後立即導致崩潰。
  • 您可以在安裝任何內容之前檢查設備的架構和 APK 支援的架構,從而完全避免猜測。

常見問題解答 (FAQ)

我需要知道手機的架構才能安裝普通的 Play 商店應用程式嗎?

不會。 Play 商店會自動偵測您的設備,並僅提供相符的架構拆分,因此只有當您從 Play 商店外部載入 APK 時,這才會變得相關。

一個APK可以同時支援多種架構嗎?

是的。通用或胖 APK 將每個受支援架構的本機庫捆綁在一個檔案中。它更大,但可以安裝在任何相容設備上,無論晶片如何。

為什麼我轉換後的 APK 安裝後立即崩潰?

當應用程式有少量可正常安裝的 Java 程式碼,但隨後嘗試載入裝置架構中未包含的本機程式庫,從而在執行時間引發 UnsatisfiedLinkError 時,通常會發生這種情況。

arm64-v8a 是否向後相容於 armeabi-v7a 應用程式?

一般來說是的。大多數arm64-v8a晶片也可以執行32位元ARM指令,因此僅armeabi-v7a的APK通常仍然可以在現代arm64手機上運行,而不是相反。

2026 年 x86 Android 裝置仍然存在嗎?

如今,它們在手機中很少見,但您仍然可以在一些基於 Intel 的舊平板電腦、少數運行 Android 應用程式的 Chromebook 以及大多數桌面 Android 模擬器中找到 x86 或 x86_64。

你不需要記住這些。簡而言之:現代手機幾乎都是arm64-v8a,應用程式按架構劃分以節省空間,如果某些東西在打開後拒絕安裝或崩潰,架構不匹配是在假設文件本身損壞之前首先值得排除的事情之一。

由 Shaefale 女士設計並記錄 首席開發人員和 Android 套件架構師 • 在 Android 12–15 上經過驗證

Mst Shaefale 在 xapktoapk.com 維護用戶端 XAPK/APKS 合併、二進位清單解析器和 APK v1+v2 簽章工具。發現過時的命令或作業系統變更?發送編輯說明。