前言:

根据Google Play的政策要求,自 2021 年 8 月起,Google Play 将开始要求新应用使用 Android App Bundle(以下简称aab) 进行发布。该格式将取代 APK 作为标准发布格式。
想了解更多关于aab的介绍可以直接阅读android官方文档,有详细的说明developer.android.com/guide/app-b…
正常情况:直接Android Studio上面点击打包或者用Gradle命令直接生成一个aab,交给运营提包到Google Play商店上面去,任务完成,下班~ 。
存在问题:我没有工程,也没有源码,到我手上的就只有一个apk,走google提供的方案就不行了。
思 考:我们常做的事情是把apk拿过来,反编译一下,修改修改代码,换换参数,然后重新打成新apk。 apk和aab都是同一个项目生成的,代码资源都一样,那么可不可以相互转化?
查资料ing…
本文向大家介绍如何从apk一步步转化成aab,文末提供本文所使用到的工具&python脚本源码

需要工具

  • bundletool-all-1.6.1.jar
    bundletool.jar 是google提供生成&测试aab的工具,gradle打包里面也是使用的这个工具。
    获取方式github: github.com/google/bund…
    详细文档&使用方法: developer.android.com/studio/comm…

  • aapt2

    aapt全称Android Asset Packaging Tool是Android资源打包工具。
    获取方式ANDROID SDK: $ANDROID_SDK/build-tools/30.0.3/aapt2
    获取方式google maven: dl.google.com/dl/android/…
    详细文档&使用方法:developer.android.com/studio/comm…

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

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

apk生成aab

Android Studio打包可选Android App Bundle(aab),并提供详细教程,本文不再说明。

解压apk

通过apktool去解压apk包

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

解压apk后 decode_apk_dir 目录结构:

./decode_apk_dir
├── AndroidManifest.xml
├── apktool.yml
├── assets
├── classes2.dex
├── classes.dex
├── lib
├── original
├── res
└── unknown

编译资源

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

aapt2 compile --dir decode_apk_dir\res -o compiled_resources.zip
复制代码

生成compiled_resources.zip文件
为什么要加.zip的后缀,不和谷歌官方文档一样直接生成compiled_resources文件,或者compiled_resources文件夹。此处为了windows能正常的编译打包,linux和mac随意~

关联资源

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

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

./base
├── AndroidManifest.xml
├── res
└── resources.pb

拷贝资源

以base文件夹为根目录

创建 base/manifest 将 base/AndroidManifest.xml 剪切过来

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

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

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

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

拷贝META-INF,将./temp/decode_apk_dir/original/META-INF 拷贝到 ./temp/base/root/META-INF (删除签名信息***.RSA**、.SF.MF)

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

base/manifest                        ============> base/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
decode_apk_dir/original/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格式

编译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 luojian37.jks \
-storepass ****** \
-keypass ****** \
base.aab \
******

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

测试

此时我们已经拿到了一个aab的包,符合Google Play的上架要求,那么我们要确保这个aab的包是否正常呢?作为一个严谨的程序员还是得自己测一下。

上传Google Play

上传Google Play的内部测试,通过添加测试用户从Google Play去下载到手机测试。更加能模拟真实的用户环境。

bundletool安装aab(推荐)

每次都上传到Google Play上面去测试,成本太高了,程序员一般没上传权限,运营也不在就没法测试了。此时我们可以使用bundletool模拟aab的安装。

连接好手机,调好adb,执行bundletool命令进行安装

1.从 aab 生成一组 APK

java -jar bundletool-all-1.6.1.jar build-apks \
--bundle=base.aab \
--output=base.apks \
--ks=luojian37.jks \
--ks-pass=pass:****** \
--ks-key-alias=****** \
--key-pass=pass:******

2.将 APK 部署到连接的设备

java -jar bundletool-all-1.6.1.jar install-apks --apks=base.apks

还原成apk

竟然apk可以转化成aab,同样aab也可以生成apk,而且更加简单

java -jar bundletool-all-1.6.1.jar build-apks \
--mode=universal \
--bundle=base.aab \
--output=test.apks \
--ks=luojian37.jks \
--ks-pass=pass:****** \
--ks-key-alias=****** \
--key-pass=pass:******

此时就可以或得一个test.apks的压缩包,解压这个压缩包就有一个universal.apk,和开始转化的apk几乎一样。
原文作者:https://juejin.cn/post/6982111395621896229

最后总结

在此感谢37互娱的同学 因为公司有个需求是要能修改aab里面的部分内容 所以我个人的思路是把别人提供的apk 拆包后修改里面部分内容然后重新编译后 修改重新编译签名成新的apk 然后通过37互娱同学提供的脚本工具 来转换成aab 还有aab 先转apk 然后拆包修改里面部分 重新编译 然后再用脚本转成aab 即可 在此感谢37互娱的同学提供方案和脚本 希望给后人多些帮助 减少被坑的概率 最后希望我的文章能帮助到各位解决问题 ,以后我还会贡献更多有用的代码分享给大家。各位同学如果觉得文章还不错 ,麻烦给关注和star,小弟在这里谢过啦!

