Apk转Aab(Android App Bundle)

简介: Apk转Aab(Android App Bundle)

根据Google Play的政策要求,自 2021 年 8 月起,Google Play 将开始要求新应用使用 Android App Bundle(以下简称aab) 进行发布。该格式将取代 APK 作为标准发布格式

正常情况下直接用AS的打包生成aab就可以满足需求,上传到Google play了。

但是会有这么一个问题,并不是所有时候你都可以拿到一个游戏工程或者源码的,如果给你的是一个apk包,那你怎么办呢?

接下来,就向大家介绍如何从apk一步步转化成aab。

需要工具

apk生成aab

解压apk

通过apktool去解压apk包

java -jar apktool_2.5.0.jar d test.apk -s -o decode_apk_dir

解压apk后 decode_apk_dir 目录结构:

1686636828121.png

decode_apk_dir.png

编译资源

编译资源使用aapt2编译生成 *.flat文件集合

aapt2 compile --dir decode_apk_dir\res -o compiled_resources.zip

生成compiled_resources.zip文件

关联资源

生成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.apk

解压到base文件夹,目录结构:


1686636872413.png

base-apk-unzip.png

拷贝资源

创建base文件夹,以base文件夹为根目录

将解压得到的resources.pb拷贝到 ./temp/base/resources.pb

将解压得到的res拷贝到 ./temp/base/res

创建manifest文件夹, 将解压得到的AndroidManifest.xml拷贝到 ./temp/base/manifest

拷贝assets , 将 ./temp/decode_apk_dir/assets 拷贝到 ./temp/base/assets

拷贝lib, 将 ./temp/decode_apk_dir/lib 拷贝到 ./temp/base/lib

创建root文件夹,拷贝unknown, 将 ./temp/decode_apk_dir/unknown 拷贝到 ./temp/base/root/unknown

拷贝kotlin, 将 ./temp/decode_apk_dir/kotlin拷贝到 ./temp/base/root/kotlin

root目录下创建META-INF文件夹,得到 ./temp/base/root/META-INF

创建dex 文件夹,将  ./temp/decode_apk_dir/*.dex拷贝到 ./temp/base/dex(多个dex都要一起拷贝过来)

base/resources.pb                    ============> base/resources.pb
base/res                             ============> base/res
base/AndroidManifest.xml             ============> base/manifest/AndroidManifest.xml
decode_apk_dir/assets                ============> base/assets
decode_apk_dir/lib                   ============> base/lib
decode_apk_dir/unknown               ============> base/root
decode_apk_dir/kotlin                ============> base/root/kotlin
创建META-INF                          ============> base/root/META-INF
decode_apk_dir/.dex                  ============> base/dex/.dex

最终的目录结构

base/
├── assets
├── dex
├── lib
├── manifest
├── res
├── resources.pb
└── root

压缩资源

将base文件夹,压缩成base.zip 一定要zip格式

注意:压缩后双击打开显示的是所有资源,而不是显示base,点击base再显示所有资源;否则会报AndroidManifest.xml找不到的错

编译aab

打包app bundle需要使用bundletool

java -jar bundletool-all-1.6.1.jar build-bundle --modules=base.zip --output=base.aab

aab签名

jarsigner -digestalg SHA1 -sigalg SHA1withRSA 
-keystore <签名文件路径>
-storepass <签名文件密码>
-keypass <签名文件密码>
base.aab 
<签名文件别名>

注意:您不能使用 apksigner 为 aab 签名。签名aab的时候不需要使用v2签名,使用JDK的普通签名就行。

测试与安装

限于篇幅,Aab的测试与安装放在下一篇文章

详见Aab(Android App Bundle)测试与安装

结束语

过程中有问题或者需要交流的同学、独立开发者同学、都可以私信我拉群(加好友的备注下,因为Apk转Aab和独立开发俱乐部,是分开的两个群)

关于脚本

鉴于很多同学想要Apk转Aab脚本,决定免费分享。

各位大佬可以在评论区留下你们的Github账号,我会给你们开放Collaborators权限,脚本可以一行命令直接转换。


相关文章
|
17天前
|
存储 Java API
Android 浅度解析:mk预置AAR、SO文件、APP包和签名
Android 浅度解析:mk预置AAR、SO文件、APP包和签名
72 0
|
2月前
|
JavaScript Android开发
【问题篇】打包Vue-cli3创建的vue项目成App的apk文件
【问题篇】打包Vue-cli3创建的vue项目成App的apk文件
30 0
|
2天前
|
机器学习/深度学习 Java Shell
[RK3568][Android12.0]--- 系统自带预置第三方APK方法
[RK3568][Android12.0]--- 系统自带预置第三方APK方法
15 0
|
2天前
|
Android开发
Android 高通平台集成无源码apk示例
Android 高通平台集成无源码apk示例
11 0
|
2天前
|
Android开发
Android APP 隐藏系统软键盘的方法
Android APP 隐藏系统软键盘的方法
10 0
|
2天前
|
Android开发
Android修改默认system/bin/下可执行程序拥有者和权限,使用实例,只有root和系统app权限才能执行某个命令。
Android修改默认system/bin/下可执行程序拥有者和权限,使用实例,只有root和系统app权限才能执行某个命令。
11 0
|
2天前
|
编译器 Android开发
Android S内置APK时AndroidManifest使用uses-library编译报错
Android S内置APK时AndroidManifest使用uses-library编译报错
8 0
|
16天前
|
缓存 Android开发 开发者
pc上使用命令给android安装apk
pc上使用命令给android安装apk
19 0
|
17天前
|
XML Java Android开发
Android系统 添加动态控制屏幕方向、强制APP横竖屏方向
Android系统 添加动态控制屏幕方向、强制APP横竖屏方向
32 1
|
17天前
|
测试技术 Android开发
Android App获取不到pkgInfo信息问题原因
Android App获取不到pkgInfo信息问题原因
19 0