# 将 Unity 集成到 Android 应用程序中

> Explains how to integrate the Unity Runtime Library into Android applications.

本页说明如何使用“Unity 用作库”(Unity as a Library) 功能将 Unity 运行时库集成到 Android 应用程序中。

使用此功能可以在应用程序中包含 Unity 支持的功能（例如 3D/2D 实时渲染、AR 体验、3D 模型交互或 2D 迷你游戏）。Unity 运行时库提供了多种控件来管理何时以及如何在应用程序中加载、激活和卸载内容。

**重要提示**：将 Unity as a Library 这一功能加入到项目中可能需要您调整[原生](/engine/6000.0/manual/scripting/compilation-and-code-reload/plug-ins/native.md)和[托管](/engine/6000.0/manual/scripting/compilation-and-code-reload/plug-ins/managed.md)插件，以便在 Android 上正常工作。对 Gradle 清单进行更改的插件需要使用[将“Unity 用作库”用于原生 iOS/Android 应用程序](https://discussions.unity.com/t/using-unity-as-a-library-in-native-ios-android-apps/744882)中概述的 Gradle 更改。

## 工作原理##how-it-works

从 Unity 构建 Gradle 项目时，无需进行任何其他操作。

Unity 生成的每个 [Android Gradle 项目](/engine/6000.0/manual/platform-specific/android/introducing/gradle-overview.md)都具有以下结构：

* **unityLibrary** 模块中的一个库部分，可以集成到其他任何 Gradle 项目中。这包含 Unity 运行时和播放器数据。
* **Launcher** 模块中的瘦启动器 (Thin Launcher) 部分，其中包含应用程序的名称及其图标。这是一个可启动 Unity 的简单 Android 应用程序。您可以将此模块替换为自己的应用程序。

要将 Unity 集成到另一个 Android Gradle 项目中，必须通过 *settings.gradle* 文件将生成的 Android Gradle 项目的 **unityLibrary** 模块包含在您的 Android Unity 项目中。

此[代码仓库](https://github.com/Unity-Technologies/uaal-example/blob/master/docs/android.md)包含示例项目和插件（演示如何将 Unity 集成到 Android 应用程序中）以及更多文档。

要控制播放器，请转发 Intent 以启动 Unity 活动并在必要时对其进行扩展。有关更多信息，请参阅有关 [Intents 和 Intent 过滤器](https://developer.android.com/guide/components/intents-filters)的 Android 开发者文档。此外，还可以使用 UnityPlayer Java API。

## IUnityPlayerLifecycleEvents##iunityplayerlifecycleevents

IUnityPlayerLifecycleEvents 提供一种与 Unity 播放器的两个重要生命周期事件进行交互的方式：

* **卸载 (Unload)** - 当 `Application.Unload` 或 `UnityPlayer.unload()` 卸载 Unity 播放器时，应用程序会调用 `IUnityPlayerLifecycleEvents.onUnityPlayerUnloaded`。这会使 Unity 播放器处于暂停状态，在该状态下它将卸载所有场景，但将其他所有内容保留在内存中。
* **退出 (Quit)** - Unity 播放器退出时，应用程序会调用 `IUnityPlayerLifecycleEvents.onUnityPlayerQuitted`。此调用之后，运行 Unity 的进程将结束。

可以将 `IUnityPlayerLifecycleEvents` 实例传递给 UnityPlayer 构造函数，或覆盖 `UnityPlayer` 和 `UnityPlayerActivity` 子类中的方法。

## 限制##limitations

Unity 不会控制运行时生命周期，因此 Unity as a Library 可能并不适用于所有可能的用例。已知限制包括：

* Unity as a Library 仅支持全屏渲染。但是，如果您是 Unity Industry 客户，限制和功能可能会有所不同。
* 您不能加载或集成多个 Unity 运行时实例。
* 您可能需要调整第三方插件（[原生](/engine/6000.0/manual/scripting/compilation-and-code-reload/plug-ins/native.md)和[托管](/engine/6000.0/manual/scripting/compilation-and-code-reload/plug-ins/managed.md)插件）才能使用 Unity 运行时。
* Unity as a Library 与 [Xamarin 应用平台](https://dotnet.microsoft.com/en-us/apps/xamarin)不兼容。
* 无法将 Unity 运行时库作为动态模块与 [Play 功能交付](https://developer.android.com/guide/playcore/feature-delivery)集成。

## 其他资源##additional-resources

* [将“Unity 用作库”用于其他应用程序](/engine/6000.0/manual/platform-specific/cross-platform-features/unityasa-library.md)
