根据Google Play的政策要求,自 2021 年 8 月起,Google Play 将开始要求新应用使用 Android App Bundle(以下简称aab) 进行发布。该格式将取代 APK 作为标准发布格式。
想了解更多关于aab的介绍可以直接阅读android官方文档,有详细的说明developer.android.com/guide/app-b…
但是 前提是我们没有编译通过的源码,怎么办?怎么办?只能从apk一步步转成aab文件了。

第一阶段:准备工具

点击下载准备工具

bundletool-all-1.18.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…
熟悉安卓的同学直接去build-tools 文件夹 找到自己需要的编译的版本 复制到自己编译的目录文件夹就行了。

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

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

android.jar

准备好自己的公司的签名文件
***.jks 文件
下图所示:
效果如下:

第二步:Apk 转aab文件


解压apk
1.通过apktool去解压apk包

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

解压apk后 decode_apk_dir 目录结构:
请添加图片描述
编译资源

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

aapt2 compile --dir "/Users/isurpass/Documents/test/decode_apk_dir/res" -o compiled_resources.zip

生成compiled_resources.zip文件

3.打包文件配置信息设置
版本信息:minSdk targetSdk versionCode verisonName

aapt2 link --proto-format -o android_test.apk -I android_35.jar \
--min-sdk-version 21 --target-sdk-version 35 \
--version-code 30 --version-name 1.0.30 \
--manifest "/Users/isurpass/Documents/test/decode_apk_dir/AndroidManifest.xml" \
-R compiled_resources.zip --auto-add-overlay

4.解压android_test.apk ==> 需要引用里面的资源

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

