Android需求调研--- App Bundle(Google的)

Posted 怀化纱厂球迷

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android需求调研--- App Bundle(Google的)相关的知识,希望对你有一定的参考价值。

最近领导,给了个APP Bundle这么一个东西,让我去调研,并输出最后的结果文档,总结并记录在这里

androidBundle是什么?

googlePlay上一种新的上传格式,以前是传apk,现在可以传Bundle。

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

1.资源选择性加载


 

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

2.动态下发库

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 完成,而不是国内插件化技术的反射代理 hook, 想了解更多关于split apks的内容,请看 官方文档

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

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

原理

只须在 Android Studio 中构建一个应用束 (app bundle),就可以将应用所需的全部内容 (适用于所有设备) 都涵盖在内:所有语言、所有设备屏幕大小、所有硬件架构。接着,在用户下载您的应用时,Google Play 的新动态交付只会传输适用于用户设备的代码和资源。人们在 Play Store 上看到的安装包体积更小,下载速度也越快,同时也节省了设备存储空间。

  • (左)旧版 APK 交付样例 - 将全部资源都交付至设备;
  • (右) 动态交付样例 - 只向设备交付必要资源;

结合Google Play Dynamic Delivery (动态交付) , 实现动态功能

Android App Bundle 支持模块化,通过Dynamic Delivery with split APKs,将一个apk拆分成多个apk,按需加载(包括加载C/C++ libraries),这样开发者可以随时按需交付功能,而不是仅限在安装过程中。

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

使用介绍:

默认情况下,在构建应用程序包时,它支持为每组语言资源,屏幕密度资源和ABI库生成配置APK。使用android.bundle基本模块build.gradle文件中的块 ,如下所示,您可以禁用对一种或多种配置APK的支持:

 bundle 
        language 
            // Specifies that the app bundle should not support
            // configuration APKs for language resources. These
            // resources are instead packaged with each base and
            // dynamic feature APK.
            enableSplit = false
        
        density 
            // This property is set to true by default.
            enableSplit = true
        
        abi 
            // This property is set to true by default.
            enableSplit = true
        
    

使用举例

使用Android App Bundle的结论:

 

线上APP大小(不包含Udesk-SDK)包大小

24.1M

测试appbundle(不包含Udesk-SDK)包大小

17.6--19.2M

安装包大小降低约 20%

包含Udesk-SDK,没有做bundle处理包大小

26M

测试appbundle(包含Udesk-SDK)包大小

19.2--20.8M

安装包大小降低约 20%

能省:5M/6M左右

限制

  • 仅限于通过 Google Play 发布的应用,(Google进一步巩固自身生态)
  • 需要加入到 Google 的 beta program enroll your app in app signing by Google Play in the Play Console
  • 最低支持版本Android 5.0 (API level 21)
  • 低于Android 5.0 (API level 21) 的版本GooglePlay会优化Size,但不支持动态交付。

成本

  • 需要升级到至少Android Studio 3.2版本的,以便支持App Bundle格式

如果在项目中采用app bundle会产生的问题

  • 需要升级到Android Studio3.2版本,AS升级到3.2,默认最低的Build Tools version 为 28.0.2,现在项目是27.0.3,升级后,gradle版本也会改变,同时会引起第三方库,比如kotlin版本需要升级,会引起代码冲突.需要解决

  • 最低支持版本Android 5.0 (API level 21),目前项目是支持最低Android 4.1 (API level 16),目前安卓5.0以下用户量,以最近30天用户数据来看,占有率为0.45%

1.线上版本3.7.7(不包含ai客服-udeskSDK)

通过谷歌市场来发布:24.1M

2.测试APP Bundle

2.1.不包含ai客服-udeskSDK

通过谷歌市场来发布:17.6--19.2M

2.2包含ai客服-udeskSDK

通过谷歌市场来发布:19.2--20.8M

以上是关于Android需求调研--- App Bundle(Google的)的主要内容,如果未能解决你的问题,请参考以下文章

团队作业----备忘录APP的市场需求调研

Android设备实现语音视频通话

将 android app bundle 上传到 playstore 时出错。。您的 app bundle 的目标是无法识别的语言 jp

Android App Bundle tool 的几个命令行

视频剪辑软件调研

您的 Android App Bundle 使用错误的密钥进行签名。确保您的 app bundle 使用正确的签名密钥进行签名,然后重试