详解 Android Studio 中集成 Play Asset Delivery(PAD)实现 AAB 资源优化与谷歌上传

在 Android 应用开发中,当我们使用 Android Studio 导出 AAB(Android App Bundle)格式文件上传至谷歌 Play 商店时,常会遇到 base 文件夹体积过大的问题。这一问题并非由 AAB 文件整体大小导致,而是 base 文件夹作为基础 APK 的核心组成部分,若其体积超出 150M 限制,会影响应用的分发与用户体验。谷歌推出的Play Asset Delivery(PAD) 资源分发方案,能通过将 base 文件夹中的资源拆分到其他 module 作为 install-time 资源包,有效解决这一痛点。本文将从 PAD 核心概念、集成步骤、关键配置等方面,为开发者提供一份完整的实操指南。

一、Play Asset Delivery(PAD)核心概念解析

Play Asset Delivery 是谷歌为 AAB 格式应用设计的资源分发机制,支持三种资源包分发模式,不同模式对应不同的资源加载时机与应用大小计算规则,开发者可根据资源使用场景灵活选择。

1. 三种核心分发模式

  1. install-time(安装时)资源包:在用户安装应用的同时完成分发,以拆分 APK(APK 集的一部分)形式存在,也被称为 “预先” 资源包。应用启动后可立即使用这类资源,但会增加谷歌 Play 商店上显示的应用大小,且用户无法修改或删除该资源包。例如,应用启动必须依赖的核心图片、基础配置文件等,适合采用此模式分发。
  2. fast-follow(快速跟进)资源包:用户安装应用后,无需打开应用便会自动开始下载。下载过程中用户可正常进入应用,且该资源包不会增加 Play 商店显示的应用大小。谷歌 Play 商店会以归档文件形式提供此类资源包,下载后在应用内部存储空间展开,应用需通过 PAD 库查询资源包位置,不可假定文件固定路径(可能被用户删除或 PAD 库移动),且建议视为只读文件(保障资源包补丁完整性)。例如,应用首页非即时加载的推荐内容资源,可采用此模式。
  3. on-demand(按需)资源包:仅在应用运行过程中,根据用户操作或功能需求才触发下载。与 fast-follow 模式类似,其以归档文件形式提供,不增加应用在商店的显示大小,且需通过 PAD 库管理资源路径。特别注意,在免安装应用中使用 PAD 时,按需模式是唯一受支持的分发模式。例如,游戏中的关卡地图、应用中的特定功能模块资源,适合按需下载。

2. 为何需要 PAD?——base 文件夹体积问题

AAB 格式中,base 文件夹作为基础 APK 的载体,若其体积过大(超出 150M 限制),会导致应用初始安装包体积超标,影响用户下载意愿。需明确的是,这一限制针对的是 base 文件夹大小,而非 AAB 文件整体大小。通过 PAD 将 base 文件夹中的非核心资源拆分到独立的 install-time 资源包中,可有效控制 base 文件夹体积,满足谷歌 Play 商店的分发要求。

二、Android Studio 集成 PAD 的完整步骤

以下以实际项目(示例项目名:Flower2)为例,详细说明从创建 module 到配置 PAD 的全流程,确保资源拆分与分发功能正常实现。

1. 步骤 1:新建资源包 Module

首先需为拆分的资源创建独立的 Android Library 类型 Module,作为 install-time 资源包的载体:

  1. 在 Android Studio 中,右键点击当前项目工程,选择 “New”→“Module”;
  2. 在 “Create New Module” 界面中,选择 “Android Library” 模板(非 Android Native Library);
  3. 配置 Module 基础信息:
    • Module name:建议命名为install_time_asset_pack(便于识别资源包类型);
    • Package name:自定义包名(示例:com.example.installtimeassetpack);
    • Minimum SDK:选择 API 24(Android 7.0)及以上版本,确保 PAD 库兼容性;
    • Language:选择 Java 或 Kotlin(本文以 Java 为例);
  4. 点击 “Finish”,完成 Module 创建。
    在这里插入图片描述
    在这里插入图片描述

2. 步骤 2:配置资源包 Module 的 build.gradle

新建 Module 后,需在其 build.gradle 文件中添加 PAD 相关配置,声明资源包属性:

  1. 打开install_time_asset_pack模块下的build.gradle(Module 级别)
  2. 在android闭包中添加资源包类型声明,明确其为 install-time 资源包:
