bundletool工具使用

bundletool工具使用

2023年7月7日发(作者:)

bundletool⼯具使⽤⼀、bundletoo 介绍bundletool是⼀种底层⼯具,可供 Android Studio、Android Gradle 插件和 Google Play ⽤于构建 Android App Bundle ⽂件并将 appbundle 转换为部署到设备的各种 APK。您也可以将

bundletool作为⼀种命令⾏⼯具,⽤于⾃⾏构建 app bundle 和重新创建应⽤ APK 的Google Play 服务器端 build。⼆、下载与配置bundletool Github 下载地址 :/google/bundletool命令别名配置因为下载的

bundletool ⼯具是⼀个

.jar 格式⽂件,因此运⾏需要先配置

Java 环境。使⽤命令java -jar 即可运⾏,为了⽅便,可以编写⼀个脚本并配置环境变量,⽅便全局调⽤Windows 系统1. 新建⼀个⽬录(⽰例:D:Androidbundletool),将下载的

bundletool-xxx..jar ⽂件复制进去;2. 在⽬录下新建⼀个⽂件(⽰例:),并在⽂件中添加内容

java -jar D: %*,最后⾯的

%*表⽰接收任意数量的参数;3. 将⽬录(⽰例:D:Androidbundletool)添加到环境变量的

Path 变量中,并保存4. 打开命令⾏窗⼝(如果已经打开,需要关闭后重新打开新的窗⼝),就可以使⽤命令

bundletool调⽤bundletool⼯具了Mac设置 alias 别名alias bundleTool="java -jar /Users/**/Android/Tools/"三、bundletool 使⽤详解3.1 bundletool 命令详解使⽤命令官⽹详解 :/studio/command-line/bundletoolbundletool 包含了常⽤的命令,每个命令有⾃⼰的参数和标记,下⾯列出

bundletool可⽤的命令:命令名称build-bundle说明将

zip格式的 Bundle 模块⽂件集合,构建成 Android App Bundle(.aab)⽂件⽣成⼀个 APK 集合压缩包。压缩包内包含所有可能的分解 APK 和单独APK, 或者针对已连接设备优化的 APK从 APK 集合中根据给定设备配置提取安装到该配置设备的 APK获取已连接设备的配置,并将其输出到⼀个⽣成设备规范的 JSON ⽂件中备注参考:构建Android AppBundle参考: ⽣成⼀组 APK)参考:从现有的 APK 集中提取设备专⽤ APK参考:⽣成并使⽤设备规范build-apksextract-apksget-device-命令名称install-apksinstall-multi-apksvalidatedumpget-size

totalversionspec说明从 APK 集合中提取 APK 并安装到连接的设备上,安装会替换已存在的包JSON ⽂件备注参考:将 APK 部署到连接的设备-输出详细的⽂件信息-参考:估算 APK 集中的 APK的下载⼤⼩-以原⼦⽅式将多个 APK 集中的 APK 和 APEX 安装到连接的设备校验给定的 Android App Bundle ⽂件是否有效,并且输出相关信息从 App Bundle 中打印⽂件或者提取值计算 APK 集合针对不同设备配置⽣成的 APK 的最⼩和最⼤的下载⼤⼩查看当前 bundletool 版本号说明:可以使⽤

bundletool help 查看命令帮助,使⽤

bundletool hlep command 查看对应命令的帮助。3.2 构建Andr构建Androoid App Bundle可参考官⽹:使⽤ bundletool 构建 app bundle使⽤

bundletool 在命令⾏⽣成 App Bundle 是极其复杂的步骤(⾸先要⽣成

proto格式的清单和资源(使⽤

aapt2 编译并链接应⽤的资源),然后将这些清单和资源打包成

ZIP ⽂件(⽂件⽬录结构与 Android App Bundle 类似),最后使⽤

bundletool build-bundle --modules= --output= 命令⽣成最终的 Android App Bundle⽂件(.aab))使⽤Android Studio开发,可以使⽤Android Studio IDE 和 Android Gradle 插件⽣成 App Bundle3.3 ⽣成 APK 集合可参考官⽹:从 app bundle ⽣成⼀组 APK在

