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

2,257 阅读3分钟

最近公司要做包大小的缩减,不用删除资源文件不用删除无用文件就可以直接减少包大小
Android App Bundle来了

这是我参与更文挑战的第6天,活动详情查看: 更文挑战

Android App Bundle

介绍

Android App Bundle 是一种发布格式,其中包含您应用的所有经过编译的代码和资源,它会将 APK 生成及签名交由 Google Play 来完成,目前国内还是的应用市场是不支持的。

Google Play 会使用您的 App Bundle 针对每种设备配置生成并提供经过优化的 APK,因此只会下载特定设备所需的代码和资源来运行您的应用。您不必再构建、签署和管理多个 APK 来优化对不同设备的支持,而用户也可以获得更小且更优化的下载文件包。

对于大多数应用项目而言,构建 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  资源包:比如图片

  • enableSplit true开启 false 关闭

本地自测AAB

通过bundletool工具来测试你的.aab文件

下载地址:github.com/google/bund…

脚本文件可以在

公众号:Android开发编程  回复appbundle领取