当前位置: 首页 > backend >正文

Google aab包转成apk,并安装到手机设备中

环境: Windows

软件: CocosCreator、AndroidStudio

引擎版本:3.8.1

您好,我是鹤九日!



简介


现阶段,使用Cocos Creator开发的我们,通常会使用Android Studio发布android版本。

如果做海外游戏项目,终究摆脱不了Google的使用。

很有意思的是: 2021年8月以后,对于新上架的App,GooglePlay仅支持AAB(Android App Bundle)格式,不再支持APK格式。

对于开发者而言,将审核包使用真实机型进行测试,是最接近真实环境的形式。

但是,AAB包在Google Play上发测试版本非常麻烦;还好,Google Play为我们提供了转换工具:Bundle Tool



BundleTool


BundleTool可用于将AndroidStudio、GooglePlay构建出来的AAB(Android App Bundle)包转换为可部署到设置的各种APK。

下载地址: bundleTool 1.18.1.jar

官方文档:bundletool

注:下载的文件为XXX.jar,我们需要通过它并借助终端命令进行转换。

请添加图片描述

下载以后,打开终端,输入命令即可。

简单的命令样式:

注: 下载的bundletool-all-1.18.1.jar, 可重命名为bundletool.jar,用于简化命令长度,以及方便查看。

// 假设aab包没有签名,只做单纯的aab到apk
// 假设aab包、生成的apks包和bundletool.jar都在同一目录下, 目的:简化命令,方便理解
java -jar bundletool.jar build-apks --bundle=XXX.aab --output=XXX.apks

这种方式,会通过bundletool.jar的执行,将aab包转换为apks。

注: apks是apk的集合,看似相似,但不能将其直接安装到设备中。



BundleTool常用命令


上面的命令,是简单的示例,主要目的是为了了解BundleTool.jar的基本使用。

上传到GooglePlay应用商店中的aab包,是一定有签名的。

下面是完整的命令示例:

注: 为了方便理解,假设aab包、生成的apks包以及bunleTool.jar 命令均在同一个目录。

java -jar bundletool.jar build-apks --bundle demo.aab --output demo.apks --ks==demo.keystore --ks-pass=pass:=demo --ks-key-alias=demo --key-pass=pass:demo

稍等片刻,指定目录下会生成 demo.apks

执行的命令,没有换行,很不容易理解,这里我们拆解下,方便理解:

// 执行jar包命令,运行bundletool.jar
java -jar bundletool.jar 
// 生成apks包的aab包路径和apks路径
build-apks --bundle demo.aab --output demo.apks
// 签名密钥库路径
--ks=demo.keystore 
// 签名密钥库密码
--ks-pass=pass:demo
// 签名密钥别名
--ks-key-alias=demo
// 签名密钥密码
--key-pass=pass:demo

注: 签名文件的格式可以为: XXX.keystore, 也可以为XXX.jks

记住相关密码即可,本示例使用的都是demo

相关命令如下所示:

选项说明
–bundle=pathAndroid Studio 构建的 app bundle 的路径
–output=path输出.apks文件名称,该文件中包含了应用所有的 APK 工件
–ks=path用于为 APK 签名的部署密钥库的路径。
如果您不添加此标志,bundletool 会尝试使用调试签名密钥为您的 APK 签名
–ks-pass=pass:密码密钥库密码,必须添加pass: 来限定
与–ks-pass=file:路径 二选一
–ks-pass=file:路径密钥库路径,必须添加file:来限定
与–ks-pass=pass:密码 二选一
–ks-key-alias=签名别名签名密钥的别名
–key-pass=pass:密码签名密钥密码,必须添加pass: 来限定
与–key-pass=file:路径 二选一
–key-pass=file:路径签名密钥路径,必须添加pass: 来限定
与–key-pass=pass:路径 二选一
–mode=universal将模式设置为 universal 如果希望 bundletool 构建一个包含应用的所有代码和资源的 APK
以使该 APK 与应用支持的所有设备配置兼容,请使用此选项
–local-testing启用 app bundle 进行本地测试
在本地测试时,由于无需上传到 Google Play 服务器,因此能够实现快速的迭代测试周期。

注:更多内容参考:官方文档



ADB


经过bundletool.jar生成的apks是无法直接安装到真实设备中的。

我们依然需要借助bundletool.jar的辅助和adb命令,将其部署到设备中。

