1.为什么要用Android App Bundle

从 2021年8月起,新应用需要使用 Android App Bundle 才能在 Google Play 中发布。现在,Play Feature Delivery 或 Play Asset Delivery 支持大小超过 150 MB 的新应用。

2.Android App Bundle 简介

Android App Bundle (简称AAB)是一种发布格式,其中包含您应用的所有经过编译的代码和资源,它会将APK生成及签名交由 Google Play 来完成。

Google Play 会使用您的 App Bundle 针对每种设备配置生成并提供经过优化的 APK,因此只会下载特定设备所需的代码和资源来运行您的应用。您不必再构建、签署和管理多个 APK 来优化对不同设备的支持,而用户也可以获得更小且更优化的下载文件包。

3.Google Play的两种资源选择性加载方式:

android 因为要适配各种不同硬件和配置,我们有不同 dp 密度的图片文件,语言文件,不同指令集的so等,现在 Android App Bundle 来了可以优化这个问题,google 市场我们下载 apk 时,市场先会检测我们手机的特性,然后选择最合适的资源打成 apk 再发给我们,比如我的手机只需要 arm-v7 的 so,hdpi 的图片,剩下的不会下发我们,这样可以大幅度减少 apk 的体积,尤其是对于 so 来说,以高德地图为例,不同的 so 包加起来有小 10M 了。

Android 设备的CPU类型(通常称为ABIs)

armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部 分Android设备都使用它.

arm64-v8a: 第8代、64位ARM处理器,很少设备,三星 Galaxy S6是其中之一。

armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多。

x86: 平板、模拟器用得比较多。

x86_64: 64位的平板。

这里使用一个APK解压后,可以看到APK内部的文件夹结构。

Lib文件中包含arm64-v8a,armeabiv-v7a两个文件夹,有些应用为适配更多的机型可能还会有armeabi、x86、x86_64等文件夹。在不同的手机中是不需要所有的这些文件夹的。

动态下发库

App Bundles 将一个 apk 拆分成多个 apk,我们的 apk 一般会被拆分为如下几个部分:

Base Apk:首次安装的apk,公共代码和资源,所以其他的模块都基于Base Apk;

Configuration APKs:native libraries 和适配当前手机屏幕分辨率的资源;

Dynamic feature APKs:不需要在首次安装就加载的模块。

Android App Bundle 与 APK 不同,App Bundle 纯粹是为了上传文件而设计的,用户无法直接安装和使用它,.aab 只是一个 zip 文件,Google Play 从中生成优化的 APK 并将其提供给设备进行安装。

(1) Play Feature Delivery:(特色分发)

使用 App Bundle 格式发布应用时,您可以选择使用 Play Feature Delivery,它可让您向应用项目中添加功能模块。这些模块包含仅根据您指定的条件随应用提供的功能和资源,或者稍后在运行时供使用 Play 核心库下载的功能和资源。

让您可按条件分发或按需下载应用的某些功能。 为此,首先需要将这些功能从基础应用中分离到功能模块中。(由于我们的方向是游戏,这块就不做深入了解)。

  1. Play Asset Delivery(资源分发,简称PAD)

使用 App Bundle 发布游戏时开发者可以使用 Play Asset Delivery:它是 Google Play 用于分发大量游戏资产的解决方案,为开发者提供了灵活的分发方式和极高的性能。

Play Asset Delivery (PAD) 将 app bundle 的优势带到游戏中。它允许超过 150 MB 的游戏替换旧版扩展文件 (OBB),方法是将包含游戏所需的所有资源的单个工件发布到 Play。PAD 提供了灵活的分发模式、自动更新、压缩和增量修补功能,并且可免费使用。使用 PAD,所有资源包均在 Google Play 上托管和提供,因此您无需使用内容分发网络 (CDN) 向玩家提供游戏资源。

Play Asset Delivery 使用资源包,资源包由资源(如纹理、着色器和声音)组成,但不包含可执行代码。通过 Dynamic Delivery,您可以按照以下三种分发模式自定义如何以及何时将各个资源包下载到设备上:安装时分发、快速跟进式分发和按需分发。

install-time(安装时分发):资源包在用户安装应用时分发。这些资源包以拆分 APK(APK 集的一部分)的形式提供。它们也称为“预先”资源包;您可以在应用启动时立即使用这些资源包。这些资源包会增加 Google Play 商店上列出的应用大小。用户无法修改或删除这些资源包。

(下载大小上限为1GB)

fast-follow(快速跟进式) 资源包会在用户安装应用后立即自动下载;用户无需打开应用即可开始 fast-follow 下载。下载过程中,用户仍然可以进入应用。这些资源包会增加 Google Play 商店上列出的应用大小。

