このガイドでは、ゲームのサイズを削減する方法について説明します。インストール時は、ゲームがのサイズが小さいほどダウンロードの所要時間が短縮され、データ量も少なくて済みます。どちらも、インストール コンバージョンの増加につながります。Google の調査によると、配信される APK のサイズが 6 MB 増加すると、インストール率が 1% 低下することがわかっています。多くのデベロッパーは、アセットを APK からコンテンツ配信ネットワーク(CDN)に移動しますが、CDN のホスティングと、アセット管理システムの開発、保守の両方でコストが発生します。
ゲームのサイズを削減する手順は次のとおりです。
- App Bundle や Play Asset Delivery などの最適化された配信方法を使用する。
- ゲームのベースライン サイズを決定し、その構造を理解する。
- サイズを削減できるアセットやその他のファイルを探す。
- グラフィックス テクスチャを検査し、最適化の機会を特定する。
- アセットに関する一般的な推奨事項に従う。
App Bundle や Play Asset Delivery などの最適化された配信方法を使用する
次の配信方法を検討してください。
従来のプロジェクトでは通常、公開用の APK が出力されますが、Google Play で公開するゲームは Android App Bundle を使用する必要があります。App Bundle は、各ユーザーのデバイス設定に合わせて最適化された APK を提供します。App Bundle を使用すると、平均でアプリのサイズが 20% 削減されます。
Google Play を介してゲームアセットを配信し、App Bundle(数 GB まで)のダウンロード サイズの上限 200 MB を超える場合には、Play Asset Delivery(PAD)を使用します。外部 CDN は必要ありません。PAD は 3 種類の配信方法をサポートします。それぞれを 1 つのゲームで使用できます。
- Install-time: インストール時にアセットをダウンロードします。アセットは、Opaque Binary Blob(OBB)ファイルの代わりとなるアセットパックにパッケージ化されます。
- Fast-follow: インストール後にアセットをダウンロードします。
- On-demand: 必要に応じて、ゲームがアセットのダウンロードを開始します。
PAD では、ゲームが App Bundle 形式でパッケージ化されている必要があります。PAD は、デベロッパーの CDN で使用されるデータ量を削減することもできます(まだ必要な場合)。
Google Play は Android App Bundle を使用して、個々のユーザーのデバイス設定に合わせて最適化した APK を生成、配信します。最適化された APK には、デバイスに最適な圧縮形式でフォーマットされたテクスチャ アセットのセットが 1 つ含まれています。さまざまなテクスチャ圧縮形式をサポートするように App Bundle を構成して、幅広いデバイスをサポートします。
ゲームのベースライン サイズを決定し、その構造を理解する
ゲームに慣れ、特定の最適化に必要な作業量を判断し、ゲームに追加のアセットをダウンロードするかどうかを判断する手順は次のとおりです。
- デベロッパーまたは公開 APK からの、本番(非デバッグ)ビルドを使用します。
- デベロッパーから配信されたバイナリ ファイルのサイズ、またはゲームの Play ストアページでのバイナリ ファイルのサイズ(ゲームが公開されている場合)を記録します。APK サイズについて、最も重要な要素は、ゲームを実際に実行するためにユーザーがダウンロードする必要があるデータの量です。
- ゲームをデバイスにインストールし、最初のゲームメニューまで実行します。この時点で、Android から報告されるゲームのインストール サイズを確認します([設定] > [ストレージ])。初期インストール サイズは最適化するための重要な数値であるために小さい場合がありますが、インストール後に追加のデータをダウンロードするゲームもあります。ゲームによっては、インストール後に数ギガバイトのデータをダウンロードします。
- プレイ開始後にのみデータをダウンロードするゲームもあります。ゲームを初めてプレイする一般的なユーザーに対してゲームがダウンロードする追加のデータ量を判断するには、ゲームを少しプレイする必要があります。
サイズを削減できるアセットやその他のファイルを探す
このセクションでは、APK 内のファイルのサイズを削減する方法について説明します。App Bundle エクスプローラを使用すると、デバイス固有の APK をダウンロードできます。
APK に直接パッケージ化されるファイルのサイズを削減する手順は次のとおりです。
- Android Studio APK Analyzer を使用します。Android Studio で、[File] > [Profile or debug APK] を選び、APK を選択します。
- [Assets] フォルダを選択します。ファイルごとに、未加工ファイルサイズと合計ダウンロード サイズの割合が表示されます。
[Assets] フォルダを確認して、ゲームデータの大部分が配置されている場所を特定します。容量を過剰に(全体の 1% を超えて)使用しているアセットがあるかどうかを判断します。特に次の点にご注意ください。
- 大きな画像ファイルと動画ファイル(PNG、JPEG、mp4 ファイルなど): 通常はスプラッシュ画面、背景、ロゴで使用されます。こうしたファイルはほとんどのゲームではめったに使用されず、ユーザー エクスペリエンスに影響を与えずにさらに圧縮できます。可逆圧縮 PNG ファイルは特に大きく、圧縮に適しています。
- 大きいフォント ファイル(TTF ファイルなど): 絵文字のサポートを追加すると、フォント ファイルのサイズが大幅に増加することがあります。フォント ファイルが数百 KB を超える場合は、サイズを縮小する方法を検討してください。
- 組み合わせ可能なオーディオ ファイル形式またはバージョンを複製します。
APK に複数のアプリケーション バイナリ インターフェース(ABI)が含まれている場合は、App Bundle に移動するか、複数の APK を作成します。
バイナリ共有オブジェクト(.so)ファイルのサイズを判別します。ログファイルなど、バイナリ ファイルを検査して含める必要のないものがあるかどうかを確認するには、Bloaty McBloatface ツールを使用します。バイナリ ファイルを最適化する方法の詳細については、コンパイル フラグとオプションをご覧ください。
サポートされているグラフィック形式について、Android マニフェスト ファイルを確認します。APK に複数の
<supports-gl-texture>
タグがあるかどうかを判断します。ゲームが 1 つの APK で複数の GPU の形式をサポートしている場合は、Binomial の Basis Universal の使用を検討してください。この GPU テクスチャ圧縮システムでは、GPU にすばやくコード変換できる中間形式でテクスチャ ファイルが作成されます。
グラフィックスのテクスチャを検査し、最適化の機会を特定する
このセクションでは、ゲームで使用されるグラフィックス テクスチャを最適化できるかどうかを判断するために必要なツールとメソッドについて説明します。
ゲーム内のテクスチャを調べるには、Android GPU Inspector(AGI)、RenderDoc、Snapdragon Profiler(Qualcomm Snapdragon GPU 専用)を使用します。
次の点にご注意ください。
- 小さな解像度にサイズ変更できるテクスチャ(ゲームでは小さなサイズでしかレンダリングされないものに、大きなテクスチャを使用するなど)。テクスチャのダウンサンプリングはコンピューティング コストが高くなります。
- 1 つのテクスチャ マップにまとめることができる複数の小さなテクスチャの使用。
- カラー チャンネルで使用するビット数が少ないテクスチャ。ソリッド テクスチャをいくつか含むテクスチャが適しています。色のグラデーションやシェードは、さらに高い解像度を必要とするため、適していません。
- ETC1 から ETC2 や ASTC など、優れたテクスチャ圧縮アルゴリズムを検討してください。
メモリを節約するために、ローエンド デバイスにテクスチャを読み込むときは、最上位の mipmap レベルを破棄します。これは、Unity のテクスチャ ストリーミング システムで行うことができます。
まだ実施していない場合は、サポートされているグラフィック形式について Android マニフェスト ファイルを確認してください。APK に複数の
<supports-gl-texture>
タグがあるかどうかを判断します。ゲームが 1 つの APK で複数の GPU の形式をサポートしている場合は、Binomial の Basis Universal の使用を検討してください。この GPU テクスチャ圧縮システムでは、GPU にすばやくコード変換できる中間形式でテクスチャ ファイルが作成されます。
アセットに関する一般的な推奨事項
APK のアセットに関する次の推奨事項を守ってください。
- 画像アセット、音声アセット、動画アセット(GPU テクスチャではない): アセットをさらにサイズ変更または圧縮できるかどうかを判断します。ゲームでは通常、高い圧縮率が許容されます。可逆圧縮 PNG ファイルは特に大きく、圧縮に適しています。
- 画像アセット(GPU テクスチャではない): 非可逆圧縮と可逆圧縮の両方に対応した画像圧縮形式である WEBP の使用を検討してください。不可逆 WEBP は、画像を JPG より 25%~34% 多く圧縮します。
- テクスチャ解像度の削減: 最終的に画面にレンダリングされるピクセル数よりもはるかに大きなテクスチャでは、スペースと GPU リソースの使用効率が低下します。ゲームを再ビルドせずに、テクスチャを変更し、フレーム内の外観を確認するには、AGI を使用します。
- グラフィックのテクスチャ形式の変更: チャンネルあたりのビット数が少ないテクスチャ形式を使用します。たとえば、ARGB などの 32 ビットのテクスチャ形式ではなく、RGB565 などの 16 ビットのテクスチャ形式を使用します。詳細については、次のリソースをご覧ください。
参考情報
- 最近の Android App Bundle の改善と Google Play の新規アプリのスケジュール
- Android Instant Game の APK サイズを縮小する
- GPU でデコード可能な超圧縮テクスチャ(研究論文)