本指南介绍如何减小游戏的大小。安装后,较小的游戏需要更少的时间下载和更少的数据。这两者都会导致更高的安装转化率。 Google 研究 表明,发布的 APK 大小每增加 6 MB,安装率就会下降 1%。许多开发者将资源从 APK 中移到内容交付网络 (CDN),但这样做会产生成本,包括 CDN 的托管成本以及开发和维护资产管理系统的成本。
要减小游戏的大小,请执行以下步骤
- 使用优化的交付方法,例如应用捆绑包和 Play Asset Delivery.
- 确定游戏的基线大小并了解其结构.
- 搜索可以减小大小的资源和其他文件.
- 检查图形纹理并确定优化机会.
- 按照 资源的一般建议。
使用优化的交付方法,例如 Android 应用捆绑包和 Play Asset Delivery
考虑以下交付方法
虽然传统项目通常会输出一个 APK 用于发布,但在 Google Play 上发布的游戏应使用 Android 应用捆绑包。应用捆绑包会交付针对每个用户设备配置量身定制的优化 APK。平均而言,应用捆绑包可以将应用大小减小 20%。
要通过 Google Play 提供游戏资源并超过应用捆绑包的 200 MB 下载大小限制(最多可达多个 GB),请使用 Play Asset Delivery (PAD)。无需外部 CDN。PAD 支持三种不同的交付方法,每种方法都可以在单个游戏中使用
- 安装时:在安装时下载资源。资源打包在资源包中,这些资源包取代了不透明二进制块 (OBB) 文件。
- 快速跟随:在安装后下载资源。
- 按需:游戏根据需要启动资源下载。
PAD 要求游戏使用应用捆绑包格式打包。PAD 还可以减少开发者 CDN(如果仍然需要)使用的流量量。
Google Play 使用 Android 应用捆绑包为每个用户的设备配置生成和提供优化的 APK。这些优化的 APK 包含一组针对设备的最佳压缩格式格式化的纹理资源。配置您的应用捆绑包以支持不同的 纹理压缩格式,以支持最广泛的设备范围。
确定游戏的基线大小并了解其结构
为了熟悉游戏、确定任何优化所需的工作量以及确定游戏是否下载了其他资源,请执行以下步骤
- 使用开发人员提供的生产(非调试)版本或已发布的 APK。
- 记录二进制文件的大小,无论是开发人员提供的,还是如果游戏已发布,则在游戏的 Play 商店页面上。对于 APK 大小,最重要的因素是用户必须下载多少数据才能运行实际游戏。
- 在设备上安装游戏并运行至初始游戏菜单。此时,检查 Android 报告的游戏安装大小(在**设置 > 存储**下)。某些游戏具有较小的初始安装大小,因为这是要优化的关键数字,但在安装后会下载其他数据。有些游戏在安装后会下载数 GB 的数据。
- 有些游戏仅在您开始玩游戏后才会下载数据。您应该玩游戏一段时间以确定游戏在首次玩游戏的典型用户为其下载了多少其他数据。
搜索可以减小大小的资源和其他文件
本部分介绍如何减小 APK 中文件的大小。您可以使用 应用捆绑包资源管理器 下载特定于设备的 APK。
要减小直接打包到 APK 中的文件的大小,请执行以下步骤
- 使用 Android Studio 的 APK 分析器。在 Android Studio 中,选择**文件 > 分析或调试 APK** 并选择您的 APK。
- 选择**资源**文件夹。对于每个文件,都会列出原始文件大小和总下载大小的百分比。
查看**资源**文件夹并确定游戏数据的最大部分位于何处。确定是否存在任何占用过大空间的资源(即超过总量的 1%)。特别是,请查找以下内容
- 大型图像和视频文件(例如 PNG、JPEG 和 mp4 文件):这些文件通常用于启动画面、背景和徽标。这些文件很少在大多数游戏中使用,并且可以在不影响用户体验的情况下进一步压缩。无损 PNG 文件特别大,非常适合压缩。
- 大型字体文件(例如 TTF 文件):如果您添加了表情符号支持,它会显着增加字体文件的大小。如果字体文件大于几百 KB,请考虑减小字体文件大小的方法。
- 您可以组合的重复音频文件格式或版本。
确定二进制共享对象 (.so) 文件的大小。要检查二进制文件以查看是否包含不需要包含的内容(例如日志文件),可以使用 Bloaty McBloatface 工具。有关如何优化二进制文件的更多信息,请参阅 编译标志和选项。
查看 Android 清单文件以获取支持的图形格式。确定 APK 中是否存在多个
<supports-gl-texture>
标签。如果游戏在一个 APK 中支持多个 GPU 的格式,请考虑使用 Binomial 的 Basis Universal。此 GPU 纹理压缩系统以中间格式创建纹理文件,可以快速转码为 GPU。
检查图形纹理并确定优化机会
本部分介绍确定游戏中使用的图形纹理是否可以优化的工具和方法。
要检查游戏中的纹理,请使用 Android GPU Inspector (AGI)、RenderDoc 或仅适用于高通骁龙 GPU 的 骁龙分析器。
寻找以下内容
- 可以调整为更小分辨率的纹理,例如仅在游戏中以较小尺寸渲染的大纹理。纹理降采样在计算上很昂贵。
- 使用多个可以组合成单个纹理贴图的小纹理。
- 使用更少颜色通道位数的纹理。 适用于具有少量、实心纹理的纹理。 渐变和色调需要更高的分辨率位数,因此不适合。
- 探索更好的纹理压缩算法,从 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。
- 更改图形的纹理格式:使用每个通道使用更少位数的纹理格式。 例如,使用 16 位纹理格式,例如 RGB565,而不是 32 位纹理格式,例如 ARGB。 有关更多信息,请参阅以下内容