bundletool 从 App Bundle 中⽣成 APK 时,会将这些 APK 放在⼀个称之为 APK 集合的压缩包容器内,这个压缩包容器⽂件以

.apks为后缀。从 App Bundle 中为应⽤⽀持的所有设备配置⽣成 APK 集合,使⽤

bundletool的

build-apk命令bundletool build-apks --bundle=/MyApp/my_ --output=/MyApp/my_默认bundletool ⼯具在⽣成

apks 时,使⽤ Android 默认的调试签名⽂件(即

.android/re)对⽣成的 APK 进⾏签名。当然,你可以指定⾃⼰的签名⽂件为⽣成的 APK 进⾏签名,执⾏如下格式命令(执⾏时确保命令及参数是单⾏): bundletool build-apks --bundle=/MyApp/my_ --output=/MyApp/my_--ks=/MyApp/--ks-pass= 或者--ks-key-alias=MyKeyAlias--key-pass=file:/MyApp/ 或者注意: 输⼊密码时要以pass:开头build-apks 命令参考 bundletool build-apks --bundle=<> --output=<> [--aapt2=] [--adb=] [--connected-device] [--create-stamp] [--device-id=] [--device-spec=<>] [--device-tier=] [--key-pass=] [--ks=] [--ks-key-alias=] [--ks-pass=<[pass|file]:value>] [--local-testing] [--max-threads=] [--min-v3-signing-api-version=<30>] [--mode=] [--modules=] [--optimize-for=] [--output-format=] [--overwrite] [--stamp-key-alias=] [--stamp-key-pass=] [--stamp-ks=] [--stamp-ks-pass=<[pass|file]:value>] [--stamp-source=] [--verbose]命令参数标记详解必须参数是是否否否参数标志说明--bundle=path--output=pathApp Bundle ⽂件的路径输出

.apks ⽂件路径如果输出⽂件已经存在,覆盖旧⽂件

如果存在同名旧⽂件,没有此标记命令会执⾏失败指定⾃定义的

aapt2 ⼯具路径,不指定使⽤默认的

aapt2 版本指定签名⽂件路径,⽤于配置输出 APK ⽂件的签名⽂件,不指定使⽤ Android 默认调试签名,即

.android/re--overwrite--aapt2=path--ks=path--ks-pass=pass:password或者--ks-pass=file:path_to_pwssword_file--ks-key-alias=alias--key-pass=pass:password否指定签名⽂件的存储秘钥,指定了

--ks=path 时此项必须。如果使⽤字符串秘钥,使⽤

pass:password,如果秘钥存储在⽂件中,使⽤

file:path_to_pwssword_file否秘钥别名,指定了

--ks=path 时此项必须或者--key-pass=file:path_to_pwssword_file否指定签名别名秘钥,指定了

--ks=path 时此项必须。如果使⽤字符串秘钥,使⽤

pass:password,如果秘钥存储在⽂件中,使⽤

file:path_to_pwssword_file--connected-参数标志--device-id=device_iddevice必否须参数否指定

bundletool ⼯具根据已连接的设备的配置⽣成 APK 集合。如果不指定,bundletool ⼯具会根据应⽤⽀持的所有配置⽣成 APK 集合说明指定已连接的设备。指定了

--connected-device 且有多个连接的设备时此项必须,可以使⽤ Androidadb ⼯具adb devices 查看已连接的设备的 ID此参数⽤于指定⽬标设备的配置⽂件路径,配置⽂件是 JSON 格式⽂件,以

.json 为后缀。指定后只会⽣成配置⽂件对应的 APK 集合,关于设备配置⽂件的详细介绍参考:⽣成并使⽤设备规范 JSON⽂件设置⽣成模式,如果您想要 bundletool 为 App Bundle ⽣成⼀个包含了所有应⽤代码和资源的单个APK,请设置成

