Gradle 是一种用于 Android 的构建系统,能够自动化许多构建流程并预防常见的构建错误。Unity 在所有 Android 构建中都使用__ Gradle__。您可以在 Unity 中直接构建输出包 (.apk、.aab),也可以从 Unity 导出 Gradle 项目,然后使用外部工具(如 Android Studio)进行构建。
如需更多信息,请参考以下资源:
下表展示了 Gradle 版本与 Unity 版本之间的兼容性。
| Unity 版本 | Gradle 版本 | Android Gradle 插件版本 |
|---|---|---|
| 6000.0 | 8.4 | 8.3.0 |
如需了解其他 Unity 版本的 Gradle 和 Android Gradle 插件版本,请参考 2022.3 和 2021.3
如果您需要使用自定义的 Gradle 或 Android Gradle 插件版本,请务必了解 Gradle 和 Android Gradle 插件之间的版本兼容性。相关详细信息,请参阅更新 Gradle。
Gradle 项目文件可配置应用程序的不同方面,例如要包含哪些模块以及如何构建这些模块。
下表列出了 Unity 项目中常见的 Gradle 文件及其用途:
| Gradle 项目文件 | 目的 |
|---|---|
| 主清单文件 (Custom Main Manifest) | 包含有关 Android 应用程序的重要元数据。有关主/Unity 库清单的职责,请参考 Unity 库清单。 |
| Unity 启动器清单 (Unity Launcher Manifest) | 包含有关 Android 应用程序启动器的重要元数据。有关 Unity 启动器清单的职责,请参考 Unity 启动器清单。 |
| 主 Gradle 文件 (Main Gradle) | 包含如何将 Android 应用程序构建为库的信息。 |
| 启动器 Gradle 文件 (Launcher Gradle) | 包含如何构建 Android 应用程序的指令。 |
| 基础 Gradle 文件 (Base Gradle) | 包含在所有其他模板和 Gradle 项目之间共享的配置。 |
| Gradle 属性文件 (Gradle Properties) | 包含 Gradle 构建环境的配置设置,例如:Java 虚拟机 (JVM)内存配置、允许 Gradle 使用多个 JVM 进行构建的属性、选择压缩工具的属性以及在构建应用包时不压缩原生库的属性。 |
| Gradle 设置文件 (Gradle Settings) | 包含工件代码仓库的声明,用于解析应用程序所需的外部依赖关系。 |
| Proguard 配置文件 | 包含代码压缩过程的配置设置。如果压缩过程中移除了某些需要保留的 Java 代码,请在此文件中添加规则以保留这些代码。 |
当您将 Unity 项目导出为 Gradle 项目时,Unity 会创建一个包含两个模块的 Gradle 项目:
| File | 描述 |
|---|---|
launcher |
包含启动器模块及其所有相关内容的目录。 |
src
|
标准的 Android Gradle 项目目录,其中包含启动器模块的源代码和资源。Unity 会将源代码和资源放在 main 子目录中。 |
main
|
标准的 Android Gradle 项目目录,其中包含启动器模块的源代码和资源。Unity 仅支持主源集。有关源集的更多信息,请参阅创建源集。 |
res
|
标准 Android Gradle 项目目录,其中包含要包含在最终应用程序中的资源。资源包括应用程序图标、应用程序在运行时访问的文本以及应用程序样式描述。 要指定此目录中的资源,请在 Android Player Settings 中设置应用程序图标和项目名称。 |
AndroidManifest.xml
|
Unity 会将该标准的 Android Gradle 项目文件合并到最终的 Android 应用清单中。该文件包含与启动器模块相关的设置。 重要说明:如果多个清单文件为同一设置指定了不同的值,则清单合并过程会失败,需要手动修复。您可以为清单合并指定规则以自动解决冲突。有关如何执行此操作的信息,请参阅管理清单文件。 有关如何影响此文件内容的信息,请参阅修改 Gradle 项目文件。 |
build.gradle
|
标准的 Gradle 项目文件 build.gradle,描述了如何构建启动器模块,并包含要在构建中包含的依赖项列表。在 Unity 中,启动器模块依赖于 unityLibrary 模块,这意味着 unityLibrary 将在构建启动器模块时一起构建,并包含在最终的构建结果中。 要修改该文件内容,请提供自定义的 Launcher Gradle 模板。 |
setupSymbols.gradle
|
特定于 Unity 的文件,包含用于将调试符号文件嵌入应用包并创建旧版 .so 扩展名符号文件的构建脚本。 |
shared |
包含适用于项目中多个模块的通用配置信息的目录。 |
keepUnitySymbols.gradle
|
特定于 Unity 的文件,其中包含一个脚本,用于在运行时二进制文件中存储调试元数据,用于解析堆栈跟踪。 |
unityLibrary |
包含 unityLibrary 模块及其所有相关内容的目录。 |
libs
|
一个通用的 Android Gradle 项目目录,用于存储 UnityLibrary 模块的 Android Archive (.aar) 和 Java Archive (.jar) 插件。 对于导出的 Unity 项目,这包含 unity-classes.jar 以及 Unity 项目中的所有.jar 和.aar 插件。注意:此目录不包含 Android Library Projects 插件。相反,Unity 将这些组件作为独立模块复制到 Gradle 项目中。 |
unity-classes.jar
|
特定于 Unity 的 Java 插件,包含 Unity 引擎所使用的 Java 代码。 |
src
|
标准的 Android Gradle 项目目录,其中包含 unityLibrary 模块的源代码和资源。Unity 会将源代码和资源放在 main 子目录中。 |
main
|
标准的 Android Gradle 项目目录,其中包含 unityLibrary 模块的源代码和资源。Unity 仅支持主源集。有关源集的更多信息,请参阅创建源集。 |
assets
|
包含项目资源的标准 Android Gradle 目录。Unity 将 Unity 项目的资源放在 bin 子目录中。 |
bin
|
标准的 Android Gradle 项目目录,Unity 会将所有 Unity 项目的资源添加到该目录中。 |
java
|
标准的 Android Gradle 项目目录,包含 unityLibrary 模块的未编译 Java 源文件。Unity 仅使用此目录来存储 UnityPlayerActivity 源文件。有关如何扩展 UnityPlayerActivity 的更多信息,请参阅扩展 UnityPlayerActivity Java 代码。 |
jniLibs
|
标准 Android Gradle 项目目录,其中包含 unityLibrary 模块所使用的本机代码库。Unity 会将 libil2cpp、 libmain 和 libunity Unity 引擎库放在此目录中。Unity 还会将任何原生 (C++) 插件放置于此。 |
jniStaticLibs
|
标准 Android 项目目录,其中包含 unityLibrary 模块用于创建 libil2cpp.so 的 baselib.a 库。 |
res
|
标准 Android Gradle 项目目录,其中包含要包含在最终应用程序中的资源。对于导出的 Unity 项目,unityLibrary 模块的 res 目录仅包含 unityLibrary 模块使用的样式描述。 |
AndroidManifest.xml
|
Unity 会将该标准的 Android Gradle 项目文件合并到最终的 Android 应用清单中。该文件包含 unityLibrary 模块的相关设置。 要修改此文件内容,请提供自定义的自定义主清单。 |
symbols
|
如果您选择通过 Debug Symbols 构建设置生成应用程序的符号文件,Unity 将添加该目录。该目录包含包含调试元数据和 Unity 库的符号表部分的文件。您可以在 Android Studio 中设置该目录路径,以便在调试过程中解析函数名称。 |
build.gradle
|
标准的 Gradle 项目文件 build.gradle,描述如何构建 unityLibrary 模块,并包含要在构建中包含的依赖项列表。在 Unity 中,unityLibrary 模块依赖于 Unity 项目中的所有插件。 要修改此文件的内容,请提供自定义的主 Gradle 模板。 |
proguard-unity.txt
|
特定于 Unity 的文件,包含 Unity Java 代码的 ProGuard 配置(用于 unity-classes.jar 插件中的代码)。当在 Player 设置中启用 Minification(或手动修改 Gradle 构建文件启用时),该配置会生效。 |
build.gradle |
基础 Gradle 文件,影响 Gradle 项目中的所有模块。该文件指定了要在项目中使用的插件版本。其中一个插件是 Android Gradle 插件。 要修改此文件的内容,请提供自定义的基础 Gradle 模板。 |
proguard-user.txt |
这是一个特定于 Unity 项目的文件,包含项目 Java 代码和第三方 Java 插件的 ProGuard 配置。当启用代码压缩时,ProGuard-unity.txt Gradle 使用此文件。要创建此文件,请在 Android Player Settings 中启用 Custom Proguard File。 |
gradle.properties |
标准 Gradle 项目文件,用于配置如何构建应用程序。有关此文件中特定于 Unity 的属性的信息,请参阅 gradle.properties 文件中的属性。有关此文件可以包含的 Gradle 属性的信息,请参阅 Gradle 属性文件。 要修改此文件的内容,请提供自定义 Gradle 属性模板。 |
local.properties |
标准 Android Gradle 项目文件,用于配置构建系统的环境。Unity 会在此指定 SDK 路径,因此默认情况下,导出的 Gradle 项目会使用 Unity 编辑器使用的 SDK。NDK 路径以前也在此指定,但现在 Unity 会在 launcher 和 unityLibrary 模块的 build.gradle 文件中指定路径。 有关此文件可以包含的属性的信息,请参阅 Gradle 属性文件。 |
settings.gradle |
标准的 Android Gradle 项目文件,指定构成此 Android Gradle 项目的所有模块。在 Unity 导出的项目中,通常仅指定 launcher 和 unityLibrary 模块。但是,如果 Unity 项目使用 Play Asset Delivery,每个资源包都是一个独立模块,因此此文件也会列出它们。该文件还指定了包含 Gradle 项目插件的位置。插件位置结合了在线仓库和项目内部的 Java 插件。 要修改此文件的内容,请提供自定义的 Gradle 设置模板。 |
gradle.properties 文件包括以下特定于 Unity 的属性:
| 属性 | 描述 |
|---|---|
| unityStreamingAssets | 指示 Streaming Assets 目录中的资源名称。Unity 指定这些资源将包含在最终应用程序中且不会被 Gradle 压缩。 |
| unityTemplateVersion | Unity 使用的 Gradle 模板文件的版本。如果项目中的 Gradle 模板版本与指定版本不一致,Unity 会提示错误,要求更新 Gradle 文件并在空文件夹中重新构建项目。 |
| unity.projectPath | Unity 项目的路径。 |
| unity.debugSymbolLevel | Unity 使用的调试符号级别。 |
| unity.buildToolsVersion | Unity 使用的构建工具版本。 |
| unity.minSdkVersion | Unity 使用的最小 API 级别。 |
| unity.targetSdkVersion | Unity 使用的目标 API 级别。 |
| unity.compileSdkVersion | 用于在构建过程中编译应用程序的 Android SDK 的编译 SDK 版本。 |
| unity.applicationId | Unity 使用的应用程序 ID。例如,com.MyCompany.MyApp。 |
| unity.abiFilters | Unity 使用的应用程序中包含的应用程序二进制接口 (ABI) 配置,以逗号分隔。例如,armeabi-v7a、arm64-v8a。 |
| unity.versionCode | 应用程序的内部版本号。用于标识版本的先后顺序,数字越大表示版本越新。 |
| unity.versionName | 以字符串表示的应用程序版本号。此版本号对用户可见。 |
| unity.namespace | Unity 使用的应用程序命名空间。例如,com.MyCompany.MyApp。 |
| unity.androidSdkPath | 在外部工具 (External Tools)菜单的 Android 配置区域设置的 Android 软件开发工具包 (SDK) 安装路径,菜单路径:编辑 (Edit) > 偏好 (Preferences) > 外部工具 (External Tools) (macOS:Unity > 设置 (Settings) > 外部工具 (External Tools))。 |
| unity.androidNdkPath | 在外部工具 (External Tools) 菜单的 Android 配置区域设置的 Android 原生开发工具包 (NDK) 安装路径,菜单路径:编辑 (Edit) > 偏好 (Preferences) > 外部工具 (External Tools) (macOS:Unity > 设置 (Settings) > 外部工具 (External Tools))。 |
| unity.androidNdkVersion | 在 External Tools 菜单的 Android 配置区域设置的 Android 原生开发工具包 (NDK) 版本号,菜单路径:编辑 (Edit) > 偏好 (Preferences) > 外部工具 (External Tools) (macOS:Unity > 设置 (Settings) > 外部工具 (External Tools))。 |
| unity.jdkPath | 在外部工具 (External Tools) 菜单的 Android 配置区域设置的 Java 开发工具包 (JDK) 安装路径,菜单路径:编辑 (Edit) > 偏好 (Preferences) > 外部工具 (External Tools) (macOS:Unity > 设置 (Settings) > 外部工具 (External Tools))。 |
| unity.javaCompatabilityVersion | Unity 使用的 Java 兼容版本。 |