盒子
盒子
文章目录
  1. 介绍
  2. 条件
  3. 原理
  4. 如何构建 Android App Bundle
    1. Android Studio 3.2 版本及以上
    2. 通过命令行构建
  5. 如何测试生成出来的 Android App Bundle
    1. 本地使用 bundletool 命令行工具
      1. 1. 将 App Bundle 生成一组 APK
      2. 2. 将 APK 安装到连接的设备
      3. 测试
      4. 更多
    2. 直接将 App Bundle 上传到应用 Play 商店后台
  6. 实验
    1. 本地语言包
    2. 图片资源
  7. 最后
  8. 资料
  9. 推荐阅读

如何利用 Android App Bundle 进行 APK 瘦身 28%

介绍

Android App Bundle 是 Google 在 2018 年 IO 大会上推出一种新发布格式,通过此格式发布的应用,Google Play 商店会根据用户设备屏幕密度,CPU 架构 下发其对应的 APK,这就意味着用户下载的 APK 不会存在与自己设备不匹配的格式资源,从而也达到了大幅度减少 APK 大小。另外利用此格式还可以实现 动态组件化 的技术,此文不做该技术的过多介绍,感兴趣的可以到 官方文档 了解。

条件

如果使用 Android App Bundle 发布格式,必须加入 Google Play 应用签名计划。关于如何加入,可以详细查看这份 官方指南

注意:

一旦你的应用使用了 Google 应用签名,用户下载的 APK 签名将会是 Google 生成的签名,而不是你自己为应用的签名。因此需要检查你应用使用到的第三方平台 SDK,如果有需要配置签名信息的,记得将 Google 生成的签名信息配置到其对应的地方。

原理

生成的 Android App Bundle 包,是不可以直接安装的,App Bundle 会根据设备屏幕密度、CPU 架构、Language 多个维度进行拆分,组装成对各种组合的 Apk;然后 Play Store 会根据用户设备配置,提供对应的组合 APK。通过下图可以促进你理解:

image

例如,用户的设备配置如下:arm,xhdpi,en_US,则最终用户下载的 APK 将是(base + arm + xhdpi + en).apk的组合。

如果用户在设备设置中更改/添加了新语言,则 Play Store 会检测到此情况,并尝试为在设备下载新的其他语言分类 APK。如果互联网不可用,则稍后将下载。

如何构建 Android App Bundle

Android Studio 3.2 版本及以上

Android Studio –> Build –> Generate Signed Bundle/APK

image

image

通过命令行构建

1
./gradlew bundleRelease

如何测试生成出来的 Android App Bundle

本地使用 bundletool 命令行工具

bundletool 是一种底层工具,可供 Gradle、Android Studio 和 Google Play 用于编译 Android App Bundle 或将 App Bundle 转换为部署到设备的各种 APK。您也可以将 bundletool 作为一种命令行工具,用于重新创建、检查和验证应用 APK 的 Google Play 服务器端版本。

下载地址:GitHub 代码库

1. 将 App Bundle 生成一组 APK

将你从 Android Studio 构建生成的 App Bundle 为应用支持的所有设备生成一组 APK,用一个以 .apks 为文件扩展名的容器装起来。

如果您未指定签名信息,bundletool 会尝试使用调试密钥为 APK 签名,这里我为了方便我将这些 APK 部署到设备,添加了应用的签名信息。

1
2
3
4
5
6
7
java -jar bundletool.jar build-apks 
--bundle=/MyApp/my_app.aab
--output=/MyApp/my_app.apks
--ks=/MyApp/keystore.jks
--ks-pass=file:/MyApp/keystore.pwd
--ks-key-alias=MyKeyAlias
--key-pass=file:/MyApp/key.pwd

2. 将 APK 安装到连接的设备

生成一组 APK 后,bundletool 可以将该组中适当 APK 的组合安装到连接的设备。

1
java -jar bundletool.jar install-apks --apks=/MyApp/my_app.apks

如果连接了多个设备,请添加 –device-id=serial-id 标记来指定目标设备。

测试

通过上面两条命令,已经为你即将发布的应用安装到你的设备上,最后检查下 app 运行情况,没问题就可以将刚才生成的 aab 上传到商店后台进行版本发布。

更多

想了解更多关于 bundletool 工具的使用方法,可以到 这里 了解。

直接将 App Bundle 上传到应用 Play 商店后台

这个操作很简单,跟平常发布版本操作差不多,具体如下:

版本管理 –> 应用版本 –> 创建版本 –> 添加 Android App Bundle –> 保存

此时想检查刚上传的 App Bundle 生成的 APK 情况,以及下载生成的 APK 到本地进行测试,操作步骤如下:

版本管理 –> 软件工件库 –> 软件工件库草稿找到刚才上传的版本 –> 探索 –> 下载设备专属 APK

image

image

实验

本地语言包

如果本身 App 是支持多语言的,在应用内切换语言,Play Store 无法检测应用语言改变,因此需要禁止 App Bundle 根据语言拆分安装包。

在 App 下的 build.gradle 文件添加以下配置:

1
2
3
4
5
6
7
8
9
10
11
android {
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
}
}
}

图片资源

目前大部分应用图片资源只适配一些高分辨率 xxxhdpi,xxhdpi。

验证 App Bundle 拆分出来的低分辨率包,是否会不存在高分辨率的图片资源?

将生成 “apks” 的文件更改为 “zip” 格式 –> 解压 –> standalones –> 选一个低分辨率的安装包 –> 更改为 “zip” 格式 –> 解压 –> 查看资源文件

image

结果:低分辨率包依然存在我们项目高分辨率的图片。

最后

最后来看下使用 App Bundle 生成的 APK,与上个版本相比的数据。

image

资料

推荐阅读

支持一下
扫一扫,支持 G军仔
  • 微信扫一扫
  • 支付宝扫一扫