基本一点的用法以及想复制命令的请看其它博客,这里主要分享一些小技巧。

官方文档

安装

# 安装
brew install bundletool

# 升级
brew upgrade bundletool

生成apks

这个步骤需要签名,生成的产物如果维度比较多会非常大,耗时也很久。

# 通过 aab 生成 apks 文件
bundletool build-apks 
--bundle=app.aab 
--output=app.apks
--ks=keystore.jks
--ks-pass=file:keystore.pwd //从文件读
# --ks-pass=pass:password //直接输入密码
--ks-key-alias=keyAlias
--key-pass=file:key.pwd //从文件读

会生成一个app.apks的文件到文件夹里,如下图这个文件达到了1.32G,十分恐怖。

apks文件

这个文件可直接解压,解压后的结果如图,包含了splits以及standalones两个文件夹

apks解压结果

splits文件夹

这个文件夹中存放的文件类似资源包,不同手机会根据其机型选用适合的apk进行组合安装。一般来说,如果bundle配置全开,设备可以从32/64位、dpi、区域语言三个维度进行挑选。

需要注意的是,这种安装方式仅提供给Android 5.0以上设备使用。

standalones文件夹

为了兼容Android 5.0以下设备,在生成apks的过程中,生成了适合不同机型的apk。

这些apk是能够直接安装的,在低版本手机上使用bundletool其实就是安装的这里面的apk。

安装到手机

bundletool install-apks --apks=app.apks

如果是测试是否能够安装,那么使用上面的命令可以验证。

如果是想得到apk,可以直接解压apks获取standalones文件夹中的apk。

生成apk

说实话感觉这个功能比较鸡肋,直接解压apks即可拿到需要的产物。

用这个命令主要是为了只生成对应设备的文件,节省解压时间以及节省磁盘空间。

首先需要一个json配置文件,用来描述安装到什么设备上

{
  "supportedAbis": [
    "armeabi-v7a"
  ],
  "supportedLocales": [
    "zh-CN"
  ],
  "screenDensity": 480,
  "sdkVersion": 28
}

使用以下命令生成产物

bundletool extract-apks 
--apks=app.apks
--device-spec=fake.json
--output-dir=apks

有一个需要注意的点,之前也有提到,如果sdkVersion是>=20的,那么产物会是几个apk包,如下图

json配置文件生成产物

很明显,其实就是把apks中的文件挑选了一下解压给你

安装多个apk

现在大多设备都在5.0以上了吧..所以有了多个apk包应该怎么安装呢?

adb install-multiple base-master.apk base-armeabi_v7a.apk df_fusing-master.apk base-mdpi.apk

查看BundleConfig

bundletool dump config --bundle=app.aab

通过apks获取设备生成apk大小

bundletool get-size total 
--apks=app.apks 
--device-spec=fake.json