Android App Bundle

[转]新姿势来啦 - Android App Bundle

啥是 Android App Bundle

很好理解:Google 官方的插件化呗。Android App Bundle = Apk 动态打包,动态组件化的技术,与 Instant App 不同,AAB 是借助 Split Apk 完成动态加载,使用AAB动态下发方式,可以大幅度减少应用体积,总结下特性,就是2个:

  • 资源选择性加载
  • 动态下发 lib

资源选择性加载

怎么理解这个 资源选择性加载 呢,大家先个图:


image.png

android 因为要适配各种不同硬件和配置,我们有不同 dp 密度的图片文件,语言文件,不同指令集的 so 等,现在 Android App Bundle 来了可以优化这个问题,当然只限于 GooglePlay,在 google 市场我们下载 apk 时,市场先会检测我们手机的特性,然后选择最合适的资源打成 apk 再发给我们,比如我的手机只需要 arm-v7 的 so,hdpi 的图片,剩下的不会下发我们,这样可以大幅度减少 apk 的体积,尤其是对于 so 来说,一个高德地图,不同的 so 包加起来有小 10M 了,这比我们之前自己干的 apk 优化压缩可强多了,不愧是Google 大大,一出手就是神器,可惜啊,Google 服务国内用不了,不知道后续国内会不会跟进

动态下发库

这个可就是太 N 了,插件化实现的目标不就是解决动态性的问题吗,之前看 ios,google 封杀国内的插件化和热修复我还悲观了一阵,但是看到 Android App Bundle 后我们还是有些窃喜的,国内的也努力不是白费的,Google 这不就承认了国人的努力嘛

App Bundles 将一个 apk 拆分成多个 apk,我们的 apk 一般会被拆分为如下几个部分:

  • Base Apk:首次安装的apk,公共代码和资源,所以其他的模块都基于Base Apk;
  • Configuration APKs:native libraries 和适配当前手机屏幕分辨率的资源;
  • Dynamic feature APKs:不需要在首次安装就加载的模块。
image.png
image.png

当然啊注意 AAB 并不是一个插件化框架,它利用的是 Android Framework 提供的 split apks 技术来完成的,而所有安装 split apk 工作均是通过 IPC 交由 google play 完成,而不是国内插件化技术的反射代理 hook, 想了解更多关于split apks的内容,请看 官方文档

另外一点 Android App Bundle 很像阿里的动态化容器框架 Quinox,Quinox 里每个动态部署的库也叫 Bundle,不说这块是不是有什么 PY 交易在里面呢,Quinox 目前没有开源,应该是阿里插件化 Atlas 的进化,详情请看:支付宝客户端架构解析:Android 容器化框架初探

需要 Android Studio 升级为 3.2 及其以上版本,以添加对 Dynamic Delivery 的支持,会把 base app 构建出构建成 .aab 文件


image.png
image.png

Android App Bundle 与 APK 不同,App Bundle 纯粹是为了上传文件而设计的,用户无法直接安装和使用它,.aab 只是一个 zip 文件,Google Play 从中生成优化的 APK 并将其提供给设备进行安装。可以考哪考哪 .abb 中的内容:

image.png

然后新的可动态部署的库会以 apk 的形式添加进来,具体请看 google 官方号:如何获得更小的应用文件尺寸?来了解下 Android App Bundle

如何使用App Bundle

  1. 将你的Android Studio升级为3.2及其以上版本
  2. 添加对Dynamic Delivery的支持
    其实就是一些基础apk需要东西,比如签名,MAIN入口等,详细请阅读:https://developer.android.google.cn
  3. 构建App Bundle
    当你是3.2以上的studio时候,就可以选择build bundle,来构建app bundle的文件
    构建出来就是一个.aab文件
  4. 通过bundletool工具来测试你的.aab文件
    下载地址:https://github.com/google/bundletool
    解压出来就是一个jar包,以bundletool-all-0.6.0.jar为例子
bundletool-all-0.6.0.jar build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

这个命令构建出来的是没有签名的文件,要有签名的,需要如下:

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

这些参数的说明详见如下:


image.png

image.png

无疑就是一些打包的签名,密码等,还有一些特殊的属性,详细大家可以看英文介绍,使用命令后,出来的是app.apks文件,我们可以解压缩一下,出来就是如下的内容:


image.png

从打包出来的东西,更印证了我们前面所说的原理
  1. app的签名上传google play
  2. 将你的包上传到google console

兼容性问题

Api < 21的手机无法进行模块化,Google Play会对其进行Multiple Apks操作来进行下发操作。

Enable on-demand: 是否启用按需下载,如果不启用,会直接打进Apk

Fusing:熔断操作,是否安装到不支持按需下载的设备中

Module title:模块标题
对于动态组件的一些使用场景

关于动态模块的一些注意事项
当打开on-demand(按需加载)时,必须开启Fusing(熔断操作)才能正常的让Api21以下的手机使用module

一般情况下,动态模块下发之后需要重启App才能加载成功,但是如果你使用SplitCompat library,就可以立即生效,Access code and resources from downloaded modules

如果下载的模块太大,需要用户确认,GP要求大于10MB需要用户确认

国际上可以使用Google Play的Play Core Lib直接从gp后台下载我们上传好的dynamic module.

module中的AndroidManifest中定义的Activity不能有exported:true因为别的app不知道你何时安装好模块从而会引发问题

proguard文件在生效的时候会merge base module和所有的dynamic module中的文件,所以在编写proguard的时候要注意这个问题。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容