当疑问,为什么要用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安装

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的根目录中

环境完成


Bundletool的基本命令使用

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