Android 生態系統使用多種文件格式來打包、分發和儲存應用程式資料。如果您曾經從第三方來源下載過應用程序,那麼您可能會遇到超出熟悉的 APK 的檔案副檔名。 XAPK、APKS、APKM、AAB 和 OBB 等格式在 Android 應用程式生命週期中都有特定的用途。
本指南旨在成為每種主要 Android 檔案格式的完整參考。開發人員、側載應用程式的高級用戶以及只想知道這些文件實際包含什麼內容的好奇讀者都會發現下面以簡單語言解釋了每種格式。
APK:Android 軟體套件
APK 是 Android 應用程式的基礎檔案格式。自 Android 誕生以來,它一直是標準安裝格式,並且仍然是 Android 作業系統本機理解的應用程式安裝格式。
它包含什麼
APK 檔案本質上是具有特定內部結構的 ZIP 檔案:
- AndroidManifest.xml,聲明應用程式套件名稱、元件、權限和要求的二進位 XML 文件
- classes.dex(和 classes2.dex 等),包含應用程式的 Java/Kotlin 程式碼的已編譯 Dalvik 字節碼
- resources.arsc,將資源 ID 對應到其值的已編譯資源表
- res/,包含 ID 引用的版面、繪圖和字串等資源的目錄
- assets/,應用程式在執行時透過 AssetManager 存取的原始資源文件
- lib/,按 CPU 架構組織的本機程式庫(例如 lib/arm64-v8a/)
- META-INF/,簽名文件和證書信息
當你遇到它時
APK 檔案是您從第三方來源旁載入應用程式時下載的檔案。它們也是從 Play 商店安裝到您的裝置上的內容,儘管現代 Play 商店安裝通常使用從 App Bundle 產生的分割 APK。
如何處理
APK檔案可以透過檔案管理器開啟或使用adb install直接安裝在Android上。您還可以透過將擴展名重新命名為 .zip 並提取來檢查其內容,或使用我們的 APK驗證器 檢查簽名和元資料。
AAB:Android 應用程式套件
Android App Bundle 是 Google 針對 Play 商店的發布格式。自 2021 年 8 月起,Play 商店中的所有新應用程式都必須以 AAB 而不是 APK 的形式提交。
它包含什麼
AAB 檔案使用基於協定緩衝區的格式並包含:
- 基礎模組: 每台裝置所需的核心應用程式碼和資源
- 配置拆分: 按螢幕密度、CPU 架構和語言組織的資源
- 動態功能模組: 選購功能,可按需下載
- 捆綁元資料: Google Play 有關如何產生特定於裝置的 APK 的說明
當你遇到它時
作為普通用戶,您通常不會直接遇到 AAB 檔案。開發人員在建置和上傳過程中使用它們。但是,如果您取得 AAB 檔案(可能來自開源專案的建置工件),則需要在安裝之前將其轉換為 APK 格式。
如何處理
使用 Google 的 bundletool 命令列公用程式或我們的 AAB 到 APK 轉換器 從 AAB 檔案產生可安裝的 APK。轉換過程會建立通用 APK(較大,適用於任何地方)或裝置特定 APK(較小,針對裝置)。
XAPK:擴充APK
XAPK 是 APKPure 推廣的一種容器格式,它將 APK 與其關聯的 OBB 資料檔案捆綁在一起,或將 APK 配置拆分為單一可下載套件。
它包含什麼
XAPK 檔案是一個 ZIP 存檔,包含:
- 基本 APK 檔案(主應用程式)
- OBB 檔案(遊戲和大型應用程式的擴展數據)
- (可選)針對不同的設備配置拆分 APK 文件
- 描述包內容和安裝說明的 manifest.json 文件
- 用於顯示目的的圖示文件
當你遇到它時
從第三方應用程式儲存庫下載大型應用程式或遊戲時,您會遇到 XAPK 檔案。需要額外資料檔案(以前作為 OBB 檔案分發)的遊戲通常會打包為 XAPK,以將下載過程簡化為單一檔案。
如何處理
XAPK 檔案無法透過 Android 的預設套件安裝程式直接安裝。您需要專用的 XAPK 安裝程式應用程序,或者您可以使用我們的 XAPKS 到 APK 轉換器 來提取基本 APK。對於需要 OBB 資料的遊戲,您還需要使用我們的 OBB萃取器 提取 OBB 檔案並將其放置在正確的目錄中。
APK:APK 集
APKS 格式是 Google 捆綁工具從 AAB 檔案產生特定於裝置的 APK 時的輸出。一些應用程式備份工具也使用它來儲存拆分的 APK 安裝。
它包含什麼
APKS 檔案是一個 ZIP 存檔,其中包含:
- toc.pb,描述拆分結構的協定緩衝區目錄
- splits/,包含基本 APK 和所有設定分割 APK 的目錄
- (可選)適用於不支援拆分安裝的設備的獨立 APK
當你遇到它時
在本機上使用bundletool、備份從Play商店安裝的應用程式或從保留分割APK結構的某些第三方儲存庫下載時,您會遇到APKS檔案。
如何處理
您可以使用bundletool的install-apks命令安裝APKS文件,或使用我們的APKS 到 APK 合併將它們轉換為單一APK。請注意,將拆分 APK 合併到通用 APK 可能會增加檔案大小,因為所有設定資源都已合併。
APKM:APKMirror包
APKM 是 APKMirror 創建的專有容器格式,用於分發由多個拆分 APK 組成的應用程式。它的用途與 XAPK 和 APKS 類似,但使用 APKMirror 自己的結構。
它包含什麼
APKM 檔案是一個 ZIP 存檔,其中包含:
- 基本 APK 文件
- 拆分 APK 檔案以進行各種配置(密度、ABI、語言)
- 描述包結構的元資料文件
當你遇到它時
從 APKMirror 下載時,您只會遇到 APKM 檔案。該網站對在 Play 商店上作為 App Bundle 分發的應用程式使用此格式,因此由多個拆分的 APK 組成。
如何處理
APKM 檔案需要 APKMirror Installer 應用程式才能直接安裝,或者您可以提取內容(因為它是 ZIP 檔案)並使用 ADB 的 install-multiple 命令手動安裝拆分的 APK。基礎 APK 也可以獨立提取和安裝,但如果沒有配置拆分,某些功能可能會受到限制。
OBB:不透明二進位 Blob
OBB 檔案是 Android 應用程式(主要是遊戲)使用的擴充文件,用於儲存超出 Play 商店 APK 大小限制的大量資料。儘管 Google 已在很大程度上用 Play Asset Delivery 取代了該系統,但許多現有應用程式仍然使用 OBB 檔案。
它包含什麼
OBB 檔案可以包含應用程式所需的任何類型的資料:
- 遊戲紋理和 3D 模型
- 音訊檔案和配樂
- 影片內容
- 關卡數據和地圖
- 開發人員選擇外部儲存的任何大型二進位數據
OBB 文件中資料的格式完全取決於開發人員。有些使用 ZIP 壓縮,有些使用自訂二進位格式。名稱中的「Opaque」反映了 Android 將檔案視為黑盒子。
當你遇到它時
旁加載大型遊戲或將它們捆綁在 XAPK 包中時會遇到 OBB 檔案。它們儲存在裝置共用儲存上的 /Android/obb/[package.name]/ 處。
如何處理
OBB 檔案必須放置在正確的目錄中,應用程式才能找到它們。檔案名稱通常遵循 main.[version].[package.name].obb 或 patch.[version].[package.name].obb 模式。使用我們的OBB萃取器從XAPK套件中提取OBB檔案。
DEX:Dalvik 可執行文件
DEX 檔案包含在 Android 執行時期環境上執行的已編譯字節碼。它們可以在 APK 檔案中找到,但也可以在開發和調試過程中獨立存在。
它包含什麼
DEX 檔案包含:
- 以 Dalvik 指令格式編譯 Java/Kotlin 字節碼
- 字串常數和型別定義
- 方法和字段參考
- 類別定義及其層次結構
技術細節
單一 DEX 檔案有 65,536 個方法引用限制(「64K 限制」)。超過此限制的應用程式使用多個 DEX 檔案(classes.dex、classes2.dex 等),這種技術稱為 multidex。現代建置工具會自動處理這個問題。
ODEX、VDEX 和 ART 文件
這些是 Android 運行時在安裝期間或之後創建的 DEX 檔案的最佳化版本:
- ODEX(優化的 DEX): 包含常用方法的提前編譯的本機機器碼。在空閒維護期間根據使用情況產生。
- VDEX(已驗證的DEX): 包含經過驗證的 DEX 字節碼以及預先計算的驗證結果。這樣可以跳過重新驗證,從而加快後續啟動和應用程式啟動的速度。
- ART(Android 運行時映像): 包含預先初始化的類別物件和堆疊資料。這允許運行時在啟動期間跳過常見框架類別的類別載入和初始化。
這些檔案是系統生成的,使用者通常不會直接與之互動。它們儲存在 /data/dalvik-cache/ 中或與 APK 一起儲存在 /data/app/ 中。
SO:共享物件(本機庫)
副檔名為 .so 的檔案是針對特定 CPU 架構編譯的本機共用程式庫。它們包含用 C、C++ 或 Rust 編寫的機器碼,直接在處理器上運行,無需 Dalvik/ART 運行時的開銷。
架構變體
- armeabi-v7a,32 位元 ARM(大多數較舊的裝置)
- arm64-v8a,64 位元 ARM(大多數現代手機)
- x86,32 位元 Intel/AMD(某些平板電腦和模擬器)
- x86_64,64 位元 Intel/AMD(Chromebook 和模擬器)
當 APK 包含本機程式庫時,它必須包含目標裝置的正確體系結構。如果包含錯誤的架構,應用程式將崩潰並顯示 UnsatisfiedLinkError。
Android 中的 XML 文件
Android 廣泛使用 XML,但以兩種不同的形式:
二進位XML
在 APK 檔案內,XML 資源(佈局、清單、字串檔案)以稱為 AXML 的編譯二進位格式儲存。這種格式比文字 XML 更緊湊且解析速度更快。 aapt2 或 apktool 等工具可以將二進位 XML 反編譯回可讀文字。
文字XML
在開發過程中,XML 檔案採用標準文字格式。建置過程將它們編譯為二進位 XML 以包含在 APK 中。 network_security_config.xml 等設定檔和 res/ 目錄中的資源檔案以文字 XML 開頭。
ProGuard/R8 映射文件
雖然不是 Android 特定的格式,但映射檔 (mapping.txt) 對於理解混淆的應用程式非常重要。當開發人員使用 R8 等程式碼縮減工具時,類別和方法名稱會被替換為簡短、無意義的識別碼。映射檔案記錄了原始名稱到模糊名稱的翻譯,這對於閱讀崩潰報告至關重要。
Android 備份格式 (AB)
副檔名為 .ab 的檔案是 adb backup 所建立的 Android 備份檔案。它們包含應用程式資料目錄的 tar 檔案(可以選擇壓縮和加密)。這種格式已被棄用,取而代之的是基於雲端的備份解決方案,但某些備份工具仍在使用這種格式。
IMG 和分割映像
雖然與應用程式無關,但 Android 系統映像使用了幾種值得一提的格式:
- 系統.img: 包含Android框架和預先安裝應用程式的唯讀系統分區
- 啟動.img: 包含Linux核心和初始ramdisk
- 供應商.img: 硬體特定驅動程式和韌體
- 超級.img: 現代設備(Android 10+)中使用的動態分區容器
格式對照表
以下是比較主要應用程式分發格式的快速參考:
- 應用程式: 單文件,可直接安裝,通用(包含所有配置),較大尺寸
- AA: 發布格式,不可直接安裝,需要Play Store處理
- XAPK: 容器(APK + OBB/分割),需要安裝程式或擷取,由 APKPure 使用
- 應用程式: 容器(分割 APK),bundletool 格式,需要安裝程式或合併
- 應用程式管理模組: 容器(分割 APK),APKMirror 格式,需要安裝程式
選擇正確的工具
根據您使用的格式,適合使用不同的工具:
- 有 XAPK 嗎? 使用我們的XAPKS 到 APK 轉換器提取可安裝的APK
- 有AAB嗎? 使用我們的AAB 到 APK 轉換器產生通用APK
- 是否有拆分 APK (APKS)? 使用我們的APKS 到 APK 合併將它們組合起來
- 需要驗證 APK? 使用我們的APK驗證器檢查簽名
- 需要 XAPK 中的 OBB 檔嗎? 使用我們的OBB萃取器解壓縮擴充文件
您應該使用哪種 Android 套件格式?
Android 生態系統的各種檔案格式反映了該平台從簡單的單檔案 APK 到複雜的模組化交付系統的演變。每種格式的存在都是為了解決特定問題:AAB 可以減少下載大小,XAPK 可以簡化多文件應用程式的分發,OBB 可以處理大型遊戲數據,而拆分 APK 則可以實現特定於設備的最佳化。
一旦您了解了這些格式,您就可以處理遇到的任何 Android 包,無論您是側載應用程式、備份裝置還是開發自己的應用程式。關鍵要點是,大多數這些格式最終都是以各種配置保存 APK 檔案的容器,並且使用正確的工具,您始終可以提取所需的內容。