universal,⽣成的单个 APK 兼容应⽤⽀持的所有设备配置。⽣成模式默认值为

default。注意事项:1. 如果指定了--connected-device 或者

--device-spec=spec_json,只能使⽤默认值default;2. bundletool 在

universal模式下⽣成的单个 APK,只会包含在清单⽂件中使⽤

dist:include="true"/>指定的功能模块。⽣成的单个 APK 包体会⽐针对指定设备配置⽣成的 APK 要⼤,但是单个 APK 更易于在测试者之间共享,因为他可以兼容多个设备,⽅便在不同的设备上安装测试。使⽤这个标志启⽤ App Bundle ⽤户本地测试, 本地测试⽀持在⽆需上传 Google Play 服务端的情况下实现快速、迭代的测试周期。--device-spec=spec_json否--mode=universal否--local-testing否在命令⾏中使⽤

bundletool help build-apks 可以查看相关的帮助信息。3.4 将 APK 集合部署到连接的设备参考官⽹链接:将 APK 部署到连接的设备⽣成 APK 集合(.apks ⽂件)之后,可以使⽤ bundletool 将 APK 集合部署到链接的设备上,bundletool 会根据连接设备对应配置选择需要安装 APK ⽂件并安装到设备上(使⽤

--mode=universal ⽣成的单个 APK 会将所有代码和资源安装到设备)。使⽤install-apks命令将 APK 集合部署到链接的设备上:bundletool install-apks --apks=/MyApp/my_如果在使⽤build-apks命令⽣成 APK 集合时使⽤了

--local-testing标志,为了确保本地测试能够正确进⾏,请使⽤

install-apks安装的 APKinstall-apks 命令使⽤详解bundletool install-apks --apks=<> [--adb=] [--additional-local-testing-files] [--allow-downgrade] [--allow-test-only] [--device-groups=] [--device-id=] [--device-tier=] [--modules=] [--timeout-millis=<60000>]install-apks 命令参数详解参数标志必须参数是说明--apks=path--adb=path_to_adb--additional-local-testing-files--allow-downgrade--allow-test-only--device-groups=device_groups--device-id=device_id--device-tier=--modules=modules_names--timeout-millis=time-milli-seconds指定 APK 集合(.apks)⽂件路径,该⽂件使⽤

build-apks 命令⽣成 ⼯具的路径,不指定时使⽤

ANDROID_HOME 或者

PATH 环境变量配置的,如果未在环境变量配置,必须在此标记指定

adb⼯具路径adb否否需额外放到本地测试⽬录的⽂件列表,这个标记仅在使⽤了

--local-testing 标记⽣成的 APK 集合有效否允许降级安装。 即使将要安装的 APK 集合版本号⽐已安装的版本号低,也能进⾏安装许安装在清单⽂件中制定了

android:testOnly=true 的 APK 集合否否指定设备所属的设备组。 该值⽤于将设备与正确的设备组模块相匹配,这个标记仅⽤于 App Bundle 按设备组条件分发功能模块的情况。多个设备组使⽤半⾓逗号隔开指定已连接的设备。指定了--connected-device 且有多个连接的设备时此项必须,可以使⽤ Android adb⼯具

adb devices 查看已连接的设备的 ID指定设备的层次,该值⽤于将设备与正确的设备层次模块相匹配,这个标记仅⽤于 App Bundle 按设备层次条件分发功能模的情况指定需要安装的模块列表,使⽤_ALL_ 指定安装所有模块。默认安装第⼀次安装是需要的模块(即⾮按需安装),需要注意的是依赖模块也会被提取,如果安装使⽤--mode=universal 指定⽣成的 APK 集合,此标志⽆效否否否否传⼊到 adb ⼯具的超时时长,单位:毫秒,默认值为 10 分钟(60000毫秒)说明:在命令⾏中使⽤

