Android bundetool 详解

2023-11-07

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 命令会自动添加指定集的所有相关模块。默认情况下,该命令会估算首次下载时安装的所有模块的下载
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android bundetool 详解 的相关文章

  • 在 Netbeans 8 上配置 JBoss EAP 的问题

    我已经下载了 JBoss EAP 7 并正在 Netbeans 8 上配置它 我已经到达向导 实例属性 其中要求从选择框中选择 域 当我打开选择框时 它是空的 没有什么可以选择的 因此 完成 按钮也处于非活动状态 这使得无法完成配置 我通过
  • Calendar.getInstance(TimeZone.getTimeZone("UTC")) 不返回 UTC 时间

    我对得到的结果真的很困惑Calendar getInstance TimeZone getTimeZone UTC 方法调用 它返回 IST 时间 这是我使用的代码 Calendar cal Two Calendar getInstance
  • 将 Firebase 云消息传递与 Windows 应用程序结合使用

    我在 Android 和 iOS 应用程序中使用 Firebase Cloud Messaging 但是我还有此应用程序的 Windows Mac OS 版本 我想保留相同的逻辑 我知道 Firebase Cloud Messaging 可
  • HERE 地图:更改路线已行驶部分的颜色

    导航时可以改变路线的颜色吗 具体来说 我希望路线中已行驶的部分的颜色与即将行驶的部分的颜色不同 现在都是同一个颜色 将 MapRoute 对象的 TravelColor 变量设置为透明对我来说很有效 mapRoute color Resou
  • react-native run-android 失败并出现错误:任务 ':app:dexDebug' 执行失败

    我使用的是 Windows 8 1 和react native cli 1 0 0 and react native 0 31 0 添加后react native maps对于该项目 我运行了命令react native upgrade并给
  • 如何在selenium服务器上提供自定义功能?

    我知道可以通过某种方法获得一些硒功能 其中之一如下 driver getCapabilities getBrowserName 它返回浏览器名称的值 但如果它指的是一个可用的方法 如果我没有误解的话 这似乎与自定义功能有关 就像我的意思是
  • 有没有一种快速方法可以从 Jar/war 中删除文件,而无需提取 jar 并重新创建它?

    所以我需要从 jar war 文件中删除一个文件 我希望有类似 jar d myjar jar file I donot need txt 的内容 但现在我能看到从 Linux 命令行执行此操作的唯一方法 不使用 WinRAR Winzip
  • 测试弱引用

    在 Java 中测试弱引用的正确方法是什么 我最初的想法是执行以下操作 public class WeakReferenceTest public class Target private String value public Targe
  • Netty:阻止调用以获取连接的服务器通道?

    呼吁ServerBootstrap bind 返回一个Channel但这不是在Connected状态 因此不能用于写入客户端 Netty 文档中的所有示例都显示写入Channel从它的ChannelHandler的事件如channelCon
  • Cucumber Java 与 Spring Boot 集成 - Spring @Autowired 抛出 NullPointer 异常

    我正在为 Spring boot 应用程序编写 cucumber java 单元测试来测试每个功能 当我与 Spring Boot 集成时 Autowired 类抛出 NullPointer 异常 Spring Boot应用程序类 Spri
  • 模块中的类无法加载

    我正在开发一个 2D Unity android 游戏 其中我最近添加了 Firebase Beta SDK 但添加后FirebaseAnalytics unitypackage我面临的错误是 无法加载模块中的类 当我删除文件夹时Fireb
  • 替换后增量

    我自己已经有一个问题了 但我想扩展它后增量示例 https stackoverflow com questions 51308967 post increment with example char a D int b 5 System o
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • Java中的Object类是什么?

    什么是或什么类型private Object obj Object http download oracle com javase 6 docs api java lang Object html是Java继承层次结构中每个类的最终祖先 从
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • 在Android Studio gradle项目中使用NDK和STL

    我在将 stlport 链接到 Android Studio 中的 gradle 项目时遇到问题 使用 NDK 的 Eclipse Android 项目迁移到 Android Studio 该项目使用 STL 我有包含内容的 android
  • Trie 数据结构 - Java [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有任何库或文档 链接提供了在 java 中实现 Trie 数据结构的更多信息 任何帮助都会很棒 Thanks 你可以阅读Java特里树
  • 如何从 Maven 存储库引用本机 DLL?

    如果 JAR 附带 Maven 存储库中的本机 DLL 我需要在 pom xml 中放入什么才能将该 DLL 放入打包中 更具体地举个例子Jacob http search maven org artifactdetails 7Cnet s
  • 在 RESTful Web 服务中实现注销

    我正在开发一个需要注销服务的移动应用程序 登录服务是通过数据库验证来完成的 现在我陷入了注销状态 退一步 您没有提供有关如何在应用程序中执行身份验证的详细信息 并且很难猜测您在做什么 但是 需要注意的是 在 REST 应用程序中 不能有会话
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import

随机推荐

  • GGally

    GGally包安装失败 这是直接在Rstudio里安装GGally时的情况 用rattle采用Pairs需要安装GGally包 但是自动安装也不行 会出现下图所示的现象 请问大神们怎么办
  • python pyinstaller封装成exe, 本地执行正常, 放入服务器执行报错

    执行报错信息如下 报错信息 Failed to extract MSUCP140 1 dll decompression resulted in return code 1 报错信息 Failed to extract PIL imagin
  • 漫话:如何给女朋友解释什么是撞库、脱库和洗库?

    最近 安全圈又有一个大新闻 微博名为 安全 云舒的微博用户在发文称 很多人的手机号码泄露了 根据微博账号就能查到手机号 已经有人通过微博泄露查到我的手机号码 来加我微信了 并且 据说微博CEO的手机号码也被泄露了 微博CEO 微博名 来去之
  • ctfshow信息收集Web18(玩游戏)

    不要着急 休息 休息一会儿 玩101分给你flag 点进去是一个游戏 查看游戏的js代码 查看js代码 查看通过游戏后会展示的内容是一个Unicode编码的 查看 110 php 得到Flag
  • Android启动模式

    其中MainActivity是所有操作的第一个Activity 1 A为standard B为singleInstance C为standard A B C 由下面的结果可知 B会单独创建一个任务站 且里面只能有他一个任务 即使是他启动的A
  • maven pom文件详解

  • 记一次sql优化经历(优化in语句)

    业务背景 根据客户群组查询标签 群组和标签的对应关系在tb biz type tags中 根据标签查询客户的手机号和机构标识 tb customer tags 根据手机号和机构标识 筛选出符合要求的客户信息 tb account 已知 客户
  • 加列法计算lower unit matrix inversion

    include
  • vscode配置文件在哪?

    在这里 看图 文件file 首选项 设置 点那个图标
  • 【C++】STL-函数对象 + 谓词

    1 函数对象使用 include
  • 在 window 上安装GPU版本的torch

    pip install https download pytorch org whl cu80 torch 1 0 0 cp37 cp37m win amd64 whl i https pypi tuna tsinghua edu cn s
  • fdisk 命令实现磁盘分区详细教程

    目录 分区步骤 1 添加新的磁盘 2 查看新的磁盘 3 使用fdisk命令分区 4 重新读取分区表信息 5 格式化分区 6 建立挂载点并挂载 总结 fdisk命令来自于英文词组 Partition table manipulator for
  • 华为OD机考20220622

    考试时间 2022 06 22 总分 136分 第一题 字符串分割 水仙花数 用例通过率 11 1 第二题 内存资源分配 用例通过率 95 8 第三题 模拟内存分配 用例通过率 15 之前在网上也看了很多分享 虽然机考没通过 不过也分享一下
  • CentOS 安装opencv3.4.12教程,一次编译通过,避免踩坑

    1 下载和安装 在官方网址 Home OpenCV 下载该3 x版本的opencv和opencv contrib的zip源码文件 本文以opencv3 4 12为例 然后解压该zip文件 即得到 unzip opencv 3 4 12 zi
  • 回调函数详解

    一 什么是回调函数 回调函数是指 使用者自己定义一个函数 实现这个函数的程序内容 然后把这个函数 入口地址 作为参数传入别人 或系统 的函数中 由别人 或系统 的函数在运行时来调用的函数 函数是你实现的 但由别人 或系统 的函数在运行时通过
  • 使用Glide对网络图片进行圆形和圆角的处理

    在开发中欧经常会遇见对图片的圆形和圆角的处理 头像一般圆形较多 之前使用的还是Volley ImageLoader来进行的加载网络图片 当时遇见这个需求找了许多资料 后来朋友一致推荐我将Volley ImageLoader换成Glide 不
  • 计算机毕设之基于SSM框架仓库管理系统

    1 简介 博主介绍 全网粉丝30W csdn特邀作者 博客专家 CSDN新星计划导师 编程领域优质创作者 博客之星 各平台优质作者 专注于Java python等技术领域和毕业项目实战 文末获取源码联系 计算机毕设之基于SSM框架仓库管理系
  • chatgpt赋能python:Python如何实现中文SEO的优化

    Python如何实现中文SEO的优化 伴随着互联网的发展 中文网站数量不断增多 而如何让中文网站在搜索引擎中更好的展现 就成为了一个很热门的问题 SEO 搜索引擎优化 是实现网站流量增长甚至盈利的关键 在这里 我们将介绍如何使用Python
  • VC++ 在任务栏图标上显示进度条效果

    该功能主要是通过COM接口ITaskbarList3 来实现进度效果显示功能 头文件定义 CSWTaskBarList h pragma once include
  • Android bundetool 详解

    android bundetool 详解 一 什么是 bundetool 为什么要使用 bundetool 在使用Android Studio 构建 Android App Bundle 后 需要测试 Android App Bundle