当疑问,为什么要用Bundletool时,请先参读另一篇:
http://renew7.fun:8090/archives/androidzhong-aar-apk-apksdeng-wen-jian-ge-shi-du-shi-shi-me
简介
Bundletool是Google官方提供的命令行工具,用于操作Android App Bundle(AAB)格式的应用包,主要功能包括构建APK、验证AAB、安装APK及提取设备特定APK等。
核心功能与用途
bundletool作为Android生态中的底层工具,主要服务于以下场景:
构建APK:将AAB文件转换为设备可部署的APK集合(APKs),支持签名和通用模式(生成单个APK)。
安装测试:直接通过命令行将APKs安装到连接的设备,简化测试流程。
动态分发优化:支持按设备配置(如屏幕分辨率、CPU架构)生成定制化APK,减少用户下载体积。
代码透明性:验证AAB或APK的代码签名完整性,增强安全性。
技术特点
与AAB深度集成:AAB作为Google Play推荐的发布格式,bundletool是其官方配套工具,确保生成APK的兼容性。
跨平台支持:可通过Homebrew(macOS/Linux)或直接下载JAR文件运行,依赖Java环境。
开源与扩展性:代码托管于GitHub,开发者可自定义功能或参与贡献。
https://developer.android.google.cn/tools/bundletool?hl=svhttps://github.com/google/bundletool?tab=readme-ov-filehttps://gitee.com/mirrors/bundletool
安装
在那之前!
————先安装adb
ADB安装方法
ADB下载地址(Google):
https://dl.google.com/android/repository/platform-tools-latest-windows.zip

下载后解压至任意文件夹

配置环境变量

在CMD命令指示符中、输入
adb version
若出现对应版本信息、则表示ADB安装成功。

JAVA安装
JAVA下载地址(官网):
http://www.oracle.com/technetwork/java/javase/downloads/index.html
安装路径可一定要记住啊!不行就截个图先!


在系统变量中添加以下三个变量
变量名: JAVA_HOME
变量值: C:\Program Files\Java\jdk-20
【JAVA安装的路径】
变量名: Path
变量值: %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
变量名: CLASSPATH
变量值: .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

在CMD命令指示符中输入
java
或
javac
若出现指令Guide、则表示JAVA安装完成


Bundletool下载地址
①Google(需要代理)
https://github.com/google/bundletool/releases②Gitee(国内代理加速下载、需要登录账号)
https://gitee.com/mirrors/bundletool这里放一份v 1.15.1
bundletool-all-1.15.1-tryx.jar
将bundletool文件放置于adb的根目录中

环境完成
APP开发→打包典型工作流程
打包APK是将Android应用程序打包成可安装的APK文件的过程。
在打包之前,开发人员需要编写应用程序的代码,并将其编译为可执行文件。
打包APK的主要目的是将应用程序发布到Google Play商店,或者在设备上进行测试和部署。
打包APK的过程可以分为以下几个步骤:
1. 编写应用程序代码:开发人员使用Java、Kotlin等编程语言编写应用程序代码。可以使用Android Studio等集成开发环境来编写代码,并进行代码的调试和测试。
2. 编译代码:一旦开发人员完成了应用程序的代码编写工作,他们需要将代码编译为可执行文件。编译过程将Java或Kotlin代码转换为Dalvik字节码,供Android系统执行。
3. 打包资源文件:除了代码文件,应用程序还包含许多资源文件,如图像、布局文件、字符串等。这些资源文件需要被打包到APK中供应用程序使用。开发人员需要将这些资源文件放在正确的目录下,并配置好相关的XML文件。
4. 生成ABB文件:一旦代码和资源文件准备就绪,开发人员可以使用Android Studio等工具将应用程序打包为aab文件。
5. 签名APK文件:为了保证APK文件的安全性和完整性,开发人员需要对APK文件进行签名。签名过程使用开发人员的私钥对文件进行加密,并附加一个证书。这个证书用来证明APK文件是由开发人员签名的。签名后的APK文件将被视为可信任的,可以在Android设备上安装和运行。

由于现在上传Google play只需要上传.aab文件,不需要再上传apk的安装包,所以开发阶段到这里就结束了,如果软件正常通过,即可让用户在Google Play上下载测试版本
但对于测试人员,aab或是apks无法直接安装,需要进行转换格式:
abb转换apks
java -jar bundletool-all-1.15.1.jar build-apks --mode=universal --bundle=base.aab --output=base.apks
安装apks
C:\adb
java -jar bundletool-all-1.15.1.jar install-apks --apks=app.apks
通过应用包生成apk集
1 2 | java -jar bundletool-all-1.8.2.jar build-apks --bundle=dlhroditerd-release-29.2.aab --output=dlhroditerd-release-29.2.apks
java -jar bundletool-all-1.8.2.jar build-apks --bundle=dlhroditerd-release-29.2.aab --output=dlhroditerd-release-29.2.apks
|
通过应用包生成一组带签名的apk集
1 | java -jar bundletool-all-1.8.2.jar build-apks --bundle=dlhroditerd-release-29.2.aab --output=dlhroditerd-release-29.2.apks --ks=adamrocker.keystore --ks-pass=pass:android --ks-key-alias=androiddebugkey --key-pass=pass:android
|
将apk部署到设备上(需要连接设备,根据设备信息自动提取对应资源并安装)
1 | java -jar bundletool-all-1.8.2.jar install-apks --apks=dlhroditerd-release-29.2.apks
|
为已连接的设备生成apk
1 | java -jar bundletool-all-1.8.2.jar build-apks --connected-device --bundle=dlhroditerd-release-29.2.aab --output=dlhroditerd-release-29.2.apks
|
通过json文件生成对应的apk
1 | java -jar bundletool-all-1.8.2.jar build-apks --device-spec=config.json --bundle=dlhroditerd-release-29.2.aab --output=dlhroditerd-release-29.2.apks
|
获取已连接设备的json配置文件
1 | java -jar bundletool-all-1.8.2.jar get-device-spec --output=config.json
|
从apk集中提取对应设备apk到app文件夹
1 | java -jar bundletool-all-1.8.2.jar extract-apks --apks=keyhelp.apks --output-dir=app --device-spec=temp.json
|
json文件格式:
1 2 3 4 5 6 | {
"supportedAbis": ["arm64-v8a", "armeabi-v7a"],
"supportedLocales": ["en", "fr"],
"screenDensity": 640,
"sdkVersion": 27
}
|
1 2 3 4 | java -jar bundletool-all-1.8.2.jar build-apks --bundle=dlhroditerd-release-29.2.aab --output=simeji.apks
java -jar bundletool-all-1.8.2.jar build-apks --bundle=dlhroditerd-release-29.2.aab --output=dlhroditerd-release-29.2.apks --ks=adamrocker.keystore --ks-pass=pass:android --ks-key-alias=androiddebugkey --key-pass=pass:android
java -jar bundletool-all-1.8.2.jar install-apks --apks=dlhroditerd-release-29.2.apks
java -jar bundletool-all-1.8.2.jar build-apks --connected-device --bundle=dlhroditerd-release-29.2.aab --output=dlhroditerd-release-29.2.ap
|