android {
    // 其他默认配置(compileSdkVersion、buildToolsVersion等)
    assetPack {
        // 声明资源包类型为install-time
        deliveryType = "install-time"
        // 资源包版本(可选,用于资源更新管理)
        version = 1
    }
}
  1. 点击 “Sync Now”,同步 Gradle 配置,确保无语法错误。
    在这里插入图片描述

3. 步骤 3:配置项目 settings.gradle—— 引用资源包 Module

需在项目根目录的 settings.gradle 中添加资源包 Module 的引用,避免打包时遗漏资源,导致 AAB 体积异常减小(丢资源):

  1. 打开项目根目录下的settings.gradle文件;
  2. 在include语句中添加资源包 Module 名称,确保所有模块被项目识别:
// 原有模块引用(示例:app、libcocos、libservice)
include ':app', ':libcocos', ':libservice', ':install_time_asset_pack'
// 若模块路径非默认,需指定projectDir(可选,根据项目结构调整)
// 示例:project(':install_time_asset_pack').projectDir = new File('path/to/install_time_asset_pack')
  1. 同步 Gradle 配置,确认模块引用成功。
    在这里插入图片描述

4. 步骤 4:配置主项目 build.gradle—— 集成 PAD 库与声明资源包

主项目(通常为 app 模块,示例中为:Flower2模块)的 build.gradle 需完成两项核心配置:引入 PAD 库依赖、声明资源包关联。

  1. 引入 PAD 库依赖:
    在主项目build.gradle(Module 级别)的dependencies闭包中,添加谷歌 Play Core 库(包含 PAD 核心功能):
dependencies {
    // 其他依赖(如第三方库、项目内部模块)
    // PAD资源分发核心库(版本示例:1.10.0,可根据最新版本更新)
    implementation 'com.google.android.play:core:1.10.0'
}

在这里插入图片描述
2. 声明关联的资源包:
在主项目build.gradle的android闭包中,通过assetPacks属性指定关联的资源包 Module:

android {
    // 其他配置(namespace、compileSdkVersion等)
    // 声明关联的PAD资源包(与资源包Module名称一致)
    assetPacks = [":install_time_asset_pack"]
}

在这里插入图片描述
3. 同步 Gradle 配置,确保依赖与资源包关联生效。

5. 步骤 5:迁移资源至 install-time 资源包

将主项目 base 文件夹中需拆分的资源(如 remote 目录下的文件、大型图片、音频等)迁移至资源包 Module 的 assets 目录:

  1. 若install_time_asset_pack模块的src/main目录下无assets文件夹,手动创建(路径:install_time_asset_pack/src/main/assets);
  2. 从主项目(示例:Flower2模块)的assets/remote目录中,复制所有需拆分的资源文件(或整个 remote 目录),粘贴到install_time_asset_pack模块的assets目录下;
  3. 确认资源迁移完整,避免遗漏关键文件导致应用运行异常。

6. 步骤 6:配置 AndroidX 支持(可选但推荐)

若项目尚未启用 AndroidX,需在gradle.properties中添加配置,确保 PAD 库与项目兼容性:

  1. 打开项目根目录下的gradle.properties文件;
  2. 添加以下两行配置,启用 AndroidX 并自动迁移支持库:
android.useAndroidX=true
android.enableJetifier=true
  1. 同步 Gradle 配置,完成 AndroidX 环境配置。

7. 步骤 7:测试与验证

资源拆分与配置完成后,需通过以下方式验证 PAD 集成效果:

  1. 生成 AAB 文件:通过 Android Studio 的 “Build”→“Generate Signed Bundle / APK”,选择 “AAB”,按照提示生成签名后的 AAB 文件;
  2. 检查 AAB 结构:解压生成的 AAB 文件,查看base文件夹体积是否控制在 150M 以内,同时确认install_time_asset_pack相关资源包是否存在;
  3. 本地测试:将 AAB 文件通过 “bundletool” 工具转换为 APK 集,安装到测试设备,验证应用启动时能否正常加载 install-time 资源,按需资源能否触发下载。
    在这里插入图片描述

三、关键注意事项与常见问题解决

在 PAD 集成过程中,开发者可能遇到资源丢失、Gradle 同步失败、资源加载异常等问题,以下为核心注意事项与解决方案:

1. 避免资源丢失:确保 Module 引用正确

