如何无需Android Studio将.apk文件转换为.aab格式
AAB(Android App Bundle)是Google推出的应用发行格式,本质是包含未编译资源、编译后代码的中间打包产物,和已经是最终分发形态的APK结构不同,不存在100%直接无损转换的方案,以下是可满足Google Play上传需求的实操方法:
方案1:直接使用AIDE导出AAB(最优选择,无转换损耗)
你是基于AIDE开发的项目,AIDE从v3.2.2版本开始已经原生支持导出AAB格式,无需对现有APK做转换,操作步骤:
- 打开目标项目工程,点击右上角三点菜单
- 选择「Build」选项,展开后找到「Generate Signed App Bundle」
- 按照提示填写签名密钥信息(和你之前生成APK用的签名保持一致即可)
- 等待编译完成后,即可在项目的
build/outputs/bundle/release/目录下拿到签名后的.aab文件
该方案不需要额外工具,也不会出现兼容性问题,优先选择。
方案2:仅有APK文件时的转换方案
如果已经丢失项目源码,只剩最终APK安装包,可以通过Apktool + bundletool组合实现转换,操作前需要提前准备Java 11及以上运行环境:
步骤1:反编译APK提取资源和代码
执行Apktool反编译命令:apktool d 你的应用.apk -o apk_decompile_dir
反编译完成后进入输出目录,确认AndroidManifest.xml、资源文件、smali代码都完整提取。
步骤2:整理AAB所需的目录结构
新建AAB工作目录,按照以下结构整理反编译得到的文件:
aab_workspace/ ├── base/ │ ├── manifest/ (存放AndroidManifest.xml) │ ├── dex/ (存放所有.dex文件) │ ├── res/ (存放所有资源文件) │ ├── assets/ (存放assets资源,无相关资源可删除该目录) │ ├── lib/ (存放so库,无相关资源可删除该目录) │ └── resources.pb (资源映射表,后续步骤生成) └── BundleConfig.pb (AAB配置文件,后续步骤生成)
步骤3:编译生成资源映射表
执行aapt2命令编译资源,生成resources.pb文件:aapt2 link --proto-format -o base_resources.apk -I android.jar --manifest apk_decompile_dir/AndroidManifest.xml -R apk_decompile_dir/res/values/*
把生成的resources.pb放到base目录下。
步骤4:用bundletool打包生成AAB
执行打包命令前,先把整个base目录压缩为base.zip,注意压缩包根目录就是base文件夹内的内容,不要多嵌套一层目录,之后执行命令:java -jar bundletool-all.jar build-bundle --modules base.zip --output 你的应用.aab
步骤5:对AAB签名
使用jarsigner对生成的AAB签名,签名信息和原APK保持一致即可:jarsigner -keystore 你的密钥文件.keystore 你的应用.aab 密钥别名
注意:方案2转换得到的AAB可能存在资源适配、动态功能兼容问题,上传Google Play前建议先通过bundletool导出测试APK验证运行正常。
内容的提问来源于stack exchange,提问作者Amos Ayomide