bundletool help install-apks 可以查看相关的帮助信息3.5 为指定设备⽣成 APK 集合参考官⽹链接:⽣成设备专⽤ APK 集使⽤ bundletool ⼯具的

build-apks ⽣成 APK 集合,默认地是根据应⽤所⽀持的所有设备的配置⽣成 APK 集合。如果您不想针对应⽤⽀持的所有设备配置⽣成⼀组 APK,则可以使⽤

--connected-device选项,仅针对已连接设备的配置⽣成 APK,如下所⽰。(如果连接了多个设备,请添加

--device-id=serial-id 标记来指定⽬标设备。)bundletool build-apks --connected-device --bundle=/MyApp/my_ --output=/MyApp/my_⽣成并使⽤设备规范 JSON ⽂件参考官⽹链接:⽣成并使⽤设备规范 JSON ⽂件bundletool 可以为使⽤ JSON ⽂件声明的设备配置⽣成 APK 集合, 使⽤

get-device-spec 命令可获取已连接的设备的配置 JSON ⽂件bundletool get-device-spec --output=/tmp/获取到的配置⽂件内容如下所⽰:{ "supportedAbis": [ "arm64-v8a", "armeabi-v7a", "armeabi" ], "supportedLocales": [ "zh-TW", "zh-CN", "zh-HK", "en-US", "ja-JP", "ko-KR" ], "deviceFeatures": [ "reqGlEsVersion=0x30002", "_latency" ], "screenDensity": 480, "sdkVersion": 29}get-device-spec 命令使⽤详解bundletool get-device-spec --output=<> [--adb=] [--device-groups=] [--device-id=] [--device-tier=] [--overwrite]get-device-spec 命令参数详解必须参数参数标志--output=output_device_--adb=path_to_adb--device-groups=device_groups--device-id=device_id说明是配置输出⽂件,JSON 格式⽂件 ⼯具的路径,不指定是使⽤

ANDROID_HOME 或者

PATH 环境变量配置的,如果未在环境变量配置,必须在此标记指定

adb ⼯具路径adb否否指定设备所属的设备组。 该值⽤于将设备与正确的设备组模块相匹配,这个标记仅⽤于 AppBundle 按设备组条件分发功能模块的情况。多个设备组使⽤半⾓逗号隔开指定已连接的设备。有多个连接的设备时此项必须,可以使⽤ Android adb ⼯具

adb devices 查看已连接的设备的 ID指定设备的层次,该值⽤于将设备与正确的设备层次模块相匹配,这个标记仅⽤于 App Bundle 按设备层次条件分发功能模的情况如果输出⽂件已经存在,覆盖旧⽂件。如果存在同名旧⽂件,没有此标记命令会执⾏失败否--device-tier否否--overwrite⼿动创建设备规范 JSON参考官⽹链接:⼿动创建设备规范 JSON如果⽆法访问要针对其构建⽬标 APK 集的设备(例如,朋友想通过您⼿头没有的设备试⽤您的应⽤),则可以使⽤以下格式⼿动创建 JSON ⽂件:{ "supportedAbis": ["arm64-v8a", "armeabi-v7a"], "supportedLocales": ["en", "fr"], "screenDensity": 640, "sdkVersion": 27}设备配置⽂件包含的信息主要包含了以下⼏点:supportedAbis:设备⽀持的 Abi(so 库)架构,字符串数组。supportedLocales:设备当前添加⽀持的地区语⾔(设备中有可能继续添加⽀持的地区语⾔,也就是说此字段并不代表设备⽀持的所有地区语⾔),字符串数组。deviceFeatures:设备⽀持的特性,字符串数组。glExtensions:设备⽀持的OpenGL扩展,字符串数组。screenDensity:屏幕密度,int类型。sdkVersion:设备系统版本(versionCode),