若 settings.gradle 中未正确引用install_time_asset_pack模块,会导致打包时资源包未被纳入 AAB,表现为 AAB 体积突然大幅减小(丢资源)。需严格按照步骤 3 配置include语句,确保模块路径与名称正确。

2. 资源路径管理:不可硬编码资源位置

对于 fast-follow 和 on-demand 模式的资源包,谷歌 Play 商店会以归档文件形式提供,下载后在应用内部存储空间展开,路径可能因用户操作或 PAD 库优化而变化。应用不可假定资源文件的固定路径,必须通过 Play Asset Delivery 库提供的 API(如AssetPackManager)查询资源位置,避免因路径错误导致资源加载失败。

3. 资源包读写权限:建议视为只读

尽管 fast-follow 和 on-demand 资源包的文件可被应用写入,但谷歌官方建议将其视为只读文件。原因是资源包补丁更新依赖文件完整性,写入操作可能破坏文件结构,导致后续补丁无法正常应用。

4. 免安装应用限制:仅支持 on-demand 模式

若开发的是免安装应用(Instant App),需注意 PAD 仅支持 on-demand 资源分发模式,不可使用 install-time 或 fast-follow 模式,否则会导致免安装功能异常。

四、安装前后显示的安装包大小

当使用 Play Asset Delivery (PAD) 的安装时分发(Install-time) 模式时,资产包会与应用的基础 APK 一起安装,因此会直接影响用户看到的安装包大小和最终安装后的占用空间。以下是具体的大小对比分析:

1. 安装包(App Bundle 大小)

  • 显示给用户的 “安装包大小”
    Google Play 会根据用户设备配置(如屏幕分辨率、CPU 架构)生成优化后的 APK 集合(称为 “拆分 APK”)。此时,安装时分发的资产包会被计入用户看到的 “下载大小” 中。例如:
    • 应用基础代码(不包含资产):10MB
    • 安装时资产包:50MB
    • 用户看到的安装包大小≈60MB(实际会因设备适配略有差异)
  • 开发者上传的 App Bundle 大小
    包含所有设备版本的资产(如多分辨率图片、多架构资源),因此会比用户实际下载的大。例如上述例子中,开发者上传的 AAB 可能包含 100MB 资产(覆盖所有设备),但用户仅下载适合自己设备的 50MB 资产。

2. 安装后占用空间

  • 安装后总大小
    安装完成后,应用占用的存储空间 = 基础代码大小 + 安装时资产包大小 + 应用运行产生的缓存 / 数据。沿用上例:
    • 基础代码安装后:15MB(APK 解压后略增大)
    • 安装时资产包:50MB(完整保留)
    • 初始总占用≈65MB(未计入后续用户数据)
  • 与安装包大小的关系:
    安装后的大小通常略大于用户看到的 “下载大小”(因 APK 解压、优化等操作),但安装时分发的资产包大小会 1:1 反映在最终占用空间中(因为它们会被完整解压并存储)。

3. 关键对比总结

维度安装时分发(Install-time)的表现
用户看到的下载大小包含基础代码 + 安装时资产包(针对设备优化后的大小)
安装后占用空间略大于下载大小(基础代码解压 + 完整保留的安装时资产包)
与其他模式的差异比 Fast-follow/On-demand 模式的初始下载和安装后占用更大
适用场景必须随应用启动的核心资源(如启动图、基础配置文件)

4. 与其他分发模式的大小对比示例

假设应用基础代码 10MB,资产包 50MB:

分发模式用户看到的下载大小安装后初始占用资产下载时机
安装时分发~60MB~65MB与应用同时下载安装
快速跟进分发~10MB~65MB应用安装后自动下载
按需分发~10MB~15MB用户触发特定功能时下载

可见,安装时分发会最大化初始下载大小和安装后占用,但能确保资源在应用启动时即可用,适合核心必备资源。如果想减小初始安装包,应优先考虑其他两种分发模式。

五、参考资料

  1. 谷歌官方文档:Play Asset Delivery 指南Play Asset Delivery Java 集成文档
    通过本文的步骤,开发者可在 Android Studio 中顺利集成 Play Asset Delivery,解决 AAB base 文件夹体积过大的问题,优化应用在谷歌 Play 商店的分发效率。在实际开发中,需根据资源的使用场景合理选择分发模式,同时严格遵循谷歌官方的配置规范,确保资源加载稳定、应用运行流畅。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值