[Unity]Unity跨平台开发之Android打包和分发
Gradle 模板
Gradle模板配置如何使用Gradle。每个Gradle模板代表一个Gradle项目。Gradle项目可以包含并依赖于其他Gradle项目。
Gradle 模板文件
Gradle 模板由以下文件组成:
文件 | 位置 | 含义 |
baseProjectTemplate.gradle | 在导出项目的root/build.gradle文件夹内 | 影响最终Gradle项目中所有模块的配置信息。它指定要使用的Android Gradle插件版本以及Java插件的位置。这些位置是此项目内的在线仓库(用于存放和分发依赖项、库或插件等开发资源。在Android Gradle项目中,在线存储库通常是指诸如 Maven Central或Google Maven Repository这样的资源库,它们托管着各种开源或闭源的Java/Android库)和Java插件的组合。 |
launcherTemplate.gradle | 在导出项目的root/launcher/build.gradle文件夹内 | 关于如何构建Android应用程序的说明。其中包括捆绑、签名以及是否拆分APK 。它依赖于unityLibrary项目并输出.apk文件或应用程序包。 |
mainTemplate.gradle | 在导出的项目的root/unityLibrary/build.gradle文件夹内 | 有关如何将Unity构建为库的说明。这将输出一个.aar 文件。您可以在Unity编辑器中使用自定义模板覆盖 Unity模板。有关更多详细信息,请参阅本页上的提供自定义Gradle构建模板部分。 |
libTemplate.gradle | 各不相同 | 如果Android库项目插件如果未包含build.gradle文件,Unity将使用该libTemplate.gradle文件作为模板来生成文件。Unity生成文件后build.gradle,或者如果插件目录中已存在文件,Unity 会将插件复制到Gradle项目中。 |
settingsTemplate.gradle | 在导出的项目的root/settings.gradle文件内 | 指定Gradle构建系统在构建项目时应包含的模块名称。您可以在Unity编辑器中使用自定义模板覆盖Unity模板。有关更多详细信息,请参阅本页上的提供自定义 Gradle构建模板部分。 |
gradleTemplate.properties | 在导出的项目的root/gradle.properties文件内 | 配置Gradle构建系统并指定Java虚拟机(JVM)堆的大小等属性 |
使用自定义 Gradle 模板
为了更好地控制Unity生成Gradle项目文件,您可以覆盖Unity的默认Gradle模板文件。具体操作如下:
1. 前往“Edit” > “Project Settings”以打开“项目设置”窗口。
2. 选择Player选项卡,然后打开Android Player Settings:
3. 在“Publishing Settings”部分中,选中与要为其创建自定义模板的 Gradle 项目文件类型相对应的复选框。这将创建一个 Gradle 项目模板文件并显示该文件的路径。
4. 修改模板文件来控制最终 Gradle 项目文件的格式和内容。
使用C#修改导出的Gradle工程
要在Unity构建Gradle项目后对其进行修改,请创建一个继承自IPostGenerateGradleAndroidProject的类并重写OnPostGenerateGradleAndroidProject函数。此函数接收unityLibrary模块的路径作为参数,您可以通过C#脚本使用它访问应用程序的清单和资源。
警告:Unity现在使用增量构建管道(incremental build pipeline),这意味着Unity会在连续构建中重复使用相同的Gradle项目。这意味着您使用此API所做的任何修改都会累积,因为Unity不再为每个构建创建新的Gradle项目。例如,如果您使用此API向Gradle项目添加其他文件,则第一次构建将按预期工作,但在第二次构建期间该文件已经存在。第二个示例是,如果您使用此API向特定文件添加权限。每次连续构建都会为该权限添加另一个条目。确保您要进行的修改尚未存在于构建中至关重要。
覆盖 Android 应用清单(Override the Android App Manifest)
Gradle在构建过程中为您的应用生成Android 应用清单。您可以通过以下方式之一用自己的内容覆盖此Android应用清单:
- 创建Unity库清单文件模板,Unity将使用该文件来构建其生成的Unity库清单。有关更多信息,请参阅创建 Unity 库清单文件模板。
- 导出Unity项目并直接在Android Studio中修改最终的Android应用清单文件。有关更多信息,请参阅在Android Studio中编辑Android应用清单。
创建模板Unity Library Manifest文件
要控制Android应用清单文件的格式和内容,请使用自定义模板覆盖默认的Unity库清单文件。具体操作如下:
1. 前往” Edit > Project Settings”以打开“项目设置”窗口。
2. 选择Player选项卡,然后打开Android Player Settings:
3. 在“Publishing Settings”部分中,启用“Custom Main Manifest”。这将创建一个Unity 库清单文件并显示该文件的路径。有关Unity库清单控制的设置的信息,请参阅Unity 库清单。
Gradle将Android库中的清单合并到这个主清单中,并确保最终配置正确。
注意:当Android Player settings和模板文件设置的值存在差异时,Unity会显示一条警告消息,并且已layer的置优先。
在 Android Studio 中编辑 Android App Manifest
要完全控制Android App Manifest文件,请导出Unity项目并在Android Studio中编辑 Android应用清单。有关更多信息,请参阅导出Android项目。
安卓打包设置
使用“Android打包设置“ (Android Build Settings)配置和打包适用于Android设备的应用程序。Android打包设置是打包设置窗口的一部分。要查看“Android打包设置“:
- 选择File > Build Settings。
- 从Platform窗口的平台列表中,选择Android。
- 注意:如果Android显示为灰色,请按照Android环境设置中的步骤进行操作。
- 如果Build按钮不可见且Build And Run呈灰色,请选择Switch Platform。Unity就会切换至Android Build Settings模式中。
打包设置
设置 | 描述 | |
纹理压缩 (Texture Compression) | 用于打包的纹理压缩格式。选项包括: •Use Player Settings:使用您在Player Settings中的设置。 • ETC (GLES 2.0):使用ETC格式。 • ETC2 (GLES 3.0):使用 ETC2 格式。 • ASTC:使用 ASTC 格式。 • DXT (Tegra):使用 DXT 格式。 • PVRTC (PowerVR):使用 PVRTC 格式。 您还可以通过脚本或使用-setDefaultPlatformTextureFormat 命令行开关更改此设置。 有关更多信息,请参阅按平台推荐、默认和支持的纹理压缩格式。 | |
ETC2备选方案 (ETC2 fallback) | 指定Unity对不支持ETC2的Android设备使用的未压缩的RGBA纹理格式。这会影响未压缩纹理使用的内存量及其图像质量。选项包括: •32-bit:以全分辨率存储RGBA纹理,使用32位存储每个像素(每个颜色通道8位)。这是质量最高的未压缩纹理格式,并使用最多的内存。 •16-bit:以全分辨率存储 RGBA 纹理,使用16位存储每个像素(每个颜色通道4位)。这使用的内存是32位所用内存的一半,但由于精度较低,纹理可能会丢失宝贵的颜色信息。 •32-bit, half resolution:以半分辨率存储RGBA纹理,使用32位存储每个像素(每个颜色通道8位)。这使用的内存是32位所用内存的四分之一,但纹理可能会变得模糊。 注意:如果纹理不使用ETC2压缩格式: • 大多数压缩格式使用32位回退。 • 单通道和双通道纹理压缩格式会根据GPU的支持情况回退到不同的格式。例如,它可能是R8_UNorm或R8G8B8A8_SRGB。 • 如果GPU支持,ASTC HDR格式会回退到浮点格式。否则,它们会回退到32位。 | |
导出项目(Export Project) | 指示是否将Unity项目导出为Gradle项目。 您可以将其导入Android Studio的项目。有关更多信息,请参阅导出Android项目。 | |
符号链接源(Symlink Sources) | 指示是否在Unity和导出的Gradle项目之间共享Java 和Kotlin源文件。 启用此设置可创建符号链接,以便Gradle项目引用Unity项目中的Java和Kotlin源文件。这对于测试和迭代Java和Kotlin代码非常有用,因为这意味着如果您重新导出Unity项目,您对导出的Gradle项目中的Java和 Kotlin源文件所做的任何更改都会保留下来。 禁用此设置可让Unity将Unity项目中的Java和Kotlin源文件复制到导出的Gradle项目中。只有在启用“导出项目”时才能与此设置交互。 | |
构建应用程序包 (Google Play) (Build App Bundle (Google Play)) | 指示是否将应用程序构建为Android App Bundle(AAB)以在Google Play上分发。如果启用此设置,Unity 会将应用程序构建为AAB。如果禁用此设置,Unity会将应用程序构建为APK。仅当您禁用“导出项目”时,此设置才会显示。 | |
导出至App Bundle (Export for App Bundle) | 指示是否将导出的Gradle项目配置为构建Android App Bundle。仅当您启用“导出项目”时才会显示此设置。 | |
创建符号.zip (Create symbols.zip) | 指定Unity在构建应用程序时如何生成符号表包。选项包括: •Disabled:Unity不生成符号表包。 •Public: Unity为您的应用程序生成公共符号表包。 •Debugging:Unity为您的应用程序生成调试符号表包。 | |
运行设备 (Run Device) | 指定在哪个连接的设备上测试打包。通过USB连接的设备会自动出现在列表中。如果您连接了新设备或在列表中找不到连接的设备,请点击Refresh去刷新。要通过Android Debug Bridge无线连接新设备,请选择<输入 IP>选项。有关更多信息,请参阅在Android 设备上调试或在ChromeOS设备上调试,具体取决于您要构建的平台。 | |
打包至设备 (Build to Device) | 构建管道不会创建完整构建,而是将自上次修补以来更改的单个文件直接部署到设备。修补会将更改的文件部署到设备,而修补并运行会部署更改的文件,然后在设备上运行应用程序。有关更多信息,请参阅应用程序补丁。 您只能在启用Development Build时设置此项。 | |
开发者模式打包 (Development Build) | 指示是否包含脚本调试符号和分析器。在您的构建中。当您想要测试应用程序时,请使用此设置。 当您选择此选项时,Unity将设置DEVELOPMENT_BUILD脚本定义。然后,您的构建将包含将DEVELOPMENT_BUILD设置为条件的预处理器指令。有关更多信息,请参阅平台相关编译。 | |
自动连接分析器 (Autoconnect Profiler) | 指示在运行时是否自动将Profiler连接到构建的应用程序。 只有在启用Development Build时设置此项。 | |
支持深度分析 (Deep Profiling Support) | 指示是否在Profiler中启用深度剖析。这会使Profiler 检测应用程序中的每个函数调用,以便返回更详细的分析数据。此选项可能会减慢脚本执行速度。 您只能在启用Development Build时设置此项。 | |
脚本调试 (Script Debugging) | 指示是否允许调试应用程序的脚本代码。 您只能在启用Development Build时设置此项。 | |
等待托管调试器 (Wait For Managed Debugger) | 指示应用程序是否在运行任何脚本代码之前等待调试器连接。 仅当您启用脚本调试时才会显示此设置。此外,您只能在启用Development Build时设置此项。 | |
压缩方法 (Compression Method) | 指定Unity在打包时用于压缩项目中数据的方法。这包括资产、场景、播放器设置和GI数据。选项包括:
| |
不同压缩格式对比
压缩类型 | 压缩率(体积大小) | 压缩速度 | 解压速度 | 适用场景 |
ZIP(Default) | 高 | 中等 | 慢 | 体积优先,运行时不频繁解压 |
LZ4 | 中等 | 快 | 快 | 性能优先的实时加载 |
LZ4HC (LZ4High Compression) | 高 | 慢 | 快 | 体积和解压平衡 |
导出一个安卓工程(Export an Android project)
如果你需要更好地控制构建管道,可以将Unity项目导出为Gradle项目并将其导入Android Studio。如果您希望更好地控制构建管道,希望查看或修Unity为您的应用程序生成的Android App Manifest,或者将Unity支持的功能集成到另一个Android应用程序中,这将非常有用。
导出(Exporting)
要为Android Studio导出Unity项目:
- 选择File > Build Settings。
- 从平台窗格中的Platform列表中,选择Android。
- 注意:如果Android显示为灰色,请将项目设置为Android开发模式。
- 启用Export Project。
- 单击“Export”。
- 选择目标文件夹并单击“Select Folder”来执行导出操作。
Android数字发行服务(Digital distribution services for Android)
有关如何发布 Android 应用程序的详细信息,请参阅发布您的应用程序。
主题 | 描述 |
发布至Google Play | Google Play的发布要求和注意事项。 |
注:文章摘要翻译自Unity官方手册,版本2022.3x。