int类型。注意事项: ⼿动创建设备配置 JSON ⽂件的时候,只需要针对需要的信息进⾏配置即可,并不要求每⼀项都必须有,没有配置的项⽬会进⾏兼容处理 .然后,您可以将此 JSON 传递给

bundle extract-apks 命令从现有的 APK 集中提取设备专⽤ APK参考官⽹链接:从现有的 APK 集中提取设备专⽤ APKbundletool 可以使⽤

extract-apks 命令从现有的 APK 集合中提取指定设备配置的 APK ⼦集bundletool extract-apks--apks=/MyApp/my_existing_APK_--output-dir=/MyApp/my_pixel2_APK_--device-spec=/MyApp/bundletool/tract-apks 命令输出的是 APK ⽂件(多个

.apk ⽂件),⽽不是 APK 集合⽂件(.apks 压缩⽂件),所以

--output-dir 是⼀个⽬录extract-apks 命令使⽤详解bundletool extract-apks --apks=<> --device-spec=<> [--include-metadata] [--instant] [--modules=] [--output-dir=]extract-apks 命令参数详解必须参数是是参数标志--apks=<>--device-spec=<>说明由

build-apks 命令⽣成的 APK 集合压缩包路径设备配置 JSON ⽂件路径如果添加此标记,将会在输出⽬录中多了⼀个

⽂件,这个⽂件包含抽取的APK 相关信息如果添加此标记,只提取免安装模块的 APK,⽽不会提取可安装模块的 APK。注意事项:如果不包含兼容 APK,⽆法提取免安装的 APK,命令执⾏失败需要提取的模块列表,或者使⽤

_ALL_ 提取所有模块。默认情况下只会提取⾸次安装需要的模块输出⽂件存放⽬录。注意事项:extract-apks 命令输出的是 APK ⽂件(多个

.apk⽂件),⽽不是 APK 集合⽂件(.apks 压缩⽂件)--include-metadata否--instant否--modules=否--output-dir=否3.6 估算 APK 集合中 APK 的下载⼤⼩参考官⽹链接:估算 APK 集中的 APK 的下载⼤⼩APK 集内的 APK 将在压缩后通过⽹络传送。如需估算这些 APK 的下载⼤⼩,可使⽤

get-size total 命令bundletool get-size total --apks=/MyApp/my_t-size total 命令使⽤详解bundletool get-size total --apks=<> --human-readable-sizes [--device-spec=<>] [--dimensions=] [--instant] [--modules=]get-size total参数标记详解参数标志必须参数说明--apks=参数标志ks>--human-readable-sizes--device-spec

build-apks 命令⽣成的 APK 集合压缩包路径说明否添加此标记,输出可读性的⼤⼩(没有添加时单位为

Bit),⽐如:10MB否指定设备配置,如果制定了此项,将获取针对该设备配置⽣成的 APK 下载⼤⼩,可通过

get-device-spec 命令获取设备信息--dimensions否定要扩展输出 APK ⼤⼩的维度,指定输出维度之后,将会以维度(或者维度组合)扩展输出 APK ⼤⼩信息,可使⽤的维度有:SDK(⽬标SDK版本)、ABI(ABI架构)、SCREEN_DENSITY(屏幕密度)、LANGUAGE(语种)、TEXTURE_COMPRESSION_FORMAT(纹理压缩格式)、DEVICE_TIER(设备层)、ALL(全部维度),可同时指定多个维度--instant--modules否指定该标记,将会输出免安装模块的⼤⼩(⽽不是可安装 APK 的⼤⼩),默认不指定否指定运⾏此命令获取的报告包含的模块列表(默认是⾸次安装需要下载的所有模块),需要注意的是,依赖模块也将会被计算在内。设置此标志时,我们会忽略独⽴ APK 进⾏⼤⼩计算在命令⾏中使⽤

bundletool help get-size 可以查看相关的帮助信息

发布者:admin,转转请注明出处:http://www.yc00.com/news/1688665609a160915.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信