bundletool
是一种底层工具,可供 Android Studio、Android Gradle 插件和 Google Play 用于构建 Android App Bundle 文件并将 app bundle 转换为部署到设备的各种 APK。您也可以将bundletool
作为一种命令行工具,用于自行构建 app bundle 和重新创建应用 APK 的 Google Play 服务器端 build。
bundletool官网用户指南: https://developer.android.com/studio/command-line/bundletool?hl=zh-cn
bundletool Github 下载地址 :https://github.com/google/bundletool
因为下载的 bundletool
工具是一个 .jar
格式文件,因此运行需要先配置 Java 环境
。使用命令java -jar bundletool-xxx.jar
即可运行,
为了方便,可以编写一个脚本并配置环境变量,方便全局调用。
D:\Android\bundletool\
),将下载的 bundletool-xxx..jar
文件复制进去;bundletool.bat
),并在文件中添加内容 java -jar D:\Android\bundletool\bundletool-all-1.7.1.jar %*
,最后面的 %*
表示接收任意数量的参数;D:\Android\bundletool\
)添加到环境变量的 Path 变量
中,并保存bundletool
调用bundletool工具
了将aab转换为apks
默认Debug签名
:
bundletool build-apks --bundle=my_app.aab --output=my_app.apks
将aab转换为apks
并指定Release签名
:
bundletool build-apks --bundle=my_app.aab --output=my_app.apks --ks=签名名称.keystore --ks-pass=pass:签名密码 --ks-key-alias=签名别名 --key-pass=pass:别名密码
手机打开USB调试
连接电脑,使用命令自动分发
安装::
adb devices //找到连接电脑的设备。
bundletool install-apks --apks=my_app.apks //根据设备架构,自动分发安装。
将aab转换为通用apk
并指定Release签名
:
bundletool build-apks --bundle=my_app.aab --output=my_app.apks --ks=签名证书文件名称.keystore --ks-pass=pass:签名密码 --ks-key-alias=签名别名 --key-pass=pass:别名密码 --mode=universal
注: 以上命令可转换为apk格式
但输出的为apks格式
,只需要将apks改后缀为zip
并解压即可得到apk格式
的文件。
Google Play
上架应用需要上传AAB格式,当加固
过后需要对AAB格式
文件进行签名,过程如下:
1.jarsigner.exe
该工具为JDK自带,完整路径为:C:\Program Files\Java\jdk11.0.9\bin\jarsigner.exe
,没有配置环境的需要先配置。
2.自己的签名证书文件
。
jarsigner -verbose -keystore 签名文件 -digestalg SHA-256 -sigalg SHA256withRSA -storepass 签名密码 -keypass 别名密码 aab文件 证书别名 -tsa http://timestamp.digicert.com
例如:
jarsigner -verbose -keystore yirj.keystore -digestalg SHA-256 -sigalg SHA256withRSA -storepass 123456 -keypass 123456 my_app.aab yirj -tsa http://timestamp.digicert.com
提示: 加上参数 -digestalg SHA-256 -sigalg SHA256withRSA
,才能被Google Play
识别。
No -tsa or -tsacert is provided and this jar is not timestamped. Without a timestamp, users may not be able to validate this jar after the signer certificate’s expiration date (2048-11-01) or after any future revocation date.
翻译即:没有提供 -tsa 或 -tsacert 并且这个 jar 没有时间戳。 如果没有时间戳,用户可能无法在签名者证书的到期日期 (2048-11-01) 或任何未来的撤销日期之后验证此 jar。
解决方案: 在命令后添加 -tsa http://timestamp.digicert.com
jarsigner: 无法对 jar 进行签名: java.util.zip.ZipException: invalid entry compressed size (expected 311248 but got 300393 bytes)
解决方案: 说明待签的(aab)apk
是已经签名过的,如果想重新签名的话可以把要重签名的aab(apk)
后缀改成zip
,打开后删除里面的META-INF目录
,然后重新改成(aab)apk
后缀。
(aab可能需要解压后才能删除META-INF目录
,删除后将META-INF目录
同级目录添加为压缩包,重新压缩为zip,之后再改为aab格式即可!)
参考链接:
bundletool 工具使用
AndroidStudio工程打包aab文件
Google Play上架:上传应用强制要求Android App Bundle (AAB) 格式
Google Play 2021 年 8 月之后的 APK 与 App Bundle 上传格式问题
游戏 aab 包上传谷歌,提示超过 150 MB 的处理
AndroidStudio 导出AAB格式上传谷歌提示超过150M 解决方案1
AndroidStudio 导出AAB格式上传谷歌提示超过150M 解决方案2
关于Google Play app signing的坑 以及最终完美解决方式(替换自己的签名)
Google Play上架App之aab转apk和apk转aab的使用方法
android bundle指令打包