(下载大小上限为 512 MB)

on-demand(按需分发) 资源包会在应用运行时下载。

什么时候触发下载?

(下载大小上限为 512 MB)

总资源下载大小上限

一个 Android App Bundle 中的所有 Asset Pack 的总下载大小上限为 2 GB。

一个 Android App Bundle 中最多可以使用 50 个资源包。

Google Play 商店会以归档文件(而非拆分 APK)的形式提供配置为 fast-follow 和 on-demand 的资源包。这些资源包随后会在应用的内部存储空间中展开。您可以使用 Play Core API 查询以这种方式提供的资源包的位置。应用不应假定这些文件存在或其位于何处,因为它们可能会被用户删除,或在两次游玩的间隙被 Play Core SDK 移动到其他位置。尽管这些文件可由应用写入,您也应将其视为只读文件,因为资源包补丁依赖于这些文件的完整性。

  1. Play Asset Delivery针对Unity构建

文档地址:

https://developer.android.google.cn/guide/app-bundle/asset-delivery/build-unity?hl=zh-cn

在运行时,可使用 Play Asset Delivery for Unity类来检索打包在资源包中的 AssetBundle。

首先需要获取 Play Asset Delivery 的 Unity 插件(或软件包)。

GitHub下载地址:https://github.com/google/play-unity-plugins/releases

下载好了之后,在Unity中导入google-play-plugins-1.5.0.unitypackage

导入成功后在Unity的菜单栏中多了Google菜单

依次选择 Google > Android App Bundle > Asset Delivery Settings。

如需选择直接包含 AssetBundle 文件的文件夹,请点击 Add Folder。

针对每个 Bundle,将 Delivery Mode 更改为 Install Time、Fast Follow 或 On Demand。解决所有错误或依赖项,然后关闭窗口。

依次选择 Google > Build Android App Bundle 以构建 App Bundle。

(可选)配置 App Bundle 以支持不同的纹理压缩格式。

使用 API 配置资源包

您可以通过能作为自动化构建系统的一部分运行的编辑器脚本配置 Asset Delivery。

使用AssetPackConfig类定义需要包含在 Android App Bundle build 中的资源,以及这些资源的分发模式。这些资源包无需包含 AssetBundle。

在给定 BuildPlayerOptions 和 AssetPackConfig 的情况下,您还可以在 Bundletool 类中使用静态 BuildBundle 方法生成具有资源包的 Android App Bundle。

Unity打包AAB设置

可以在编辑器中直接设置打包AAB.

也可以通过代码控制自动打包脚本生成AAB

https://docs.unity3d.com/cn/2018.4/ScriptReference/EditorUserBuildSettings-buildAppBundle.html

也可以在项目中添加如下代码

//值为true表示打出aab包。

EditorUserBuildSettings.buildAppBundle = true;

这样按照Unity的打包流程就可以生成AAB包了。

AAb包不能直接按照到手机,这个时候咱们可以使用bundletool工具来生成APKS。

官网地址:

https://developer.android.google.cn/studio/command-line/bundletool

这是官网给出的方法:

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

这是在我本机实际调试出的

java -jar "D:\Program Files\Unity\Editor\2019.4.17f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\bundletool-all-0.10.3.jar" build-apks --bundle="D:\Client_Android_AAB_depot\UnityProject\Build\Android\Makeup_Your_Story_64.aab" --output="D:\Client_Android_AAB_depot\UnityProject\Build\Android\Makeup_Your_Story_64.apks" --ks="D:\Client_Android_AAB_depot\UnityProject\user.keystore"  --ks-pass=pass:"111111"  --ks-key-alias="111111" --key-pass=pass:"111111"

APKS转成APK才能方便咱们安装。

官网给出的命令是这样的。

bundletool install-apks --apks=/MyApp/my_app.apks

其实把apks的后缀改成rar解压后能看到里面有好几个apk文件

下面是我写的自动解压脚本

copy D:\Client_Android_AAB_depot\UnityProject\Build\Android\Makeup_Your_Story_64.apks D:\Client_Android_AAB_depot\UnityProject\Build\Android\Makeup_Your_Story_64.zip

set zip="C:\Program Files\7-Zip\7z.exe"

%zip% e D:\Client_Android_AAB_depot\UnityProject\Build\Android\Makeup_Your_Story_64.zip -oD:\Client_Android_AAB_depot\UnityProject\Build\Android\

del D:\Client_Android_AAB_depot\UnityProject\Build\Android\Makeup_Your_Story_64.zip

del D:\Client_Android_AAB_depot\UnityProject\Build\Android\base-arm64_v8a.apk

