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,并提示签名无效的错误。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/959872.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【25考研】中科院软件考研复试难度分析!

中科院软件复试不需要上机!且对专业综合能力要求较高!提醒同学一定要认真复习! 一、复试内容 二、参考书目 官方并未明确给出,建议同学参考初试书目: 1)《数据结构(C语言版)》严蔚…

2014年蓝桥杯第五届CC++大学B组真题及代码

目录 1A:啤酒和饮料(填空)(枚举) 2B:切面条(填空) 3C:李白打酒(填空)(dfs) 4D:史丰收速算(代码…

目标跟踪之sort算法(3)

这里写目录标题 1 流程1 预处理2 跟踪 2 代码 参考:sort代码 https://github.com/abewley/sort 1 流程 1 预处理 1.1 获取离线检测数据。1.2 实例化跟踪器。2 跟踪 2.1 轨迹处理。根据上一帧的轨迹预测当前帧的轨迹,剔除到当前轨迹中为空的轨迹得到当前…

单片机基础模块学习——DS18B20温度传感器芯片

不知道该往哪走的时候,就往前走。 一、DS18B20芯片原理图 该芯片共有三个引脚,分别为 GND——接地引脚DQ——数据通信引脚VDD——正电源 数据通信用到的是1-Wier协议 优点:占用端口少,电路设计方便 同时该协议要求通过上拉电阻…

【精选】基于数据挖掘的招聘信息分析与市场需求预测系统 职位分析、求职者趋势分析 职位匹配、人才趋势、市场需求分析数据挖掘技术 职位需求分析、人才市场趋势预测

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

文献阅读 250125-Accurate predictions on small data with a tabular foundation model

Accurate predictions on small data with a tabular foundation model Accurate predictions on small data with a tabular foundation model | Nature 使用一种基于表格的模型来对小型数据实现准确预测 ## Abstract: 基于其他列来填充标签列中缺失值的基本预测任务对于各种应…

shiro学习五:使用springboot整合shiro。在前面学习四的基础上,增加shiro的缓存机制,源码讲解:认证缓存、授权缓存。

文章目录 前言1. 直接上代码最后在讲解1.1 新增的pom依赖1.2 RedisCache.java1.3 RedisCacheManager.java1.4 jwt的三个类1.5 ShiroConfig.java新增Bean 2. 源码讲解。2.1 shiro 缓存的代码流程。2.2 缓存流程2.2.1 认证和授权简述2.2.2 AuthenticatingRealm.getAuthentication…

【QT】 控件 -- 显示类

🔥 目录 [TOC]( 🔥 目录) 1. 前言 2. 显示类控件2.1 Label 1、显示不同文本2、显示图片3、文本对齐、自动换行、缩进、边距4、设置伙伴 3.2 LCD Number 3.3 ProgressBar 3.4 Calendar Widget 3. 共勉 🔥 1. 前言 之前我在上一篇文章【QT】…

location的使用规则

1、基于URL的location 负责均衡配置 后端集群中的web服务器,必须要有对应的目录和文件才能被访问到 http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;upstream default_pool {server 10.0.0.7:…

如何制作浪漫风格的壁纸

制作浪漫风格的壁纸需要营造出温馨、柔和、梦幻的氛围,通过色彩、元素和构图来传达浪漫的情感。以下是一个详细的步骤指南,帮助你制作浪漫风格的壁纸: 一、明确设计目标 确定用途: 个人使用:如果是为了个人设备&#…

SpringBoot支持动态更新配置文件参数

前言 博主介绍:✌目前全网粉丝3W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容:Java后端、大数据、算法、分布式微服务、中间件、前端、运维等。 博主所有博客文件…

题海拾贝:P2085 最小函数值

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞&#xff0c;关注&#xff01; 1、题…

企业微信SCRM开创客户管理新纪元推动私域流量高效转化

内容概要 在当今瞬息万变的数字化时代&#xff0c;企业面临着前所未有的客户管理挑战。消费者的需求日益多样化&#xff0c;他们希望能够随时随地与品牌沟通。因此&#xff0c;越来越多的企业意识到&#xff0c;传统的客户管理方式已无法满足市场的需求。在这样的背景下&#…

电子应用设计方案104:智能家庭AI弹簧床系统设计

智能家庭 AI 弹簧床系统设计 一、引言 智能家庭 AI 弹簧床系统旨在为用户提供更加舒适、个性化的睡眠体验&#xff0c;通过结合人工智能技术和先进的床垫设计&#xff0c;实时监测和调整睡眠环境&#xff0c;以满足不同用户的需求。 二、系统概述 1. 系统目标 - 自动适应用户…

【25考研】人大计算机考研复试该怎么准备?有哪些注意事项?

人大毕竟是老牌985&#xff0c;复试难度不会太低&#xff01;建议同学认真复习&#xff01;没有机试还是轻松一些的&#xff01; 一、复试内容 由公告可见&#xff0c;复试包含笔试及面试&#xff0c;没有机试&#xff01; 二、参考书目 官方无给出参考书目&#xff0c;可参照…

随着监测技术的不断升级,将为智能决策提供强大的数据支持和智能帮助的智慧能源开源了

简介 AI视频监控平台, 是一款功能强大且简单易用的实时算法视频监控系统。愿景在最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;减少企业级应用约 95%的开发成本&#xff0c;用户仅需在界面上…

vim如何设置自动缩进

:set autoindent 设置自动缩进 :set noautoindent 取消自动缩进 &#xff08;vim如何使设置自动缩进永久生效&#xff1a;vim如何使相关设置永久生效-CSDN博客&#xff09;

字节跳动发布UI-TARS,超越GPT-4o和Claude,能接管电脑完成复杂任务

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

使用eNSP配置GRE VPN实验

实验拓扑 实验需求 1.按照图示配置IP地址 2.在R1和R3上配置默认路由使公网区域互通 3.在R1和R3上配置GRE VPN&#xff0c;使两端私网能够互相访问&#xff0c;Tunne1口IP地址如图 4.在R1和R3上配置RIPv2来传递两端私网路由 实验步骤 GRE VPN配置方法&#xff1a; 发送端&#x…

机器学习-线性回归(对于f(x;w)=w^Tx+b理解)

一、&#x1d453;(&#x1d499;;&#x1d498;) &#x1d498;T&#x1d499;的推导 学习线性回归&#xff0c;我们那先要对于线性回归的表达公示&#xff0c;有所认识。 我们先假设空间是一组参数化的线性函数&#xff1a; 其中权重向量&#x1d498; ∈ R&#x1d437; …