モバイル ストアフロントでは、特にモバイル回線のデータ通信経由でのゲームの配信時に、デバイスに送信可能なデータ量が制限されます。多数のストアでは、APK や OBB のサイズに対して必要な制限を課しています。このため、モバイル アプリケーションのサイズをできるだけ削減することをお勧めします。Google Play Asset Delivery および ChunkDownloader などのコンテンツ配信システムでは、アセットとバイナリを分けることで、主要な実行可能ファイルのサイズを減らすことができますが、バイナリ サイズの最適化にも役立ちます。
このページでは、Android プロジェクトのバイナリの最適化に使用できる Unreal Engine (UE) ツールについて説明します。
UE4 からの変更点
UE5 では、デッド コード削除、同一コードの折りたたみを有効にする更新済みコンパイラとリンカのフラグを備えています。一部の UE4 コードは、UE5 でコード膨張を減らすように書き直されています。これによって、コードが大幅に削減されました。これらの変更はデフォルトで有効になっており、ユーザーは操作を行う必要はありません。
パフォーマンスの最適化
さらに高度なバイナリの最適化が特定の Android SDK バージョンでのみ使用できるようになりました。これは手動で有効にする必要があります。[Project Settings (プロジェクト設定)] > [Platforms (プラットフォーム)] > [Android] で最低限の SDK バージョンを変更することも、次の *Engine.ini
ファイルで変更することもできます。
[/Script/AndroidRuntimeSettings.AndroidRuntimeSettings]
MinSDKVersion=23
高度な最適化機能を有効にするには、「*AndroidEngine.ini
」ファイルで次の設定を追加します。
[/Script/AndroidRuntimeSettings.AndroidRuntimeSettings]
bEnableAdvancedBinaryCompression = true
その後、プロジェクトをパッケージ化したときに、SDK バージョンに使用可能な最適化が適用されます。最適化の概要は、次のとおりです。
Android SDK 23 以降の場合
次の最適化は、プロジェクトの最低限の Android SDK バージョンが 23 の場合に使用可能です。
GNU Hash と起動時間
SDK 23 以降のプロジェクトでは、以前の形式の代わりに、GNU Hash ELF セクションを使用します。これにより、パフォーマンスが向上し、起動時間が短縮されました。
APS リロケーション テーブル圧縮
さらに、プロジェクトで Android 固有の圧縮形式である APS リロケーション テーブル圧縮のメリットが得られます。当社のテストでは、この形式を使用して、サイズが 62 MB のリロケーション テーブルが約 8 MB に削減されました。
.so バイナリのための APK 圧縮と直接ロード
最低限の SDK バージョンを 23 以降に設定すると、Android OS では .so
バイナリをアプリケーションの APK から直接ロードできます。解凍して、圧縮された APK から個別にデバイス上にインストールする必要がありません。
Unreal Engine ではデフォルトで APK 圧縮を実行しますが、「*Engine.ini
」ファイルにある次のコンフィグ変数でこれを無効にすることができます。
[/Script/AndroidRuntimeSettings.AndroidRuntimeSettings]
bExtractNativeLibs = false
bExtractNativeLibs を false に設定すると、アプリケーションでは .so
バイナリを直接ロードし、圧縮することはありません。APK に Google Play ストアの 150 MB の携帯電話データ制限が課される場合、この設定を無効にすることをお勧めします。これは、APK では Google Play ストアのオンザフライ圧縮のファイル サイズの方が zip 圧縮より小さくなり、アプリケーションで発生する携帯電話トラフィックが削減されるためです。
bExtractNativeLibs を有効にしたままにすると、より小さな APK が生成されますが、OS はこれを解凍して .so
バイナリを個別にインストールするため、実際にはより多くのディスク領域が消費されます。ただし、これは Google Play ストア以外のストアでお勧めします。
Android SDK 28 以降の場合
次の最適化は、プロジェクトの最低限の Android SDK バージョンが 28 の場合に使用可能です。
RELR リロケーション テーブル圧縮
少なくとも SDK バージョン 28 以降を使用するプロジェクトでは、APS よりもさらに効率的な RELR リロケーション テーブル圧縮のメリットを活用できます。たとえば、RELR を使用すると、62 MB のリロケーション テーブルはおよそ 600 KB になり、容量が 2 桁分削減されます。RELR を使用すると、APS よりパフォーマンスが向上します。