当前位置: 首页 > article >正文

android 的aab包

什么是 AAB (Android App Bundle)

AAB (Android App Bundle) 是 Google 推出的新一代 Android 应用发布格式,用于取代传统的 APK 格式。AAB 的全称是 Android App Bundle,扩展名为 .aab,它并不是直接可以安装的文件,而是用于上传到 Google Play 的发布包。

1. AAB 的核心特性

动态交付 (Dynamic Delivery)

  • Google Play 会根据用户设备特性(如屏幕密度、CPU 架构、语言等),从 .aab 文件中动态生成适合该设备的 APK 文件(包括 Base APK 和 Split APKs)。 
  • 用户只会下载设备所需的资源和代码,减小下载包的大小。
  • 模块化支持
    • 支持将应用划分为多个模块(Dynamic Feature Modules),部分功能可以按需下载,而不是在安装时全部下载。
  • 更小的下载包

    • AAB 格式将应用分成多个部分,避免了用户下载无关的资源或代码。例如,不会下载与用户设备无关的语言包、屏幕密度资源等。

3. AAB 的工作原理

当你上传 .aab 文件到 Google Play 后,Google Play 会对其进行处理:

  • 分拆资源和代码

    • Google Play 会将 .aab 文件拆分为 Base APK 和多个 Split APK。
    • Base APK 包含应用的核心逻辑和必要的资源。
    • Split APK 包含设备特定的资源(如语言、屏幕密度、CPU 架构)。
  • 动态生成适配的 APK

    • 当用户从 Google Play 下载应用时,Google Play 会根据用户设备特性动态生成 APK,只包含必要的部分。
  • 按需加载模块

    • 如果应用包含动态功能模块,可以在运行时按需下载,而不是安装时一并下载。

所以安装的时候做少安装两个apk包,一个是Base APK 还有一个是Split APK,最少两个,因为可能会多个Base APK包。

那如果我们自己想测试aab包该怎么测试

从 app bundle 生成一组 APK

构建 Android App Bundle 文件后,请测试 Google Play 使用该 Android App Bundle 文件生成 APK 的情形,以及这些 APK 部署到设备上之后的表现。

您可以通过以下两种方式测试 app bundle:

  • 在本地使用 bundletool 命令行工具。
  • 使用测试轨道通过 Google Play 将您的 app bundle 上传到 Play 管理中心。

本部分将介绍如何使用 bundletool 在本地测试 app bundle。

当 bundletool 从 app bundle 生成 APK 后,它会将生成的 APK 纳入到一个名为“APK set archive”的容器中,该容器以 .apks 作为文件扩展名。如需从 app bundle 为应用支持的所有设备配置生成一组 APK,请使用 bundletool build-apks 命令,如下所示:

我们也需要将aab包转成apk才能使用。bundletool  工具,这是google为我们提供的,

https://developer.android.com/tools/bundletool?hl=zh-cn

首先得下载这个工具,这个下载地址是官方提供的

https://github.com/google/bundletool/releases

下载完后发现是一个.jar结尾的,所有得用java -jar命令执行

 

什么是.jar文件

.jar 程序本质上是用 Java 编写的,所以需要 Java 虚拟机(JVM)来执行它

  • 运行工具

    • 许多开发工具和 CLI 工具(如 bundletoolgradle)都是以 .jar 文件形式分发。

java -jar 命令的含义 

java -jar 是用来运行 .jar 文件的命令,其中:

  • java

    • 是 Java 虚拟机(JVM)的命令行工具,用来启动和运行 Java 程序。
    • 通常是 JRE(Java Runtime Environment)或 JDK(Java Development Kit)的一部分。
  • -jar

    • java 命令的一个选项,表示运行一个 JAR 包
    • 它告诉 JVM,目标文件是一个可执行的 .jar 文件,并让 JVM按照 JAR 文件的 MANIFEST.MF 文件中的 Main-Class 配置来启动程序。

所以我们运行这个程序

java  -jar  bundletool的path

结下来我们使用bundletool将aab转变成apk

命令:

java -jar bundletool build-apks --bundle=aab文件路径 --output=需要写入的apks路径

--output这个记得一定是apks结尾的

但是这个是没有签名的apk,是不可以安装的

如果要将这些 APK 部署到设备,您还需要添加应用的签名信息,如以下命令所示。如果您未指定签名信息,bundletool 会尝试使用调试密钥为 APK 签名。

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
--ks=/MyApp/keystore.jks
--ks-pass=file:/MyApp/keystore.pwd
--ks-key-alias=MyKeyAlias
--key-pass=file:/MyApp/key.pwd

一定记得 --和他签名的字符有两个空格,我就是直接复制过去,报错的

如果这个签名的信息配置错误,那么就调用debug.jks去打包

这里其实我有个问题,为什么我打包aab的使用了签名,再打包这apk的时候为什么又要重新签名,googlePlay没有我的签名是如何实现的呢?

  • AAB 签名:

    • 当你生成 .aab 文件时,AAB 本质上是一个归档文件,它包含了应用的所有模块和资源,但并未直接构建具体的 APK 文件。
    • 打包 .aab 时,确实需要用签名(如 keystore)对 AAB 文件本身进行签名。这是为了验证 .aab 的完整性和来源,防止被篡改。
  • 生成 APK 时:

    • 从 AAB 到 APK 是一个重新构建过程。bundletool 会根据设备配置(如屏幕密度、语言、CPU 架构等)从 .aab 文件中提取资源,动态生成针对性的 APK。
    • 由于这是一个新的构建过程,生成的 APK 文件必须重新进行签名,确保它们的完整性和来源可信。

