Android apk转aab,仅有apk的情况

因开发需要,周末尝试了上传apk到Google play,在资料都填完的情况下,发现现在,apk已经无法满足市场要求了。了解下发现Google Play 新应用的格式是 Android App Bundle(以下简称aab) 。当然如果有源码的话完全可以使用Android Studio生成aab,奈何仅有apk。
一顿冲浪,借鉴了不少文章,最终完成。

需要工具

  • bundletool.jar
    bundletool.jar 是google提供生成&测试aab的工具,gradle打包里面也是使用的这个工具。
    获取方式github: https://github.com/google/bundletool/releases

  • apktool_2.5.0.jar
    反编译安卓apk工具。
    获取方式github: https://github.com/iBotPeaches/Apktool/releases

  • aapt2
    aapt全称Android Asset Packaging Tool是Android资源打包工具。
    获取方式ANDROID SDK: $ANDROID_SDK/build-tools/30.0.3/aapt2

  • android.jar
    android framework,提供了系统的资源和api。
    获取方式ANDROID SDK: $ANDROID_SDK/platforms/android-30/android.jar

aapt2和Android在Android sdk目录下。 现在谷歌对sdk的版本要求在31以上,所以项目一定要用最新的sdk进行编译

既然是将apk转成aab,自然要有apk,将apk和这几个jar包放到一个文件夹,可能会方便一点。
鉴于现在Android Studio基本上自带sdk和jdk,在apk转aab的时候用起来可能不是很方便,所以电脑再配置一下jdk吧

进入正题

  • 1.通过apktool去解压apk包
		java -jar apktool.jar d test.apk -s -o decode_apk_dir

解压apk后目录结构,这个应该和代码有关系

在这里插入图片描述

钱钱钱

  • 2.使用aapt2编译生成 文件集合
		aapt2 compile --dir decode_apk_dir\res -o compiled_resources.zip
  • 3.生成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

(为了方便展示,换行了,弄个文件把这些弄成一行,相关配置自己改)

  • 4.解压base.apk
  • 5.拷贝资源
    创建base文件夹,以base文件夹为根目录,也可以直接用解压后的base,我是直接用的
    创建 base/manifest 将 base/AndroidManifest.xml 剪切过来
    拷贝assets , 将 ./decode_apk_dir/assets 拷贝到 ./base/assets
    拷贝lib, 将 ./decode_apk_dir/lib 拷贝到 ./base/lib
    拷贝unknown, 将 ./decode_apk_dir/unknown 拷贝到 ./base/root
    拷贝kotlin, 将 ./decode_apk_dir/kotlin拷贝到 ./base/root/kotlin
    拷贝META-INF,将./decode_apk_dir/original/META-INF 拷贝到 ./base/root/META-INF (删除签名信息 .RSA、.SF、.MF)
    创建./base/dex 文件夹,将 ./decode_apk_dir/*.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
  • 6.将base文件夹,压缩成base.zip 一定要zip格式

压缩后双击打开显示的是所有资源,而不是显示base,点击base再显示所有资源;在base文件夹里选中所有内容进行压缩,不要选中base文件夹进行压缩

  • 7.编译aab
java -jar bundletool.jar build-bundle --modules=base.zip --output=base.aab 

这段有几篇是带了斜杠的,这里注意,么有杠杠

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

(去掉换行符) 签名的时候,看了好几篇都是不让用 apksigner 为 aab
签名,而是直接使用的jdk生产的签名文件进行签名,这个没去尝试

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值