第三章:Play Asset Delivery (PAD) 架构:Asset Pack类型、安装时机、资源访问路径

3.1 参数含义

Play Asset Delivery (PAD) 是 Google Play 提供的按需分发大型游戏资源的机制。本章涉及的核心参数包括:

  • Asset Pack 类型:安装时 (Install-time)、快速跟进 (Fast-follow)、按需 (On-demand)。决定资源包在何种条件下下载到设备。
  • 安装时机 (Install Timing):资源包在应用安装、启动或运行期间被下载/激活的具体时间点。
  • 资源访问路径 (Asset Access Path):游戏引擎(如 Unity、Unreal)读取 PAD 资源的运行时路径,通常通过 Play Asset Delivery Plugin 的 API 获取路径。

这三个参数直接影响游戏启动后资源加载的耗时与帧率抖动,是参数测试的核心变量。

3.2 测试条件

测试条件 说明
设备环境 Android 8.0+,已安装 Google Play 服务,网络环境 Wi-Fi(低延迟)或 4G(高延迟)
游戏版本 基于 Unity 2021.3 或 Unreal Engine 5.2,集成 Play Asset Delivery Plugin 1.4+
资源体量 每个 Pack 大小固定为 150 MB(模拟常见关卡资源)
采样环境 PerfDog / Android GPU Inspector 后台抓取帧率,游戏内无其他后台下载任务

3.3 仪器 / 工具

  • PerfDog:实时记录帧率、CPU/GPU 负载,标记 PAD 下载 / 加载事件。
  • Android GPU Inspector:采集 GPU 渲染管线耗时。
  • ADB logcat:过滤 PAD 插件日志,确认包下载时机与路径。
  • Unity Profiler / Unreal Insights:监控资源加载阶段的 CPU 突发。
  • Google Play Console – 分阶段发布功能:对不同 Asset Pack 类型进行 A/B 测试。

3.4 测量步骤

  1. 配置 Asset Pack:在 Google Play Console 上为同一 APK 配置三种 Asset Pack 类型(Install-time / Fast-follow / On-demand),每个 Pack 包含相同大小的模拟资源。
  2. 构建与上传:使用 Android App Bundle 构建,通过 Internal Testing Track 发布。
  3. 安装测试:
    • Install-time Pack:正常安装应用,记录从安装完成到首帧渲染的时长。
    • Fast-follow Pack:安装后立即启动,观察自动下载提示出现的时间点。
    • On-demand Pack:安装后手动触发下载(如点击“下载额外资源”按钮),记录触发到资源就绪的时长。
  4. 帧率记录:
    • 在每个 Pack 的下载 / 加载阶段使用 PerfDog 连续采样 60 秒。
    • 标记关键事件(下载开始、下载结束、资源解压、资源加载到内存)。
  5. 日志确认路径:通过
    adb logcat -s PlayAssetDelivery:*
    检查资源访问路径是否为 /data/app/.../base/asset_packs/<pack_name>。
关键警告: 如果 Fast-follow 包在游戏帧率密集帧(如过场动画)期间自动下载,会导致 CPU/IO 突发,引发严重掉帧。必须隔离测试窗口。

3.5 数据判断

指标 正常范围 (Install-time) 正常范围 (Fast-follow) 正常范围 (On-demand)
首帧渲染时间 (秒) ≤ 5s ≤ 7s ≤ 3s (触发后)
下载期间帧率 (fps) 不适用 (安装时无游戏运行) ≥ 45 fps (Wi-Fi), ≥ 30 fps (4G) ≥ 55 fps (触发后)
资源加载到内存耗时 (ms) ≤ 200 ms ≤ 350 ms ≤ 150 ms

判定规则:若 Fast-follow 下载期间帧率低于 30 fps,或 On-demand 资源加载导致帧率波动超过 15%,则判断为异常。

3.6 误差分析

  • 网络抖动:Wi-Fi/4G 切换或信号不稳会延长下载时间,应多次重复(至少 5 次)取中位数。
  • 设备存储性能:闪存写速度差异(eMMC vs UFS)影响解压效率,需在同一台设备上对比。
  • 后台进程干扰:系统服务(如 Google Play 更新)偶然触发 IO,需在测试前关闭所有非必要应用。
  • Play Asset Delivery Plugin 版本:不同版本的下载策略可能不同,测试需锁定插件版本号。

3.7 调参策略

  • 将大体积资源拆分为多个 On-demand Pack:避免单个 Pack 下载/解压阻塞主线程。
  • 使用 Fast-follow 但不阻塞主线程:在游戏加载完核心场景后,延迟 2-3 秒再发起 Fast-follow 下载请求。
  • 控制下载并发数:通过 AssetPackManager.getPackStates() 动态调整最大并发数量。
  • 资源预加载:在 On-demand Pack 完成下载后,分帧加载到内存,避免单帧突发 IO。
// Unity C# 伪代码:分帧加载 On-demand Pack 资源
IEnumerator LoadOnDemandPack(string packName)
{
    PlayAssetRequest request = PlayAssetDelivery.RetrieveAssetPackAsync(packName);
    while (!request.IsDone) yield return null;
    // 分 5 帧将资源加载到内存
    for (int i = 0; i < 5; i++)
    {
        // 加载 20% 的资源
        yield return null;
    }
}

3.8 验收阈值

测试场景 验收阈值
Install-time 包:首帧渲染时间 ≤ 5s
Fast-follow 包:下载期间平均帧率 ≥ 40 fps (Wi-Fi)
Fast-follow 包:下载期间最大帧率抖动 ≤ 20% 波动
On-demand 包:触发到资源就绪 ≤ 5s (40MB 以内)
所有类型:资源访问路径正确性 路径为 asset_packs/<pack_name>,无权限错误
提示: 验收阈值的设定需要结合游戏目标帧率(如 30 fps 或 60 fps)。对于 60 fps 游戏,Fast-follow 期间帧率不可低于 48 fps。
Play Asset Delivery 架构:类型、时机、路径 Install-time 安装时随APK下载 Fast-follow 安装后自动下载 On-demand 运行中按需触发 安装完成后立即可用 无额外下载延迟 应用启动后触发下载 可能阻塞首帧 运行时用户触发 可动态加载 资源访问路径 /data/app/…/base/asset_packs/<pack_name> /assets/