Android App Bundle的学习整理

对于手机用户来说,“存储空间不足” 警告有时会显得非常烦人。时至今日,手机存储容量仍然是有限的。虽然存储容量多年来一直在增长,但是填充在我们手机里的东西:音乐、应用、游戏、照片等也同样在增长。如何针对不同的用户给出最优的安装体验,正是 Android App Bundle 所要解决的问题

传统的APK

  • Android Package Kit
  • 包含了应用支持的所有设备的代码和资源,您在安装apk是可能装上了一些永远也用不到的资源。
  • 很明显,apk里的内容比您要求的还要多,占用的空间比实际需要的更多
  • Android app Bundle的出现可以让开发者用更小的apk交付同样卓越的应用。

Android App Bundle 是什么?

  • 是一种的新的发布格式。
  • 准确的说,是一个带有.abb扩展名的zip文件。
  • 包含应用支持的所有设备的代码和资源。例如DEX文件,本地代码库,清单文件,资源文件等。
  • 一旦上传发布,Google Play就会处理APK的签名和生成,这个过程称为动态交付(Dynamic Delivery)
  • 动态交付的优点:根据用户的设备配置为用户生成优化的APK

  • 分拆 APK (在 Lollipop 中引入) 是从给定的 Android App Bundle 生成的,其行为与单个 APK 无异
  • 一个典型的应用可以获得一个基础APK多个配置APK
  • 基本APK包含所有设备配置共有的文件,如清单文件。
  • 配置APK就是为用户生成的了,每个里面都包含了特定设备配置的相关资源:语言,CPU架构,或者屏幕密度。
  • 到用户设备里的就是基本APK(其他任何设备也会获得)以及包含用户设备相关资源的配置APK。

详细解释

  • 我手上有一台小米A1,我设置了主要语言为英语。
  • 那么我下载到的apk就是基础APK以及支持英文,arm64 CPU架构和xhdpi屏幕分辨率的配置APK。
  • 更厉害的是:当你的设备配置(如语言)发生改变,Google Play会检测到它,并下载该语言的配置APK。

动态功能 APK

  • 动态功能 APK包含用户首次安装应用时 不需要的应用功能和资源。
  • 开发者可以把这些功能添加到应用中,Google Play会按需提供这些动态功能模,而不是在安装时统一添加,从而进一步减少应用下载体积。
  • 简单理解就是:我们有必要将那些消耗空间且在安装时根本用不着的功能,以及那些很少用得着的功能,都打包进动态功能模块中,这将显著减少用户安装时的文件下载量。

Android App Bundle != APK

Android App Bundle 与 APK 有一些相似之处,但它们是截然不同的,且用于不同的目的。

  • APP Bundle(应用束)纯粹是为了上传设计的文件,用户无法直接安装和使用它。它是一个zip文件,Google Play 从中生成优化的APK并将其提供给设备进行安装。
  • 应用束包含用于帮助工具生成 APK 的元数据文件 (这些元数据文件最终不会出现在 APK 中),此外还拥有严格的验证标准。

从 APK 切换到应用束是一个无缝过程。如果您使用 Android Studio 3.2 及更高版本,那么您只需点击几下即可生成已签名的应用束,将其上传到 Play Store,即可让用户开始享受更小尺寸 APK 所带来的便利。由于您的代码库没有重大变化,因此您无需担心会有什么问题发生。Android App Bundle 的早期采用者已经发现,动态交付显著减小了他们的应用体积。一些开发者甚至可以将他们的 APK 大小减半

Android App Bundle 的好处都有哪些?

  • 体积小,用户安装时无需考虑是否需要腾出空间
  • Android App Bundle 是单一工件,因此无需构建、签名或管理多个 APK
  • 您可以为特定用例和受众添加动态功能,而无需增加安装时的应用体积

构建 App Bundle

  • 在 Android Studio 中打开项目后,转到菜单栏并选择 Build > Build Bundle(s)/ APKs > Build Bundle(s)。等待生成应用束。您可以在生成应用束后的弹出窗口中点击选项来找到生成的 .aab 文件,并进行分析
  • 想要生成签名版本的话,请选择Build > Generate Signed Bundle/APK… > Android App Bundle > Select Base Module > Enter Signing Credentials & Check any other options (和您操作 APK 所做的事情一样)
  • 想要更好地控制从 Android App Bundle 进行拆分的方式的话,您可以从应用束的设置区块中进行精确设置:
android {
    ...
    bundle {
        density {
            enableSplit = 
        }
        
        language {
            enableSplit = 
        }
        
        abi {
            enableSplit = 
        }
    }
}

小结

  • 正如我们所见,Android App Bundle 代表着 Android 应用交付的未来,提供单一的 APK 的做法已经过时。应用体积可以减小,而且还可以提供定制功能,为每个用户提供度身定制的体验
  • 更棒的是,开发者并不需要花费太大力气就可以尽享这些收益。一些开发者已经发现应用体积大幅减少。用户也可以获得极大的好处,因为他们的设备可以为音乐、电影、应用等其他内容提供更多的可用空间。开发者还可以通过使用 Android Vitals 进一步提高其应用在用户设备上的性能和稳定性。

参考

  • 如何获得更小的应用文件尺寸?来了解下 Android App Bundle

你可能感兴趣的:(Android技术)