# アプリケーションへのパッチ適用

> Perform an application patch, rather than a full build, to increase iteration speed.

Android 向けアプリケーションのビルドには、かなりの時間を要する場合があります。開発中のイテレーションを迅速に行うために、アプリケーションパッケージをリビルドする代わりにパッチを適用することができます。アプリケーションパッケージにパッチを適用すると、前回のパッチ以降に変更が加えられたファイルのみが処理され、接続された Android デバイスに送信されます。

## アプリケーションへのパッチ適用方法##patching-an-application

アプリケーションへのパッチの適用は、Unity エディターで行えます。独自のビルドパイプラインを実装する場合は、スクリプティング API を使用して行うことができます。

アプリケーションへの初回のパッチ適用時には、Unity がデバイス上にパッチ適用環境を設定します。このため、初回のパッチには、将来のパッチよりも長い時間を要します。

### エディターから適用する##from-the-editor

Unity エディターからアプリケーションにパッチを適用する場合は、以下の手順に従ってください。

1. Build Settings ウィンドウを開きます (メニュー: **File** > **Build Settings**)。
2. **Platform** リストから **Android** プラットフォームを選択します。
3. **Development Build** を有効にします。
4. **Patch** を選択するか、Unity がパッチのビルドを終了した後にパッチを実行する場合は **Patch And Run** を選択します。


**Android Build Settings ウィンドウ。:**
![](/api/media?file=/engine/6000.0/media/images/android-app-patching.png)

### スクリプティング API を使用して適用する##using-the-scripting-api

独自のビルドパイプラインを実装する場合は、スクリプティング API を使用してアプリケーションにパッチを適用できます。これを行うには、[BuildOptions.BuildScriptsOnly](/engine/6000.0/script-reference/unity-editor/build-options/build-scripts-only.md) オプションと [BuildOptions.PatchPackage](/engine/6000.0/script-reference/unity-editor/build-options/patch-package.md) オプションを [BuildPipeline.BuildPlayer](/engine/6000.0/script-reference/unity-editor/build-pipeline/build-player.md) メソッドに渡します。

例:

```c#
BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions();
buildPlayerOptions.scenes = new[] { "Assets/Scene1.unity"};
buildPlayerOptions.target = BuildTarget.Android;
// Use Patch & Run for all builds for optimal turn-around times.
// (In prior versions, an initial regular Build & Run was necessary.)
buildPlayerOptions.options = BuildOptions.PatchPackage | BuildOptions.AutoRunPlayer | BuildOptions.Development;
BuildPipeline.BuildPlayer(buildPlayerOptions);
```

## アプリケーションへのパッチ適用の仕組み##how-application-patching-works

アプリケーションへのパッチ適用時に、Unity は以下を実行します。

* すべてのコンパイル済み Java ソースを含んだ最小限の APK を作成します。
* 前回のパッチ以降に変更されたファイルを取得し、アプリケーションのキャッシュフォルダー内のディレクトリ `/storage/emulated/0/Android/data/<PackageName>/pram-shadow-files/` に格納します。
* ネイティブライブラリファイル ([Il2cpp](/engine/6000.0/manual/scripting/compilation-and-code-reload/backends/il2cpp.md) を使用してコンパイルされたスクリプトを含む) をアプリケーションのデータディレクトリ `/data/data/<PackageName>/pram-shadow-files/lib/` に格納します。

アプリケーションは、起動時に、APK 内にマーカーファイルがあるかどうかをチェックします。マーカーが存在する場合、アプリケーションはファイルの読み込みを `pram-shadow-files` ディレクトリにリダイレクトします。

**Build & Run** ではパッチファイルは一切消去されません。代わりに APK のインストールが置き換えられます。これにより `pram-shadow-files` ディレクトリへのリダイレクトが無効になります。これは、後続のパッチビルドが、変更されていないファイルを再使用できることを表します。

## パッチファイルの消去##clearing-patch-files

アプリケーションのキャッシュの消去は Android のストレージ設定を使用して行えます。キャッシュを消去すると、アプリケーションのパッチのビルドプロセスでインストールされたパッチファイルが削除されます。

アプリケーションのキャッシュを消去する手順は各 Android デバイスで異なります。使用しているデバイスでの手順は、以下の方法で確認してください。

1. [デバイスメーカーのヘルプ](https://support.google.com/android/answer/3094742)を参照します。
2. 使用しているデバイスのメーカーを確認し、メーカーのサポートウェブサイトへのリンクを辿ってください。
3. サポートウェブサイトで、アプリケーションのキャッシュを消去する手順を検索してください。
