aar, aab,apk三种应用格式的区别
一、APK (Android Package)
- 本质:可安装的应用包
- 用途:直接安装在 Android 设备上的应用格式
- 特点:
- 包含完整的应用代码(
.dex
)、资源(图片/布局)、清单文件和签名 - 支持所有 Android 版本(从 Android 1.0 至今)
- 可通过任何渠道分发(应用商店、网站、邮件等)
- 包含完整的应用代码(
- 生成位置:
app/build/outputs/apk/
- 文件结构:
APK ├── AndroidManifest.xml ├── classes.dex # 编译后的代码 ├── res/ # 资源文件 ├── lib/ # 原生库(armeabi-v7a, arm64-v8a等) └── META-INF/ # 签名信息
二、AAB (Android App Bundle)
- 本质:Google Play 专用发布格式(不可直接安装)
- 用途:上传到 Google Play 的应用分发格式
- 特点:
- 动态交付:Google Play 按用户设备生成优化版 APK(仅包含所需资源)
- 体积更小:比通用 APK 平均小 15%(省去未使用的语言/分辨率资源)
- 强制要求:2021年8月起,新应用必须使用 AAB 上架 Google Play
- 包含所有资源:支持多语言、多分辨率、动态功能模块
- 生成位置:
app/build/outputs/bundle/
- 工作流程:
三、AAR (Android Archive)
- 本质:代码/资源库(非应用)
- 用途:封装可复用的 Android 库(如 SDK、自定义控件)
- 特点:
- 包含代码(
.jar
)、资源、清单文件和 C/C++ 库 - 可被其他 Android 项目依赖(类似 Java 的
.jar
) - 不可直接安装
- 包含代码(
- 生成位置:
library-module/build/outputs/aar/
- 文件结构:
AAR ├── AndroidManifest.xml ├── classes.jar # 库代码 ├── res/ # 资源文件 ├── jni/ # 原生库(.so文件) └── R.txt # 资源ID映射
四、核心对比表
特性 | APK | AAB | AAR |
---|---|---|---|
安装性 | ✅ 可直接安装 | ❌ 需 Google Play 转换 | ❌ 不可安装 |
用途 | 应用分发与安装 | Google Play 发布 | 代码/资源复用 |
体积优化 | ❌ 包含所有资源 | ✅ 按设备动态生成 | ❌ 包含全部库资源 |
分发渠道 | 所有应用商店/网站 | 仅限 Google Play | 项目依赖/Maven仓库 |
包含内容 | 完整应用 | 应用所有变体资源 | 库代码+资源 |
生成命令 | ./gradlew assembleRelease | ./gradlew bundleRelease | ./gradlew :lib:assemble |
文件大小 | 较大(通用包) | 较小(基础包+按需资源) | 中等(库内容决定) |
五、使用场景指南
- 开发调试 → 生成 APK(快速安装测试)
- 上架 Google Play → 构建 AAB(满足政策要求)
- 开发公共组件 → 发布 AAR(如
glide.aar
,retrofit.aar
) - 企业内部分发 → 签名 APK(绕过商店限制)
- 模块化开发 → 子模块打包为 AAR(功能解耦)
关键提示:
- 从 Android Studio 3.2 开始,AAB 成为默认发布格式
- 使用 AAB 可启用 Play Feature Delivery(动态功能模块)
- 本地测试 AAB 需通过
bundletool
转换:bundletool build-apks --bundle=app.aab --output=app.apks bundletool install-apks --apks=app.apks
理解这三者的区别,能显著提升 Android 开发效率与应用发布质量。