Android bundetool 详解

简介: Android bundetool 详解

android bundetool 详解

一、什么是 bundetool ?为什么要使用 bundetool ?

在使用Android Studio 构建 Android App Bundle 后,需要测试 Android App Bundle 生成 APK 的情形,以及这些 APK 部署到设备上之后的表现。

可以通过两种方式来测试 app bundle:

(1)、在本地使用 bundletool 命令行工具进行测试

(2)、通过 Google Play 进行测试(方法是将 app bundle 上传到 Play 管理中心并使用测试轨道)

这里主要介绍如何使用 bundletool 在本地测试 app bundle。

bundletool 是一种底层工具,可供 Gradle、Android Studio 和 Google Play 用于构建 Android App Bundle 或将 App Bundle 转换为部署到设备的各种 APK。

也可以将 bundletool 作为一种命令行工具,用于重新创建、检查和验证应用 APK 的 Google Play 服务器端 build。

二、 app bundle 生成 APKS

当 bundletool 从 app bundle 生成 APK 时,它会将这些 APK 纳入到一个名为“APK set archive”的容器中,该容器以 .apks 作为文件扩展名。

如果要将 APK 部署到设备,需要添加应用的签名信息。

如果未指定签名信息,bundletool 会尝试使用调试密钥为 APK 签名。

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
bundletool 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

下表详细介绍使用 bundletool build-apks 命令时可以设置的各种标记和选项。

只有 --bundle--output是必需的,其他标记都是可选的。

标记 说明
--bundle=path **(必需)**指定您使用 Android Studio 构建的 App Bundle 的路径。
--output=path **(必需)**指定“.apks”输出文件的名称,该文件中包含了应用的所有 APK 工件。
--overwrite 如果您要覆盖您使用 --output 选项指定的路径下的现有输出文件,请添加此标记。如果已存在输出文件,而您又未添加此标记,会发生构建错误。
--aapt2=path 指定 AAPT2 的自定义路径。 默认情况下,bundletool 包含自己的 AAPT2 版本。
--ks=path 指定用于为 APK 签名的部署密钥库的路径。此标记是可选的。如果您不添加此标记,bundletool 会尝试使用调试签名密钥为您的 APK 签名。
--ks-pass=pass:password--ks-pass=file:/path/to/file 指定密钥库的密码。如果您指定纯文本格式的密码,请使用 pass: 限定该密码。如果您要传递包含该密码的文件的路径,请使用 file: 限定该路径。如果您使用 --ks 标记指定密钥库,而未指定 --ks-pass,那么 bundletool 会提示您从命令行输入密码。
--ks-key-alias=alias 指定要使用的签名密钥的别名。
--key-pass=pass:password--key-pass=file:/path/to/file 指定签名密钥的密码。如果您指定纯文本格式的密码,请使用 pass: 限定该密码。如果您要传递包含该密码的文件的路径,请使用 file: 限定该路径。如果此密码与密钥库的密码相同,您可以省略此标记。
--connected-device 指示 bundletool 针对已连接设备的配置生成 APK。如果您不添加此标记,bundletool 会为您的应用支持的所有设备配置生成 APK。
--device-id=serial-number 如果您有多个已连接的设备,请使用此标记指定要部署应用的设备的序列 ID。
--device-spec=spec_json 使用此标记提供 .json 文件的路径,该文件指定了您要针对其生成 APK 的设备配置。
--mode=universal 如果您希望 bundletool 只构建一个包含应用的所有代码和资源的 APK,以使该 APK 与应用支持的所有设备配置兼容,请将模式设置为 universal。请注意,这些 APK 要比针对特定设备配置优化过的 APK 更大。但是,这些 APK 更便于与内部测试人员共享,例如想在多种设备配置上测试您的应用的测试人员。
--local-testing 使用此标志启用 app bundle 进行本地测试。 在本地测试时,由于无需上传到 Google Play 服务器,因此能够实现快速的迭代测试周期。
三、将 APK 部署到连接的设备

生成一组 APK 后,bundletool 可以将其中适当的 APK 组合部署到已连接的设备。

如果已连接设备搭载 Android 5.0(API 级别 21)或更高版本,bundletool 会推送在该设备上运行您的应用所需的基础 APK、功能模块 APK 和配置 APK。

如果已连接设备搭载 Android 4.4(API 级别 20)或更低版本,bundletool 会查找兼容的多 APK 并将其部署到设备。

如需从 APK 集部署应用,使用 install-apks 命令并使用 --apks=/path/to/apks 标记指定 APK 集的路径。

如下所示:

bundletool install-apks --apks=/MyApp/my_app.apks

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

注意:如果将 --local-testing 标记与 build-apks 命令一起使用,要使本地测试正常运行,需要使 install-apks 安装 APK。

四、生成设备专用 APK 集

如果不想针对应用支持的所有设备配置生成一组 APK,则可以使用 --connected-device 选项,仅针对已连接设备的配置生成 APK,如下所示。

bundletool build-apks --connected-device
--bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

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

五、使用设备规范 JSON 文件

(1)、bundletool 生成并使用设备规范 JSON 文件

bundletool 能够针对 JSON 文件指定的设备配置生成一组 APK。

