项目中一个定制版本,需要上架Google Play。 我们和上架国内的应用市场一样提供了一个apk,收到了如下的提示:
Google 给出的描述中,提到通过 Android App Bundle
来进行优化。
那什么是 Android App Bundle
呢?
Google Play 推出的新应用服务模式名叫“Dynamic Delivery”,新的服务支持上传的文件就是Android App Bundle
文件(.aab
文件),之后用户在下载应用时,Google Play应用服务会针对下载用户的设备配置生成并提供经过优化的 APK,因此他们只需下载运行应用所需的代码和资源,不需要下载原先apk中的所有资源文件,从而让用户获取到最轻量的apk。
Android App Bundle
是一种全新的上传格式,是用来上传到 Google Play 以支持 Dynamic Delivery应用服务 的一种文件类型(文件扩展名为 .aab
)Android App Bundle
其中包含应用的所有编译好的代码和资源,但 APK 生成及签名工作则交给 Google Play 来处理。App Bundles 将一个 apk 拆分成多个 apk,我们的 apk 一般会被拆分为如下几个部分:
.aab
文件 和 apk
一样也是一个zip
的文件, 不一样的是apk
可以直接安装到手机,而.aab
文件不能直接安装,需要通过Google Play 或者 bundletool
工具 生成优化后的apk才能安装到手机。
下图中为.aab
中的内容:
展开后如下:
编译Android App Bundle
需支持以下条件:
同时有两种方式可以编译Android App Bundle
文件 :
Build
-> Build Bundle(s)/APK(s)
-> Build Bundle(s)
编译结束后.aab
文件目录位置为: app
-> build
-> outputs
-> bundle
->
debug/release
使用可视化界面操作,操作更加简洁, 同时开发过程中run
的时候也可以指定使用.aab
来源的apk
Edit Configurations
-> General
标签 -> Installation Options
-> APK from app bundle
./gradlew app:bundleDebug
使用命令行的编译方式也同样支持。 在蓝盾上自动集成构建的时候,无法使用可视化操作的方式,只能使用命令行的方式。 命令行构建更加的灵活,可以在启动构建的时候,通过参数来控制构建脚本
不论通过那种方式编译出的.aab
文件,我们都会进行基本的验证。
有以下两种方式:
这里介绍第一种方式进行测试
1、先从github 下载 bundletool
本地命令行工具
2、将 App Bundle 生成 一组apk文件
//app bundle 为应用支持的所有设备配置生成一组 APK
java -jar bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
或使用:
//app bundle 为应用支持的所有设备配置生成一组 APK并添加签名信息
bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
--ks=/MyApp/keystore.jks
--ks-pass=file:/MyApp/keystore.pwd
--ks-key-alias=MyKeyAlias
--key-pass=file:/MyApp/key.pwd
当 bundletool 根据 app bundle 生成 APK 时,它会将这些 APK 纳入到一个名为“APK set archive”的容器中,该容器以 .apks 作为文件扩展名。
3、 将apks文件安装到手机(bundletool 可以将其中适当的 APK 组合部署到已连接的设备)
bundletool install-apks --apks=/MyApp/my_app.apks
tips:
3.1: Android 5.0(API 级别 21)或更高版本,bundletool 会推送在该设备上运行您的应用所需的基础 APK、动态功能 APK 和配置 APK
3.2: Android 4.4(API 级别 20)或更低版本,bundletool 会查找兼容的多 APK 并将其部署到您的设备
其它 bundletool 的使用可参考: 官方文档介绍