减少游戏大小

本指南介绍了如何减小游戏大小。游戏文件越小,安装时下载所需的时间和数据就越少。这两者都有助于提高安装转化率。Google 研究表明,提供的 APK 大小每增加 6 MB,安装率就会下降 1%。许多开发者将素材资源从 APK 移到内容分发网络 (CDN),但这会增加托管 CDN 和开发维护素材资源管理系统的成本。

要减小游戏大小,请执行以下步骤:

  1. 使用 App Bundle 和 Play Asset Delivery 等优化交付方法.
  2. 确定游戏的基准大小并了解其结构.
  3. 查找可缩小大小的素材资源及其他文件.
  4. 检查图形纹理并找出可优化的机会.
  5. 遵循素材资源通用建议

使用 Android App Bundle 和 Play Asset Delivery 等优化交付方法

请考虑以下交付方法:

  • 虽然旧版项目通常会输出 APK 以供发布,但在 Google Play 上发布的游戏应使用 Android App Bundle。App Bundle 会根据每个用户的设备配置提供优化的 APK。平均而言,App Bundle 可将应用大小减少 20%。

  • 要通过 Google Play 提供游戏素材资源,并将 App Bundle 的下载大小限制从 200MB 提高到数 GB,请使用 Play Asset Delivery (PAD)。无需外部 CDN。PAD 支持三种不同的交付方法,每种方法都可在单个游戏中使用:

    • 安装时:在安装时下载素材资源。素材资源打包在素材资源包中,素材资源包替代了 Opaque Binary Blob (OBB) 文件。
    • 快速跟随:在安装后下载素材资源。
    • 按需:游戏会根据需要启动素材资源下载。

    PAD 要求游戏使用 App Bundle 格式打包。PAD 还可以减少开发者 CDN(如果仍然需要)使用的数据量。

  • Google Play 使用 Android App Bundle 为每个用户的设备配置生成并提供优化的 APK。这些优化的 APK 包含一组纹理素材资源,其格式经过优化以适应设备压缩格式。请配置您的 App Bundle 以支持不同的纹理压缩格式,从而支持最广泛的设备。

确定游戏的基准大小并了解其结构

若要熟悉游戏、确定任何给定优化所需的工作量,以及确定游戏是否会下载额外的素材资源,请执行以下步骤:

  1. 使用开发者提供的生产(非调试)构建版本或已发布的 APK。
  2. 记录开发者提供的二进制文件大小,如果游戏已发布,则记录游戏在 Play 商店页面上显示的大小。对于 APK 大小,最重要的因素是用户运行实际游戏必须下载的数据量。
  3. 将游戏安装到设备上,并运行至初始游戏菜单。此时,检查 Android 报告的游戏安装大小(在 Settings > Storage 下)。有些游戏初始安装大小很小,这是优化的关键数字,但在安装后会下载额外数据。有些游戏在安装后会下载数 GB 的数据。
  4. 有些游戏只有在您开始玩之后才会下载数据。您应该玩一会儿游戏,以确定游戏为首次玩的用户下载了多少额外数据。

查找可缩小大小的素材资源及其他文件

本部分介绍了如何减小 APK 中文件的大小。您可以使用 App Bundle Explorer 下载特定于设备的 APK。

要减小直接打包到 APK 中的文件大小,请执行以下步骤:

  1. 使用 Android Studio APK Analyzer。在 Android Studio 中,依次选择 File > Profile or debug APK,然后选择您的 APK。
  2. 选择 Assets 文件夹。对于每个文件,系统都会列出原始文件大小和占总下载大小的百分比。
  3. 检查 Assets 文件夹,确定游戏数据的主要存放位置。确定是否存在占用空间过多(即超过总大小 1%)的素材资源。特别要注意以下几点:

    • 大型图片和视频文件(例如 PNG、JPEG 和 mp4 文件):这些文件通常用于启动画面、背景和徽标。在大多数游戏中,这些文件很少使用,并且可以在不影响用户体验的情况下进一步压缩。无损 PNG 文件特别大,是极佳的压缩候选文件。
    • 大型字体文件(例如 TTF 文件):如果您添加了表情符号支持,字体文件的大小可能会显著增加。如果字体文件大于几百 KB,请考虑如何减小其大小。
    • 可以合并的重复音频文件格式或版本。
  4. 如果 APK 中包含多个 应用二进制接口 (ABI),请改用 App Bundle 或构建多个 APK。

  5. 确定二进制共享对象 (.so) 文件的大小。要检查二进制文件以查看是否存在可能不需要包含的内容(例如日志文件),您可以使用 Bloaty McBloatface 工具。有关如何优化二进制文件的更多信息,请参阅编译标志和选项

  6. 检查 Android 清单文件,查看支持的图形格式。确定 APK 中是否存在多个 <supports-gl-texture> 标记。如果游戏在一个 APK 中支持多种 GPU 格式,请考虑使用 Binomial 的 Basis Universal。此 GPU 纹理压缩系统以中间格式创建纹理文件,可以快速转码为 GPU 格式。

检查图形纹理并找出可优化的机会

本部分介绍了确定游戏中使用的图形纹理是否可以优化的所需工具和方法。

要检查游戏中的纹理,请使用 Android GPU Inspector (AGI)、RenderDoc,或者仅适用于 Qualcomm Snapdragon GPU 的 Snapdragon Profiler

查找以下内容:

  • 可以调整大小以获得更低分辨率的纹理,例如用于游戏中只以小尺寸渲染的对象的较大纹理。下采样纹理的计算成本很高。
  • 使用可组合成单个纹理贴图的多个小型纹理。
  • 在颜色通道中使用较少位数的纹理。好的候选纹理是具有少量纯色纹理的纹理。渐变和颜色阴影需要更高的位分辨率,因此不是好的候选纹理。
  • 探索更好的纹理压缩算法,从 ETC1 到 ETC2 和 ASTC。
  • 在低端设备上加载纹理时,舍弃顶层 mipmap 以节省内存。Unity 的 纹理流式传输系统 可以实现这一点。

  • 如果您尚未检查,请查看 Android 清单文件以了解支持的图形格式。确定 APK 中是否存在多个 <supports-gl-texture> 标记。如果游戏在一个 APK 中支持多种 GPU 格式,请考虑使用 Binomial 的 Basis Universal。此 GPU 纹理压缩系统以中间格式创建纹理文件,可以快速转码为 GPU 格式。

素材资源通用建议

请遵循以下针对 APK 素材资源的建议:

  • 图片、音频和视频素材资源(非 GPU 纹理):确定素材资源是否可以进一步调整大小或压缩。对于游戏而言,更高的压缩比通常是可以接受的。无损 PNG 文件特别大,因此是极佳的压缩候选文件。
  • 图片素材资源(非 GPU 纹理):考虑使用 WEBP,这是一种支持有损和无损压缩的图片压缩格式。有损 WEBP 压缩图片的效率比 JPG 高 25% 到 34%。
  • 降低纹理分辨率:纹理远大于最终在屏幕上渲染的像素数量,会造成空间和 GPU 资源效率低下。要更改纹理并在不重新构建游戏的情况下查看其在帧中的效果,请使用 AGI
  • 更改图形纹理格式:使用每个通道使用较少位数的纹理格式。例如,使用 RGB565 等 16 位纹理格式,而不是 ARGB 等 32 位纹理格式。如需了解更多信息,请参阅以下内容:

其他资源