如需首先为已连接的设备生成 JSON 文件,请运行以下命令:

bundletool get-device-spec --output=/tmp/device-spec.json

bundletool 会在该工具所在的目录中为您的设备创建一个 JSON 文件。

可以将该文件传递给 bundletool,以仅针对该 JSON 文件中描述的配置生成一组 APK,如下所示:

bundletool build-apks --device-spec=/MyApp/pixel2.json
--bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
(2)、手动创建设备规范 JSON

如果无法访问要针对其构建目标 APK 集的设备。

例如:朋友想通过您手头没有的设备试用应用,则可以使用以下格式手动创建 JSON 文件:

{
  "supportedAbis": ["arm64-v8a", "armeabi-v7a"],
  "supportedLocales": ["en", "fr"],
  "screenDensity": 640,
  "sdkVersion": 27
}

可以将此 JSON 传递给 bundle extract-apks 命令,如上所述。

六、从现有 APK 集提取设备专用 APK

如果已有一个 APK 集,并且想要从中提取出一部分针对特定设备配置的 APK,则可以使用 extract-apks 命令并指定设备规范 JSON,如下所示:

bundletool extract-apks
--apks=/MyApp/my_existing_APK_set.apks
--output-dir=/MyApp/my_pixel2_APK_set.apks
--device-spec=/MyApp/bundletool/pixel2.json
七、估算 APK 集中 APK 的下载大小

APK 集内的 APK 将在压缩后通过网络传送。

如需估算这些 APK 的下载大小,可使用 get-size total 命令:

bundletool get-size total --apks=/MyApp/my_app.apks

可以使用以下标记修改 get-size total 命令的行为:

标记 说明
--apks=path **(必需)**指定要估算下载大小的现有 APK 集文件的路径。
--device-spec=path 指定用于匹配的设备规范文件(通过 get-device-spec 获取或手动构建)的路径。您可以通过指定部分路径来估算一组配置。
--dimensions=dimensions 指定估算大小时使用的维度。接受以逗号分隔的 SDKABISCREEN_DENSITYLANGUAGE 列表。如需使用所有维度进行估算,请指定 ALL
--instant 估算支持免安装体验的 APK(而不是安装版 APK)的下载大小。默认情况下,bundletool 会估算安装版 APK 的下载大小。
--modules=modules 指定要纳入估算范围的 APK 集中的模块,以逗号分隔列表的形式指定。bundletool 命令会自动添加指定集的所有相关模块。默认情况下,该命令会估算首次下载时安装的所有模块的下载


相关文章
|
数据安全/隐私保护 Android开发
Android bundetool 转换 .aab 为apk 步骤
Android bundetool 转换 .aab 为apk 步骤
1069 0
Android bundetool 转换 .aab 为apk 步骤
|
Dart 测试技术 开发工具
了解 Flutter 的 Timer 类和 Timer.periodic【Flutter 专题 19】
在构建移动应用程序时,我们经常会遇到必须在一定时间后执行任务的场景。还记得在进入应用程序之前看到闪亮的启动画面吗? 或者我们可能需要一段代码在一段时间后重复执行,比如显示剩余时间限制以填充一次性密码或每秒更改小部件的颜色以创建漂亮的动画。
5882 0
|
5月前
|
JSON API 开发者
微店商品列表 API 接口(附代码示例)
微店商品列表 API 为开发者提供从微店平台获取商品数据的便捷途径,支持分页、分类筛选和排序等功能,响应数据以 JSON 格式返回,包含商品 ID、名称、价格等信息。通过 Python 的 `requests` 库,开发者可轻松调用该接口,实现电商工具开发、市场分析等场景应用。示例代码展示了如何发送请求并处理响应数据,助力高效利用 API 拓展业务功能。
127 10
|
存储 前端开发
Flutter Provider状态管理---MVVM架构实战
Flutter Provider状态管理—MVVM架构实战 在Flutter中,状态管理是一个非常重要的概念。Flutter Provider是一种状态管理的解决方案,它提供了一种简单,灵活和高效的方法来管理Flutter应用程序中的状态。本文将详细介绍Flutter Provider的使用,以及如何在MVVM架构中使用它。
680 0
|
缓存 安全 Java
Android中的persistent属性
Android中的persistent属性
787 2
|
Oracle Java 关系型数据库
04. 【Java教程】在 Linux 上安装 Java
04. 【Java教程】在 Linux 上安装 Java
766 0
|
缓存 API 图形学
【Unity 3D】AssetBundle打包、上传、加载、卸载详解及演示(附源码)
【Unity 3D】AssetBundle打包、上传、加载、卸载详解及演示(附源码)
725 0
|
Android开发 UED 开发者
解释Android App Bundle是什么,它的优势是什么?
解释Android App Bundle是什么,它的优势是什么?
252 0
App逆向百例|18|某A系防护SO跳转修复
App逆向百例|18|某A系防护SO跳转修复
1105 0
|
缓存 前端开发 JavaScript
React 状态管理工具:我是这样选择的
React 状态管理工具五花八门,dva、mobx、recoil、zustand。换做是你,你会怎么选呢?选择一个合适的状态管理工具,对项目研发是至关重要的,来看看我的选择方案吧
30232 25
React 状态管理工具:我是这样选择的