Google Play上架应用需要AAB格式的对策

Google Play上架应用需要AAB格式的对策

一、bundletoo 介绍

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 即可运行,

为了方便,可以编写一个脚本并配置环境变量,方便全局调用。

  • Windows 系统
  1. 新建一个目录(示例:D:\Android\bundletool\),将下载的 bundletool-xxx..jar 文件复制进去;
  2. 在目录下新建一个文件(示例:bundletool.bat),并在文件中添加内容 java -jar D:\Android\bundletool\bundletool-all-1.7.1.jar %*,最后面的 %*表示接收任意数量的参数;
  3. 将目录(示例:D:\Android\bundletool\)添加到环境变量的 Path 变量中,并保存
  4. 打开命令行窗口(如果已经打开,需要关闭后重新打开新的窗口),就可以使用命令 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格式的文件。

四、Jarsigner对AAB签名

Google Play上架应用需要上传AAB格式,当加固过后需要对AAB格式文件进行签名,过程如下:

1、准备工具

1.jarsigner.exe 该工具为JDK自带,完整路径为:C:\Program Files\Java\jdk11.0.9\bin\jarsigner.exe,没有配置环境的需要先配置。
2.自己的签名证书文件

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识别。

遇到问题总结:

问题1:

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

问题2:

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指令打包

你可能感兴趣的:(Android,android,java,android,studio)