GooglePlay强推的Appbundle究竟是什么?aab?不优化代码直接减少安装包大小

63 阅读3分钟

对于大多数应用项目而言,构建 App Bundle 以支持提供经过优化的 APK 并不费力。例如,如果您已经按照既定惯例组织管理应用的代码和资源,只需使用 Android Studio 或使用命令行来构建已签名的 Android App Bundle,并将它们上传到 Google Play。然后,就能提供经过优化的 APK,自动获享其带来的优势了

GooglePaly上架新应用限制

重要提示:从 2021 年 8 月起,新应用需要使用 Android App Bundle 才能在 Google Play 中发布。现在,Play Feature Delivery 或 Play Asset Delivery 支持大小超过 150 MB 的新应用。

原理

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

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

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
    不需要在首次安装就加载的模块

引用到APP中

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

android { ...
............ // Instead, use the bundle block to control which types of configuration APKs // you want your app bundle to support. 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 } } }

  • language 语言

  • abi  so包 

  • density  资源包:比如图片

img img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!