Android开发经验谈Android开发Android进阶之路

AndroidAppBundle

2018-06-01  本文已影响339人  Dynamic_2018

androidAppBundle是一系列的文件,主要目的是app"瘦身"吧,需要借助bundletool最终要变成相应的apk部署到设备上。

官方文档点这里

前言:

Split Apks(5.0+)

splitApks需要5.0以上才支持,5.0以下的gp会按照mutilApk管理,所以不用担心api兼容问题。

盗一张官网的图

project生成bundle

官方提供了两种方法,一种是as3.2+gradle3.2可以直接buildBundle,一种是通过bundleTool命令行生成。

1.AS的方式生成

需要AndroidStuido升级到3.2Canary14+就会有BuildBunlde的选项,和之前buildApk在一个位置。同时需要gradle升级到3.2+才允许使用这个功能。

2.通过命令行生成

./gradlew :base:bundleDebug

生成的bundle是一个.aab格式的压缩文件,用解压出来后。看到的那个base目录就是对应的baseModule,由于这个项目就是一个helloWorld,所以没dynmaicFeatureModule。
Base进去看到是一些很熟悉的文件,dex manifest res.....


image.png

Bundle生成apks

上面生成了.aab文件,但是不能直接安装到设备上。需要通过bundleTool来生成。
文档里面说把bundle递交到googlePlay,GP就可以在用户下载的时候,根据用户设备的特性,给予相应的apk,这样包就比下载所有配置的要小一些。GP也是通过bundleTool来工作的,所以我们也可以根据这个来测试我们的bundle是否能有效工作。
官方bundleTool提供了一个对应的jar,里面有一些build apk,exctra apk等一系列命令,来帮助生成apk,github上也有源码,有兴趣可以去看看。
我用的bundleTool已经到0.4.1了,修复了之前的一个Bug,language分割需要手动设置,现在默认language density abi三个维度默认是开启了。当然可以手动设置去禁用一些。

1.通过bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks来生成apks
这里的bundletool是一个别名 = java -jar yourJarPath;

alias bundletool='java -jar /Users/**/Desktop/Documents/project/bundletool-all-0.4.1.jar '

所以如果不想配置别名,还是老老实实的在命令行敲java -jar yourJarPath --bundle=*** --output=***;

此时虽然会生成apks了,但是会警告你没有签名,后面将不能安装到设备上。
所以需要加上签名相关的参数
--ks=*** (keyStore文件)
--ks-pass=pass:*** (keyStore密码)
--ks-key-alias=*** (alias)
--key-pass=pass:*** (密码)
其实就是和之前生成签名apk的参数一样的。

执行完命令后得到后缀名为.apks的压缩文件,解压后可以看到有很多apk,果然不愧后缀名为apks。

屏幕快照 2018-05-31 下午5.24.47.png 屏幕快照 2018-05-31 下午5.24.52.png

上面是语言split下面是设备尺寸split,但是为啥没有abi split呢~~

2.安装apk到设备上
上面得到的apks也是不能直接安装,通过bundletool install-apks --apks=***.apks(bundletool没配置的就按前面的java -jar)安装。

这里需要加上--adb参数,文档里面没提,估计是bundlTool的bug吧。

image.png
bundletool install-apks --apks=***.apks --adb=上面的地址
这样apk就安装到手机上了,不过对比直接安装和bundle安装的apk大小只差了200k,我的内心是崩溃的。(helloWorld工程测试的,多配置的项目应该会要明显很多,后面再加上dynamic feature module试试,不过大项目上要专门分离dynamic module出来还是有点费劲的)
3.导出apk
除了安装上去,也可以导出特定的apk。
获取连接设备的配置信息
bundletool get-device-spec 
--output=/Users/**/Desktop/hongmi.json 
--adb=/Users/**/Library/Android/sdk/platform-tools/adb

然后就有一个连接的红米手机的配置信息,已json形式保存

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

根据配置导出特定apks

bundletool extract-apks
 --apks=/Users/**/Desktop/d.apks
 --output-dir=/Users/**/Desktop/myapks
 --device-spec=/Users/**/Desktop/hongmi.json 
屏幕快照 2018-05-31 下午8.12.23.png

可以看到这三个apk都是之前很多base里面针对红米配置的,其他配置apk已经没有了,有条件还是要在GP的play consle上试一试。

后续

上一篇下一篇

猜你喜欢

热点阅读