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权限,脚本可以一行命令直接转换。


相关文章
|
2月前
|
XML Java 数据库
安卓项目:app注册/登录界面设计
本文介绍了如何设计一个Android应用的注册/登录界面,包括布局文件的创建、登录和注册逻辑的实现,以及运行效果的展示。
174 0
安卓项目:app注册/登录界面设计
|
3月前
|
Java 数据库 Android开发
一个Android App最少有几个线程?实现多线程的方式有哪些?
本文介绍了Android多线程编程的重要性及其实现方法,涵盖了基本概念、常见线程类型(如主线程、工作线程)以及多种多线程实现方式(如`Thread`、`HandlerThread`、`Executors`、Kotlin协程等)。通过合理的多线程管理,可大幅提升应用性能和用户体验。
145 15
一个Android App最少有几个线程?实现多线程的方式有哪些?
|
3月前
|
存储 开发工具 Android开发
使用.NET MAUI开发第一个安卓APP
【9月更文挑战第24天】使用.NET MAUI开发首个安卓APP需完成以下步骤:首先,安装Visual Studio 2022并勾选“.NET Multi-platform App UI development”工作负载;接着,安装Android SDK。然后,创建新项目时选择“.NET Multi-platform App (MAUI)”模板,并仅针对Android平台进行配置。了解项目结构,包括`.csproj`配置文件、`Properties`配置文件夹、平台特定代码及共享代码等。
244 2
|
3月前
|
XML Android开发 数据格式
🌐Android国际化与本地化全攻略!让你的App走遍全球无障碍!🌍
在全球化背景下,实现Android应用的国际化与本地化至关重要。本文以一款旅游指南App为例,详细介绍如何通过资源文件拆分与命名、适配布局与方向、处理日期时间及货币格式、考虑文化习俗等步骤,完成多语言支持和本地化调整。通过邀请用户测试并收集反馈,确保应用能无缝融入不同市场,提升用户体验与满意度。
118 3
|
3月前
|
Java 数据库 Android开发
一个Android App最少有几个线程?实现多线程的方式有哪些?
本文介绍了Android应用开发中的多线程编程,涵盖基本概念、常见实现方式及最佳实践。主要内容包括主线程与工作线程的作用、多线程的多种实现方法(如 `Thread`、`HandlerThread`、`Executors` 和 Kotlin 协程),以及如何避免内存泄漏和合理使用线程池。通过有效的多线程管理,可以显著提升应用性能和用户体验。
87 10
|
2月前
|
安全 网络安全 Android开发
深度解析:利用Universal Links与Android App Links实现无缝网页至应用跳转的安全考量
【10月更文挑战第2天】在移动互联网时代,用户经常需要从网页无缝跳转到移动应用中。这种跳转不仅需要提供流畅的用户体验,还要确保安全性。本文将深入探讨如何利用Universal Links(仅限于iOS)和Android App Links技术实现这一目标,并分析其安全性。
337 0
|
3月前
|
XML 数据库 Android开发
10分钟手把手教你用Android手撸一个简易的个人记账App
该文章提供了使用Android Studio从零开始创建一个简单的个人记账应用的详细步骤,包括项目搭建、界面设计、数据库处理及各功能模块的实现方法。
|
API Android开发 图形学
【Unity3D】Bundle打包及加载流程Android篇
生成Bundle文件主要是如何对资源进行设置Bundle名及其分类的过程。目前有两种方式,第一种就是在编辑器里面设置每个资源的Bundle名称(如图1),这是最简单直观的操作方式;另一种方式就是通过编写代码并配合资源配置文件进行控制,先通过代码遍历项目工程的资源然后根据资源配置设置其Bundle名称,也可以暴力的按照资源类型进行分类,由于不同项目的控制方式不同,因此就不过多介绍。
668 0
【Unity3D】Bundle打包及加载流程Android篇
|
7天前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
34 19
|
7天前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
31 14