Version: 2021.1
言語: 日本語
Play Asset Delivery
Enabling Android symbols

開発の迅速なイテレーションのためのアプリケーションのパッチ処理

プロジェクトのサイズによっては、Android のアプリケーションのビルドにかなりの時間がかかる場合があります。開発中により高速なイテレーションを実行するために、アプリケーションパッケージを再ビルドする代わりにパッチすることを選択できます。 ビルドにパッチ処理を行う場合、 スクリプト関連のファイルのみがデバイスに送信されます。

Android の Build Settings ウィンドウ
Android の Build Settings ウィンドウ

アプリケーションにパッチを適用する

アプリケーションにパッチを行う前に、アプリケーションをビルドしてデバイスにインストールしておく必要があります。詳細は、Android アプリケーションのビルド を参照してください。

重要: アプリケーションのパッチ適用は、Chrome OS ベースのデバイスではサポートされません。

アプリケーションにパッチするには、以下を行います。

  1. スクリプトファイルを更新します。

    注意: ゲームオブジェクトにアタッチされたスクリプトのレイアウトを変更する場合 (新しい Public 変数の追加など)、Script Only Build とパッチ処理は失敗します。

  2. エディターで、File> Build Settings をクリックします。

  3. Build Type ドロップダウンから Development を選択します。

  4. IL2CPP スクリプティングバックエンドを使用している場合は、以下を行います (そうでない場合は次のステップに進みます)。

    1. Player Settings ボタンをクリックします。
    2. Inspector で Other Settings セクションを展開します。
    3. Strip Engine Code がチェックされている場合は、チェックを外します。
  5. Scripts Only Build チェックボックスをチェックします。

  6. Patch または Patch & Run をクリックします。

更新したスクリプトファイルをビルドした後、Unity は更新したファイルを Run Device フィールドで指定されたデバイスに送信します。

独自のビルドパイプラインを実装している場合は、スクリプティング API を使用して BuildOptions.BuildScriptsOnly と BuildOptions.PatchPackage オプションを BuildPipeline.BuildPlayer メソッドに渡すことで、アプリケーションをパッチ処理します。

例:

    BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions();
        buildPlayerOptions.scenes = new[] { "Assets/Scene1.unity"};
        buildPlayerOptions.target = BuildTarget.Android;

        //通常通りゲームをビルドして実行します。これは、アプリケーションを Android デバイスにインストールします。
        buildPlayerOptions.options = BuildOptions.AutoRunPlayer
        BuildPipeline.BuildPlayer(buildPlayerOptions);

        //Unity プロジェクトのスクリプトの一部を変更します
        // アプリケーションをパッチして実行します
        // (Unity はスクリプトファイルのみを再コンパイルして、必要なファイルのみを Android デバイスにプッシュします)
        buildPlayerOptions.options = BuildOptions.BuildScriptsOnly | BuildOptions.PatchPackage | BuildOptions.AutoRunPlayer;
        BuildPipeline.BuildPlayer(buildPlayerOptions);

アプリケーションのパッチ処理のしくみ

Unity は更新されたスクリプトを含むファイルをアプリケーションのキャッシュフォルダーに送信します。アプリケーションが起動すると、ファイルを読み込む前にキャッシュフォルダーをチェックします。アプリケーションが必要なファイルを見つけると、アプリケーションのデータ フォルダーの代わりにキャッシュフォルダーのファイルが読み込まれます。

Unity が送信するファイルは、使用しているスクリプティングバックエンドによって異なります。

Mono

プロジェクトのスクリプトファイル、パッケージのスクリプトファイル、または asmdef ファイルからコンパイルされたマネージアセンブリは /storage/emulated/0/Android/data/<PackageName>/cache/ScriptOnly/<UnityVersion>/mono/Managed に送信されます。

IL2CPP

  • libil2cpp.so は /data/data/<PackageName>/cache/ScriptOnly/<UnityVersion>/il2cpp に送信されます。

    注意: これは内部キャッシュです。 Android 7.0 で導入されたセキュリティ強化のため、エミュレートされたストレージから動的ライブラリをロードすることはできません。詳細は、Android 開発者 向けウェブサイトの Android 7.0 の動作の変更点 を参照してください。

  • IL2CPP リソースファイルは /storage/emulated/0/Android/data/<PackageName>/cache/ScriptOnly/<UnityVersion>/il2cpp に送信されます。

パッチファイルの消去

Android のストレージ設定を使用して、アプリケーションのキャッシュをクリアし、Script Only ビルドプロセスによってインストールされたパッチファイルを削除することができます。デバイスのキャッシュをクリアするには、設定に移動し、アプリケーションリストを開きます。通常、保存されたデータやキャッシュをクリアするオプションがあります。Android OS の実装によっては、キャッシュをクリアするオプションを見つけるために、ストレージオプションにドリルダウンする必要がある場合があります。


2018–11–13 公開ページ

Play Asset Delivery
Enabling Android symbols