2. Google Play 是如何拿到你的签名用于最终签名 APK 的?

2. Google Play 是如何拿到你的签名用于最终签名 APK 的?

Google Play 应用签名的机制

Google Play 在分发应用时,会执行 Google Play 应用签名(Google Play App Signing)。具体过程如下:

  1. 上传 AAB 到 Google Play

    • 当你上传 .aab 文件到 Google Play,Google Play 会验证 .aab 文件的签名,确保是由开发者上传且未被篡改。
  2. Google Play 持有的签名密钥

    • Google Play 要求开发者在启用 Google Play 应用签名时,将应用的签名密钥交由 Google Play 保管。
    • 如果是新应用,Google Play 会生成一个新的签名密钥,专门用于分发你的应用。
    • 如果是旧应用(签名密钥已存在),开发者需要将原有的签名密钥上传给 Google Play。
  3. Google Play 用自己的签名密钥重新签名

    • Google Play 接收 .aab 文件后,会提取资源并生成针对性 APK 文件。
    • 生成的 APK 文件会使用 Google Play 保管的签名密钥重新签名。
  4. 用户设备校验签名

    • 用户下载的 APK 文件会通过 Google Play 签名的密钥校验其完整性和来源。

3. 为什么 Google Play 不直接使用上传 AAB 的签名密钥?

主要原因有以下几点:

  1. 提高安全性

    • 开发者的签名密钥保存在 Google Play 的安全硬件模块(HSM)中,比开发者本地存储更安全。
    • 即使开发者的签名密钥泄露,Google Play 的分发不会受影响,因为它用的是自己的签名密钥。
  2. 灵活性(签名密钥更新)

    • Google Play 签名支持签名密钥轮换。比如,如果你的密钥泄露,你可以通过 Google Play 请求生成新的密钥。
  3. 一致性

    • Google Play 可以确保所有从它分发的 APK 都有统一的签名,避免因为开发者错误操作导致 APK 文件不一致。

. Google Play 如何校验上传的 AAB 文件

当你将 .aab 文件上传到 Google Play,Google Play 会进行以下签名校验过程:

第一步:检查开发者的签名密钥
  • 当你首次在 Google Play 控制台发布应用时:
    • 如果启用了 Google Play 应用签名:你需要上传你的签名密钥(.jks 文件中的密钥)到 Google Play,或者 Google Play 会帮助你生成并保管一个新的签名密钥。
    • 这个签名密钥成为 Google Play 用于验证你上传内容的依据。
第二步:提取 AAB 的签名
  • Google Play 提取 .aab 文件中的签名信息。
  • .aab 文件的签名是由 jarsigner 或类似工具在构建时生成的,它会在 .aabMETA-INF/ 目录下保存签名。
第三步:对比签名
  • Google Play 将提取到的 .aab 签名信息,与 Google Play 控制台中保存的开发者签名密钥进行对比。
    • 如果签名匹配:Google Play 确认 .aab 文件是由你这个开发者上传的,接着进行后续处理(例如分解 .aab 并生成 .apk)。
    • 如果签名不匹配:Google Play 会拒绝你的 .aab,并提示签名无效的错误。

 


http://www.kler.cn/a/521839.html

相关文章:

  • go gin配置air
  • CAG技术:提升LLM响应速度与质量
  • Autogen_core 测试代码:test_cache_store.py
  • 知识库管理驱动企业知识流动与工作协同创新模式
  • 图神经网络驱动的节点分类:从理论到实践
  • DeepSeek-R1:开源Top推理模型的实现细节、使用与复现
  • 2015年蓝桥杯第六届CC++大学B组真题及代码
  • 利用Python中Scapy库分析网络性能
  • 1月27(信息差)
  • 当高兴、尊重和优雅三位一体是什么情况吗?
  • ShenNiusModularity项目源码学习(7:数据库结构)
  • 前端监控之rrweb录制用户行为
  • 【学术会议征稿】第五届能源、电力与先进热力系统学术会议(EPATS 2025)
  • 18. 四数之和【力扣】——两层循环后的双指针法
  • 开启eslint后,html中全角符号绕过eslint检测
  • .NET Core 中依赖注入的使用
  • 上位机知识篇---CMake
  • download-git-repo 一款命令行下载仓库依赖
  • DeepSeek崛起:中国AI新星如何撼动全球资本市场格局
  • PHP中的获取器和修改器:探索数据访问的新维度
  • H3CNE-23-vlan间路由
  • 《企业应用架构模式》笔记
  • YOLOv11-ultralytics-8.3.67部分代码阅读笔记-transformer.py
  • Web3.0时代的挑战与机遇:以开源2+1链动模式AI智能名片S2B2C商城小程序为例的深度探讨
  • 算法-接雨水
  • 第05章 10 地形梯度场模拟显示