bundles
对于手机用户来说,“存储空间不足” 警告有时会显得非常烦人。时至今日,手机存储容量仍然是有限的。虽然存储容量多年来一直在增长,但是填充在我们手机里的东西:音乐、应用、游戏、照片等也同样在增长。如何针对不同的用户给出最优的安装体验,正是 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 = <true or false>
}
language {
enableSplit = <true or false>
}
abi {
enableSplit = <true or false>
}
}
}
小结
- 正如我们所见,Android App Bundle 代表着 Android 应用交付的未来,提供单一的 APK 的做法已经过时。应用体积可以减小,而且还可以提供定制功能,为每个用户提供度身定制的体验
- 更棒的是,开发者并不需要花费太大力气就可以尽享这些收益。一些开发者已经发现应用体积大幅减少。用户也可以获得极大的好处,因为他们的设备可以为音乐、电影、应用等其他内容提供更多的可用空间。开发者还可以通过使用 Android Vitals 进一步提高其应用在用户设备上的性能和稳定性。
参考
- 如何获得更小的应用文件尺寸?来了解下 Android App Bundle
文章最后发布于: 2018-10-18 22:39:04
相关阅读
Android ImageView 的scaleType 属性图解
ImageView 是 Android 中最常用的控件之一,而在使用ImageView时,必不可少的会使用到它的scaleType属性。该属性指定了你想让ImageVi
优酷App v5.1高清无码版上线 内附iOS/Android下载
今日,优酷宣布优酷App v5.1正式上线App Store,全面适配iOS 9,新增U+高清模式。此前,Android优酷App v5.1已于9月25日上线。据官方介绍
Android开发中Google地图选点页面打开闪退的问题使用release签名构建出来的release包,通过adb install 安装一切正常。但是发布到G
最近在学习通过墓碑文件定位bug所在位置,网上浏览了很多的博客,大多数只能做到利用addr2line定位到行号 但是对于大型项目,尤其是C++
Android创建文件报错file.createNewFile
在程序中有需要使用照相机照照片,并上传一张图片,目前的做法是:先将一张图片存储在某一个地方,然后在进行上传,但是在创建文件的过程中