前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android App瘦身新姿势——Android App Bundle

Android App瘦身新姿势——Android App Bundle

作者头像
老马的编程之旅
发布2022-06-22 12:57:38
1.2K0
发布2022-06-22 12:57:38
举报
文章被收录于专栏:深入理解Android

由于博主长期从事海外App的开发,所以心系谷歌爸爸的动向呀,最近谷歌爸爸推出了一个Android App Bundle的东西,据说可以压缩包体,当然这仅限于上传Google Play的应用,国内市场不支持,当然我们也可以学习谷歌爸爸的思想。

概述

Android App Bundle是Google最新推出的Apk动态打包,动态组件化的技术,与Instant App不同,AAB是借助Split Apk完成动态加载,使用AAB动态下发方式,可以大幅度减少应用体积。

从这个动态图中,我们就可以大概知道了App Bundle的原理是什么,App Bundle将这些特性在多个维度进行拆分,在资源维度,ABI维度和Language维度进行了拆分,你只要按需组装你的Apk然后安装即可。再说的直白一点就是,比如,项目中可能会xxhdpi,xhdpi各有一套图,或者x86,armeabi的又各有一套so库,以前的安装方式,是把这些全部装进用户的手机中,使用App Bundle,假设你是一个x86,xxhdpi的手机,那么App Bundle会帮你拼装好一个apk,这个apk的资源只有xxhdpi的,而且so库只有x86,其他无关的都会剔除。

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

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

AAB并不是一个插件化框架,它利用的是Android Framework提供的split apks技术来完成的,而所有安装split apk工作均是通过IPC交由google play完成。 想了解更多关于split apks的内容,请关注这里: https://developer.android.com/studio/build/configure-apk-splits?authuser=2

如何使用App Bundle

1.将你的Android Studio升级为3.2及其以上版本 2.添加对Dynamic Delivery的支持 其实就是一些基础apk需要东西,比如签名,MAIN入口等,详细请阅读: https://developer.android.google.cn/studio/projects/dynamic-delivery 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为例子

代码语言:javascript
复制
bundletool-all-0.6.0.jar build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

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

代码语言:javascript
复制
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

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

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

从打包出来的东西,更印证了我们前面所说的原理

5.app的签名上传google play 6.将你的包上传到google console

兼容性问题

Api < 21的手机无法进行模块化,Google Play会对其进行Multiple Apks操作来进行下发操作。 Enable on-demand: 是否启用按需下载,如果不启用,会直接打进Apk Fusing:熔断操作,是否安装到不支持按需下载的设备中 Module title: 模块标题

对于动态组件的一些使用场景

语言包的动态下发 当Split 针对语言进行划分时候,用户下载的Apk仅仅只能下载下来一个Base Apk,包含他的当前系统语言,你可以将其他语言包作为Dynamic feature下发给用户,做到语言包的动态下发

功能的动态下发 对于某些独立的feature,这其实跟之前的插件化方案有异曲同工之处,而且天然支持友好,动态下发业务需求能有效的减少包大小,增加启动速度,减少安装时间等等。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 如何使用App Bundle
  • 兼容性问题
  • 对于动态组件的一些使用场景
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档