简介

App Bundle 是一种新的安卓编译打包方式,编译工具可以根据CPU架构类型、屏幕分辨率、语言等维度将一个传统的App 打包成一个App集合;用户下载App时,应用市场会根据终端三种维度的类型提供仅适配此终端的App子集,从而在提供相同业务功能的前提下,节省用户的网络流量与终端设备空间。

我们仅需对项目做很小的修改,就可以将传统 App 修改为 Bundle 版本

您将会学到什么

硬件要求

软件要求

创建一个安卓project

  1. 打开Android Studio, File>New>New Project
  2. 选择 Phone and Tablet > Empty Activity > Next
  3. 配置工程相关属性(工程名、Package name 、API Level 等等)
  4. 点击Finish 完成工程创建。
    在本例中,我们使用默认工程配置,无需修改任何代码就可以展示Bundle开发特性。

编译App

此步骤我们将编译出三种格式APK,分别为:

编译完整Apk

完整Apk 为传统编译方式,Apk包含了App相关的所有资源与代码,操作步骤如下:

编译Bundles

点击 Build > Build Bunldes / APK(s) > Build Bundle(s)

会在 build>outputs>bundle>debug 目录生成 app-debug.aab 文件

定制化编译Bundles

默认情况下,Android studio 会自动根据 CPU 架构、屏幕分辨率、语言这三个维度将app 分拆;如果希望自由控制分拆维度,可以在app/build.gradle 文件中android {} 增加控制开关

bundle { language { enableSplit = true } density { enableSplit = true } abi { enableSplit = true } }

若将language的enableSplit 属性设置为false,那么编译时,Android Studio 会将所有的语言资源打入base.apk中(下一节我们会关注aab文件的格式)

通过上一步编译出的aab文件,并不能在本地进行安装测试,需要通过Bundletool转换为apk 集合,BundleTool 是Google 开源的一个命令行工具,可以通过下面按钮下载. aab 文件可以上传到应用市场(应用市场后台会自动调用BundleTool工具转换)。本节主要讨论使用BundleTool 本地转换aab文件。

下载BundleTool

转为aab 文件为 bundles

java -jar bundletool-all-0.10.2.jar build-apks --bundle=app-debug.aab --output=aab.apks

其中 bundle 表示aab 文件路径;–output 表示生成apk文件路径
修改apks 文件后缀名为zip,然后解压splits,获取各apk 信息如下:

安装bunlde

找到主包 以及适配自己手机的分辨率包、语言包、CPU架构包,进行安装测试;本例相关包如下: base-master.apk(主包)、base-xxxhdpi.apk(分辨率相关包) 、base-zh.apk(语言包) ,没有SO文件(CPU架构相关包),安装到手机上验证功能

adb install-multiple .\outputs\bundle\debug\splits\base-master.apk .\outputs\bundle\debug\splits\base-xxxhdpi.apk .\outputs\bundle\debug\splits\base-zh.apk

转换aab为完整apk

由于部分版本(Android 5.0 以下) 不支持app Bundle功能,个别场景我们需要返回全量包;BundleTool工具提供了 将aab 转换为全量包的能力,使用方法如下:

java -jar bundletool-all-0.10.2.jar build-apks --bundle= app-debug.aab --output=aab-un.apks --mode=universal

修改后缀zip,解压后apk信息如下:

安装完整apk

adb install universal.apk

恭喜你,你已经完成了App Bundle的第一个项目,主要学习了如下内容:

本次Codelab使用的DEMO原码

源码下载

已复制代码