del D:\Client_Android_AAB_depot\UnityProject\Build\Android\base-armeabi_v7a.apk

del D:\Client_Android_AAB_depot\UnityProject\Build\Android\base-master.apk

del D:\Client_Android_AAB_depot\UnityProject\Build\Android\toc.pb

pause

这样咱们就完成了了解AAB,使用AAB,以及怎样安装AAB的一个大概流程。

Android App Bundle 和Unity AAB BundleTools相关推荐

  1. Android App Bundle基础入门

    一.前言 重要提示:从 2021 年 8 月起,新应用需要使用 Android App Bundle 才能在 Google Play 中发布.现在,Play Feature Delivery 或 Pl ...

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

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

  3. Android App Bundle(aab)与UnsatisfiedLinkError

    一.起因 所做项目因为是在Google Play市场,并且在2019.8.1开始,必须要携带64位so库,又因为所做App涉及到C层库比较多.大概有10MB左右.所以使用了Google最新的Andro ...

  4. 将AAB(Android App Bundle)转换为APK

    Google Play 在2021年8月之后,对于新上架的APP,只接受AAB格式,不再支持上传APK.但是打包后,我们肯定还需要对正式发布的包进行测试,去Google Play上发测试版本非常麻烦. ...

  5. Android App Bundle混淆加密加壳加固保护的解决方案(过Google App上架审核)

    Android AAB简介和AAB包格式 AAB即Android App Bundle,是Google官方发布的一种新的App包格式,可以有效缩减App大小,提升用户安装和更新App的体验.在Goog ...

  6. Android App Bundle 使用

    Android App Bundle 使用 准备工作 将Play Asset Delivery 集成到您的游戏或应用代码中: 本地测试 2021.8月份起,Google 商店提交新版本必须使用AppB ...

  7. 简单聊一聊 Android App Bundle 的话题

    这一篇主要是有感而发,抽空和大家聊聊关于最近 Google Play 上传应用需要更改为 AAB 的话题,顺便说下更改为 AAB 的一些简易流程. 关于 AAB 的话题 如下图所示,最近在收到了不a少 ...

  8. Android App Bundle 自动打包原理

    Google推出Android App Bundle 已经有一段时间了. 根据Google的政策说明 ,预计2021年8月之后,新发布的应用都必须使用Android App Bundle(aab)来上 ...

  9. Android——Android app bundle插件化部署

    其实google发布app bundle已经是18年的事情了,只是一直在业务上接触不到.最近刚好打算用到爱奇艺的Qigsaw框架来做国内的模块化加载,所以打算一起学习一下. 说到模块化加载.其实本质就 ...

最新文章

  1. bs4库的prettify()方法|粉饰的意思。就是多了换行!
  2. Cruise Control
  3. SpringBoot中使用thymeleaf模板时select下拉框怎样查询数据库赋值
  4. java 概率 算法_使用概率算法优化快速排序(JAVA)
  5. 9个必知的Python操作文件/文件夹方法
  6. 蓝桥杯 n进制小数
  7. 利用OLAMI在unity游戏中加入中文语音控制(一)
  8. 带孩子们做环球旅行的读后感_阜南七小教师风采之乔娜:做孩子们成长的记录者...
  9. 软件测试报告doc,软件测试报告.doc
  10. 利用python进行数据分析—8.数据清洗与准备
  11. 《万国觉醒》之游戏战报FreeMarker模板引擎实现
  12. android格式化SD卡,获取其它程序的缓存大小,清理数据
  13. 会议OA之我的会议(排座送审)
  14. linux下weblogic新建域domian
  15. 分金问题 返回分割的最小代价 (贪心算法)
  16. 信号灯管理服务器CPU型号,正文-新华三集团-H3C
  17. 作用域、条件注解和@Import注入方式
  18. Java 之父:找Bug最浪费时间,现在不是开源的黄金时代
  19. 更新Win11后感觉有点卡顿怎么回事
  20. Kotlin Mvp 协程 Retrofit整合

热门文章

  1. HDU 6146:Pokémon GO
  2. 【职业人的自我修炼十项原则】
  3. 智慧园区运行监控中心
  4. 手机APP爬虫技巧(Fiddler+雷电模拟器进行APP抓包)
  5. 2022-2028年全球与中国救生艇行业市场前瞻与投资战略规划分析
  6. 解决Android Studio Gradle慢的方法
  7. python实现自动化登录测试
  8. 连接Wifi时自动弹出登录页面是如何做到的?
  9. matlab 小波 清浊音,matlab语音信号处理如何判别清浊音?
  10. cmd无法进入其他盘符问题解决方案