每种 Android 文件格式说明:APK、AAB、XAPK、APKS、APKM、OBB 等

A filing tray with tabs labeled APK, AAB, XAPK, APKS, APKM and OBB

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 格式,需要安装程序

选择正确的工具

根据您使用的格式,适合使用不同的工具:

您应该使用哪种 Android 包格式?

Android 生态系统的各种文件格式反映了该平台从简单的单文件 APK 到复杂的模块化交付系统的演变。每种格式的存在都是为了解决特定问题:AAB 可以减少下载大小,XAPK 可以简化多文件应用程序的分发,OBB 可以处理大型游戏数据,而拆分 APK 则可以实现特定于设备的优化。

一旦了解了这些格式,您就可以处理遇到的任何 Android 包,无论您是侧载应用程序、备份设备还是开发自己的应用程序。关键要点是,大多数这些格式最终都是以各种配置保存 APK 文件的容器,并且使用正确的工具,您始终可以提取所需的内容。

由 Shaefale 女士设计并记录 首席开发人员和 Android 包架构师 • 在 Android 12–15 上经过验证

Mst Shaefale 在 xapktoapk.com 维护客户端 XAPK/APKS 合并、二进制清单解析器和 APK v1+v2 签名工具。发现过时的命令或操作系统更改?发送编辑说明。