# 应用程序补丁

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

为 Android 构建应用程序可能需要较长时间。为了在开发过程中加快迭代速度，您可以选择为应用程序包打补丁，而不是重新构建整个应用程序。在打补丁时，Unity 仅处理自上次补丁以来修改过的文件，并将它们发送到连接的 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构建设置窗口。:**
![](/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. 在支持网站上搜索清除应用程序缓存的步骤。
