根据Google Play的政策要求,自 2021 年 8 月起,Google Play 将开始要求新应用使用 Android App Bundle(以下简称aab) 进行发布。该格式将取代 APK 作为标准发布格式
通常情况下,只需使用AS的打包功能生成aab文件即可满足要求,并将其上传至Google Play。
然而,存在一个问题,不是每次都能获得游戏工程或源码。如果你收到的是一个apk包,那么你将如何处理呢?
现在,我将向大家详细介绍如何逐步将APK转换为AAB。
需要工具
-
bundletool-all-1.6.1.jar是一个由Google提供的用于生成和测试aab文件的工具。在gradle打包过程中,也使用了这个工具。你可以通过访问github.com/google/bundletool/releases来获取它。关于详细文档和使用方法,请参考developer.android.com/studio/command-line/bundletool。
-
请下载最新版本的apktool工具,该工具是一款用于反编译安卓apk文件的实用程序。你可以在GitHub上找到获取方式:github.com/iBotPeaches。
-
aapt2是Android资源打包工具的全称,它是Android SDK中的一部分。您可以通过以下方式获取:在ANDROID SDK中找到路径$ANDROID_SDK/build-tools/30.0.3/aapt2。有关详细文档和使用方法,请访问developer.android.com/studio/command-line/aapt2。
-
Android框架提供了系统资源和API,其中包括android.jar。您可以通过以下方式获取:使用ANDROID SDK,路径为$ANDROID_SDK/platforms/android-30/android.jar。
apk生成aab
APK解压操作
使用apktool解压APK包
java -jar apktool_2.5.0.jar d test.apk -s -o decode_apk_dir
解压apk后 decode_apk_dir 目录结构:
编译资源
使用aapt2编译资源,生成一个包含*.flat文件的集合。
使用aapt2编译命令,将decode_apk_dir\res目录中的资源编译为compiled_resources.zip文件。相关资源
生成base.apk
请执行以下命令解压base.apk文件:aapt2 link --proto-format -o base.apk -I android_30.jar --min-sdk-version 19 --target-sdk-version 29 --version-code 1 --version-name 1.0 --manifest decode_apk_dir\AndroidManifest.xml -R compiled_resources.zip --auto-add-overlay
解压到base文件夹,目录结构:
复制资源
建立一个名为base的文件夹,并将其设为根目录。
请将解压后的resources.pb文件复制到./temp/base/resources.pb目录下。
请将解压后的res文件夹复制到./temp/base/res目录下。
请将解压后的AndroidManifest.xml文件复制到./temp/base/manifest目录下,然后创建一个名为manifest的文件夹。
拷贝assets , 将 ./temp/decode_apk_dir/assets 拷贝到 ./temp/base/assets
将lib文件夹复制,将./temp/decode_apk_dir/lib复制到./temp/base/lib。
请将 ./temp/decode_apk_dir/unknown 拷贝到 ./temp/base/root/unknown,以创建root文件夹并复制unknown文件。
拷贝kotlin, 将 ./temp/decode_apk_dir/kotlin拷贝到 ./temp/base/root/kotlin
在根目录下创建一个名为META-INF的文件夹,路径为./temp/base/root/META-INF。
请将 ./temp/decode_apk_dir/ 文件夹中的所有.dex文件复制到 ./temp/base/dex/ 文件夹下,确保多个.dex文件一并复制过来。
base/resources.pb => base/resources.pbbase/res base/AndroidManifest.xml => base/manifest/AndroidManifest.xml decode_apk_dir/assets => base/assets decode_apk_dir/lib => N/Abase/├── assets├── dex├── lib├── manifest├── res├── resources.pb└── root 经过压缩处理后,资源结构如下:请务必将名为base的文件夹压缩成zip格式,并命名为base.zip。
请注意:在压缩后双击打开应用时,将显示所有资源而不是仅显示基本资源。如果需要查看基本资源,请点击“base”。否则,可能会出现找不到AndroidManifest.xml文件的错误提示。
将aab编译
使用bundletool是必要的,以便打包app bundle。
请使用以下命令生成aab签名文件:java -jar bundletool-all-1.6.1.jar build-bundle --modules=base.zip --output=base.aab --ks mykeystore.jks --ks-pass pass:mypassword
请使用以下命令为 base.aab 文件进行签名,不需要使用 apksigner 进行 v2 签名。注意替换 、 和 为实际的值: ``` jarsigner -digestalg SHA1 -sigalg SHA1withRSA -keystore -storepass -keypass base.aab ``` 在对 aab 文件进行签名时,只需使用 JDK 的普通方式即可。测试与安装
由于篇幅有限,Aab的测试与安装将在下一篇文章中介绍。请参阅有关Aab(Android App Bundle)测试与安装的详细信息。
结束语
如果在过程中遇到问题或需要交流的同学和独立开发者,都可以私信我,我会拉你进入群聊。请在添加好友时备注“Apk转Aab”或“独立开发俱乐部”,因为这是两个不同的群。
还木有评论哦,快来抢沙发吧~