5.替换资源拼接aab文件目录:
以android_test文件夹为根目录
创建 android_test/manifest 将 android_test/AndroidManifest.xml 剪切过来
拷贝assets , 将 ./temp/decode_apk_dir/assets 拷贝到 ./temp/android_test/assets
拷贝lib, 将 ./temp/decode_apk_dir/lib 拷贝到 ./temp/android_test/lib
拷贝unknown, 将 ./temp/decode_apk_dir/unknown 拷贝到 ./temp/android_test/root
拷贝kotlin, 将 ./temp/decode_apk_dir/kotlin拷贝到 ./temp/android_test/root/kotlin
拷贝META-INF,将./temp/decode_apk_dir/original/META-INF 拷贝到 ./temp/android_test/root/META-INF (删除签名信息***.RSA**、.SF、.MF)
创建./android_test/dex 文件夹,将 ./decode_apk_dir/*.dex(多个dex 编译后代码块) 都要一起拷贝过来 )

android_test/manifest                ============> android_test/AndroidManifest.xml
decode_apk_dir/assets                ============> android_test/assets
decode_apk_dir/lib                   ============> android_test/lib
decode_apk_dir/unknown               ============> android_test/root
decode_apk_dir/kotlin                ============> android_test/root/kotlin
decode_apk_dir/original/META-INF     ============> android_test/root/META-INF
decode_apk_dir/*.dex                 ============> base/dex/*.dex

查看目录:
请添加图片描述
6.压缩资源
将android_test文件夹,压缩成android_test.zip 一定要zip格式

cd android_test && zip -r ../android_test.zip *

7.编译aab
打包app bundle需要使用bundletool

java -jar bundletool-all-1.18.1.jar build-bundle \
--modules=android_test.zip --output=android_test.aab

8.abb签名

jarsigner -keystore AndroidappKeyiSupper.jks \
-signedjar android_test_signed.aab \
android_test.aab key

注意 : key 是你的密钥 别名哦!

第三步.检测打包好的abb文件是不是可以用Apk文件。

1.执行bundletool命令 ,从 aab 生成一组 APK

java -jar bundletool-all-1.18.1.jar build-apks \
--bundle=android_test_signed.aab \
--output=android_test_signed.apks \
--ks=AndroidappKeyiSupper.jks \
--ks-pass=pass:123456 \
--ks-key-alias=key \
--key-pass=pass:123456

2.提取 apk文件:

unzip android_test_signed.apks universal.apk

对应的apk文件 : universal.apk

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/90525.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/90525.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/90525.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

率先通过自动制冰性能认证,容声冰箱推动行业品质升级

日前,容声冰箱“电冰箱自动制冰性能认证”由中国家用电器研究院测试并通过,该认证为行业首次。这标志着中国家电行业在冰箱自动制冰功能的技术规范与品质保障领域树立了全新里程碑,也将洁净、高效的制冰体验带入中国家庭日常生活。目前&#…

大模型-batch之continuous batching

一、ORCA1.1 ORCA 概览看下Continuous Batching 技术的开山之作ORCA,这个其实是融合的思路。ORCA:把调度粒度从请求级别调整为迭代级别,并结合选择性批处理(selective batching)来进行优化。Sarathi[2] :利用Chunked P…

主要分布在背侧海马体(dHPC)CA1区域(dCA1)的时空联合细胞对NLP中的深层语义分析的积极影响和启示

时空联合细胞(Spatiotemporal Conjunctive Cells)主要分布在背侧海马体CA1区(dCA1),其核心功能是​​同步编码空间位置、时间信息和行为意图​​,形成动态的情景记忆表征。这种神经机制为自然语言处理&…

操作系统:系统程序(System Programs)

目录 常见的系统程序类型 1️⃣ 文件管理(File Management) 2️⃣ 状态信息(Status Information) 3️⃣ 编译器和程序开发(Program Language Support) 4️⃣ 程序执行控制类(Program Load…

【知识图谱】Neo4j Desktop桌面版中国区被禁(无法打开)问题解决方法

【知识图谱】Neo4j Desktop桌面版进程运行无法打开,UI 界面无法显示问题解决办法 前言 1.问题形式 2.原因分析 3.解决方法 3.1 方法一,断网 3.2 方法二,手动设置代理 4.启动Neo4j Desktop 前言 Neo4j Desktop桌面版安装教程参考链接: https://zskp1012.blog.csdn.net/artic…

安装acunetix软件之后改www.ddosi.org.bat文件

安装环境:windows11 通过网盘分享的文件:Acunetix_15.2.221208162_www.ddosi.org.zip 链接: https://pan.baidu.com/s/1FPFFr583FFFj6hxWB-Ygng?pwdjpim 提取码: jpim 下载后文件是: 解压之后,如下图: 安装步骤如…

pycharm安装教程-PyCharm2023安装详细步骤【MAC版】【安装包自取】

pycharm安装教程-PyCharm2025安装详细步骤【MAC版】安装安装包获取(文章末尾)今天来给大家分享 Mac 系统安装 PyCharm,附带安装包资源安装, PyCharm 相关就不叙述了,直接开始安装! 安装 2024版本、2025年…

Linux(centos7)安装 docker + ollama+ deepseek-r1:7b + Open WebUI(内含一键安装脚本)

windows版本的 ollama :https://blog.csdn.net/YXWik/article/details/143871588 环境:centos7 文中各个脚本 1.docker安装 或者 需要重新安装: install_docker.sh 2.docker已安装只需要安装 ollama deepseek-r1:7b Open WebUI &#xff1…

深度解析:在Odoo 18中基于原生Owl框架为PWA定制功能丰富的底部导航栏

本文旨在提供一个从架构设计、核心功能实现到高级用户体验优化的全面指南,详细阐述如何在Odoo 18中,完全利用其原生的Owl前端框架,为渐进式网络应用(PWA)从零开始开发一个功能完备、数据驱动且高度可定制的底部导航栏。…

Java泛型初始化ArrayList<String>()和ArrayList<>()的区别

文章目录前言Java 泛型初始化&#xff1a;ArrayList<String>() vs ArrayList<>() 的区别1. 语法差异1.1 显式泛型初始化 (ArrayList<String>())1.2 钻石操作符初始化 (ArrayList<>())2. 编译与运行时的区别3. 使用场景对比3.1 显式泛型初始化的适用情况…

ubuntu25.04+4070+cuda+docker安装

目录 1.4070nvidia驱动安装 2.CUDA安装 3.docker安装 4.docker的GPU支持 1.4070nvidia驱动安装 首先从软件源获取最新的软件包信息&#xff0c;然后升级一下安装好的软件包 #从软件源获取最新的软件包信息 apt update -y #将已安装的软件包升级到最新版本 apt upgrade -y 然…

Mac m系列 VMware Fusion虚拟机安装ARM contos

一、下载虚拟机 VMware Fusion和 CentOS 安装 VMware Fusion下载地址下载好镜像文件CentOS-Stream-9-20230516.0-aarch64-boot.iso下载地址 二、打开VMware Fusion新建虚拟机 选择从光盘或映像中安装点击继 选择刚才下载的镜像&#xff0c;点击继续选择 Linux > 其他Linu…

MYSQL中NOT IN和NOT EXISTS

NOT IN 和 NOT EXISTS 是 MySQL 中用于排除某些数据的两种常见查询方式。它们的功能相似&#xff0c;都用于返回不满足某一条件的结果&#xff0c;但是它们在内部的实现方式以及某些特定场景下的行为有所不同。1. NOT INNOT IN 是用来排除在指定值集合中存在的值。通常用来与子…

数据库关系运算之连接

在数据库理论中&#xff0c;关系连接&#xff08;Join&#xff09; 是将两个或多个关系&#xff08;表&#xff09;中的元组&#xff08;行&#xff09;根据一定条件组合成新关系的操作&#xff0c;是关系型数据库中核心且高频使用的操作。其本质是通过共享的属性&#xff08;列…

npm全局安装后,依然不是内部或外部命令,也不是可运行的程序或批处理文件

虽然通过 npm install -g yarn 安装了 Yarn&#xff0c;但系统无法识别 yarn 命令。这通常是因为 npm 的全局安装目录没有添加到系统的 PATH 环境变量中C:\Users\Administrator>npm install -g yarnadded 1 package in 518msC:\Users\Administrator>yarn yarn 不是内部或…

C++ Proactor 与 Reactor 网络编程模式

&#x1f9e0; C Proactor 与 Reactor 网络编程模式&#x1f4cc; 核心区别概述特性Reactor 模式Proactor 模式事件驱动核心监听 I/O 就绪事件 (可读/可写)监听 I/O 完成事件 (读完成/写完成)I/O 执行者用户线程 主动执行 I/O 操作操作系统 异步执行 I/O 操作控制流同步非阻塞 …

从手动操作到自动化:火语言 RPA 在多系统协作中的实践

在企业日常运营中&#xff0c;很多业务流程需要在多个系统间来回切换&#xff1a;从 A 系统导出数据&#xff0c;到 B 系统校验格式&#xff0c;再到 C 系统录入信息…… 这些跨系统操作步骤繁琐、逻辑固定&#xff0c;却往往依赖人工完成&#xff0c;不仅效率低下&#xff0c;…

Spring Security 实践之登录

前言Spring Security是一个功能强大且高度且可定制的身份验证和访问控制框架&#xff0c;包含标准的身份认证和授权。 本文主要介绍SpringBoot中如何配置使用 Spring Security 安全认证框架并简述相关原理和步骤。核心认证流程解析请求过滤 用户提交登录表单AbstractAuthentica…

华为云开发者空间 × DeepSeek-R1 智能融合测评:云端开发与AI客服的协同进化

前言&#xff1a; 华为开发者空间&#xff0c;是为全球开发者打造的专属开发者空间&#xff0c;致力于为每位开发者提供一台云主机、一套开发工具和云上存储空间&#xff0c;当普惠云资源遇见推理大模型&#xff0c;企业服务与开发效能的范式革命正在加速。华为云开发者空间&am…

二分查找----4.搜索旋转排序数组

题目链接 /** 升序数组在某个位置被分割为前后两部分,前后两部分整体互换;在被改变后的数组中找到目标值 O(log n)---> 二分查找 特点: 旋转后的数组被分割为两个独立的递增区间 左半区的最小值,大于右半区的最大值(mid所在区间的判断依据) 二分策略: 首先判断mid落在左区间…