脚本地址

码云 :https://gitee.com/qiuyu123/build_aab_tool

Android apk和aab互相转换相关推荐

  1. 怎么从Android App Bundle (.aab)提取和转换apks文件(从AAB到APKs的转换和提取)

    在Google的I/O 2018上引入了一个新的APP的发布格式,就是 Android App Bundle. 在 2019年之后,Google开始推荐开发者上传APP或者更新APP使用 .aab 格 ...

  2. Android APK 打包过程 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  3. IIS 添加mime 支持 apk,exe,.woff,IIS MIME设置 ,Android apk下载的MIME 设置 苹果ISO .ipa下载mime 设置...

    IIS 添加mime 支持 apk,exe,.woff,IIS MIME设置 ,Android apk下载的MIME 设置 苹果ISO .ipa下载mime 设置 原文:IIS 添加mime 支持 a ...

  4. Android APK反编译及逆向工程

    一. 分析已经打好的apk. 首先来简单的说明下Apk文件本质上其实是一个zip包.我们直接进行解压就能看到其中的目录. 1. 目录说明 AndroidManifest.xml:应用的全局配置文件 c ...

  5. 【SealDEV 倾情奉献】Android APK 安装过程详解

    开发 Android 应用后,一般都会安装到手机上去运行,了解应用是如何安装到手机上的,可以更好的理解应用的本质,理解应用是如何运行的,在自己开发的应用遇到一些问题时,会从更深层次去分析,快速定位找到 ...

  6. Android APK签名 JKS 密钥库使用专用格式。建议使用 “keytool -importkeystore -srckeystore E:\xxxxxx- pkcs12“ 迁移到行业标准格式

    Android Studio中进行签名 转载地址:Android APK签名 JKS 密钥库使用专用格式.建议使用 "keytool -importkeystore -srckeystore ...

  7. Android APK文件结构 完整打包编译的流程 APK安装过程 详解

    Android apk文件结构 打包编译的流程 Android官网 配置构建 流程 Configure your build The build process APK文件结构 assets res ...

  8. Android APK 安装包

    最近本人了解了一些关于Android APK安装包的知识,在此写下一篇博客进行总结. APK总览 APK是AndroidPackage的缩写,即Android安装包(apk).APK文件其实是zip格 ...

  9. RPG Maker MV/ MZ 工程打包 Android APK 文件(使用 Website 2 APK Builder Pro)

    演示环境:Win 10, RPG Maker MV v1.6.2, JDK 11, Website 2 APK Builder Pro v5.0 目录 前文 下载安装 安装 Website 2 APK ...

最新文章

  1. 5.8fork父子进程
  2. 阿里原来是这么干的!Spring Boot 五种热部署方式
  3. golang中的strings.TrimSpace
  4. java 转时区_java – 时区转换
  5. 【转】urllib urllib2 httplib
  6. docker Gitlab14.5.0 初始化账号以及密码是什么呢?
  7. VS2008 启动“the application cannot start”错误
  8. 【LeetCode】【HOT】226. 翻转二叉树(递归)
  9. 省市区三级联动数据库
  10. 理解辐射校正、辐射定标、大气校正关系
  11. (转发)详解汽车UDS诊断协议(二)
  12. 数学分析教程(科大)——1.3笔记+习题
  13. js室内地图开发_我开发的开源 JS 地图引擎 maptalks.js, 请大家不吝赐教!
  14. Win10系统电脑鼠标左键不灵敏、有延迟怎么办
  15. 汽车通信协议:一文搞懂Flexray通信
  16. 美团/叮咚/盒马/淘鲜达/百联到家autojs脚本学习案例
  17. hnoi2014米特运输
  18. 政务大数据系列9:政务大数据的价值链
  19. libcurl Multi异步接口使用
  20. 北大施柏鑫:从审稿人视角,谈谈怎么写一篇CVPR论文

热门文章

  1. 吉林大学计算机a类学科,尴尬了!这7所高校明明是985,却一个A+学科都没有!...
  2. 百度与谷歌排名规则算法的大致区别
  3. 研究生期间如何做研究:一些建议
  4. 2023年中央财经大学数量经济学考博必看上岸前辈复习经验分享
  5. c语言烟花发射原理,烟花发射原理
  6. 注册hotmail.co .jp后缀的hotmail邮箱
  7. 海康威视SDK登录失败,错误码为8
  8. 【连载】《linux入门很简单》电子版——作者:刘金鹏(序:一切的起因2)
  9. 强大的代码编档工具—Doxygen
  10. dell服务器经常自动关机,戴尔15R电脑win10系统总是自动关机?