注:网络分享中的大佬建议,测试安装时尽量只使用一台手机连接USB测试。

具体原因是跟google的严格审核机制是有关系的,小心无大错!

先检测下adb命令能否在终端命令中正常使用:

adb version

如果不能正常输出,提示类似如下错误:

请添加图片描述

可能原因:

一、AndroidStudio没有下载platform-tools, 可打开AndroidStudio -> Setting -> … Android SDK -> SDK Tools
请添加图片描述

注: Android Studio的版本很多,能够找到Android SDK的下载包配置即可。


二、配置环境变量

在Windows中,右击我的电脑 -> 属性 --> 系统 --> 高级系统设置 -> 环境变量。

选择系统变量下的Path,将SDK目录下的platform-tools添加进去。

请添加图片描述

关闭终端命令,再次验证下:

adb version

注: 设备主要开启开发者选项,并启用USB调试.



ADB常用命令


这里记录了一些ADB的常用命令:

注: 关于ADB的更多内容,可参考官方文档:android Google Adb

命令说明
adb devices确认主机已连接到设备
adb versionadb版本
adb devices -l已连接设备的列表
adb kill-server停止adb服务器
adb start-server启动adb服务器
adb install path_to_apk安装指定路径的apk到设备中


真机部署


adb相关准备完毕后,手机等真实设备也开启了USB调试。

我们继续通过bundletool.jar,输入对应的命令,进行部署安装。

命令很简单,如下所示:

// 借助bundletool.jar 使用install-apks的命令将XXX.apks安装到手机中
java -jar bundletool.jar install-apks XXX.apks


结语


使用bunldetool.jar将aab包转换为apks的命令很长,原因在于签名中的路径、别名、密码相关输入的信息较多。

按照上文中的这个格式进行输入即可。

// 执行jar包命令,运行bundletool.jar
java -jar bundletool.jar 
// 生成apks包的aab包路径和apks路径
build-apks --bundle demo.aab --output demo.apks
// 签名密钥库路径
--ks=demo.keystore 
// 签名密钥库密码
--ks-pass=pass:demo
// 签名密钥别名
--ks-key-alias=demo
// 签名密钥密码
--key-pass=pass:demo

这里参考了一些网络上大佬分享的博客内容,这里表示感谢,参考内容主要有:

aab转apk的方法(将Android App Bundle转换为APK)–bundletool

【Android】aab打包、安装测试以及注意事项

adb : 无法将“adb”项识别为 cmdlet、函数…

文章到这里结束了,内容较为浅显,但希望对您有用!

可能理解有误,欢迎您的指出;如果觉得文章不错,期待您的点赞和留言,感谢!

我是鹤九日,祝您生活愉快!

http://www.xdnf.cn/news/7101.html

相关文章:

  • 77.数据大小端赋值的差异与联系
  • 华为云Astro中各种变量与参数的区别与用法
  • C 语言字符串输入输出:scanf, gets, fgets 的选择与陷阱
  • Word文档图片和图表自动添加序号
  • 基于区块链技术的供应链溯源系统:重塑信任与透明度
  • 信奥赛-刷题笔记-栈篇-T2-P3056括号调整问题0518
  • Android日活(DAU)检测的四大实现方案详解
  • 代码随想录算法训练营 Day49 图论Ⅰ 深度优先与广度优先
  • mongodb管理工具的使用
  • 几种基于比较的排序
  • Linux搜索
  • 初始C++:类和对象(中)
  • 第10章 输入与输出流
  • Ansible模块——文件内容修改
  • IntelliJ IDEA设置编码集
  • ngx_http_referer_module 模块概述
  • Protect Your Digital Privacy: Obfuscate, Don’t Hide
  • GLPK(GNU线性规划工具包)中建模语言MathProg的使用
  • 【Linux网络】多路转接poll
  • ESP32C3在ESP-IDF中的nvs操作
  • Django 项目创建全攻略
  • R for Data Science(3)
  • oppo手机安装APK失败报错:安装包异常
  • 常见的数据库问题
  • Binary Prediction with a Rainfall Dataset-(回归+特征工程+xgb)
  • 【C++进阶篇】C++容器完全指南:掌握set和map的使用,提升编码效率
  • Popeye
  • UnLua源码分析(一)初始化流程
  • 13.Ext系列文件系统
  • 【2025版】SpringCloud Gateway网关快速入门