当前位置: 首页 > article >正文

[Unity]Unity跨平台开发之Android简介

Android要求和兼容

图形接口支持

注意:

新的 Unity 项目默认不支持 OpenGL ES 2.0。

由于硬件和图形 API 的限制,并非所有渲染管道都与 Android 兼容。

图片压缩

Android标准压缩格式是ETC和ASTC。Unity默认压缩格式是ASTC。如果Android设备不支持您选择的压缩格式,Unity会在运行时对其进行解压缩。这会增加内存使用量并降低渲染速度。

可以在Android Player Settings或者Android Build Settings里修改图片压缩格式。

Build Settings的设置优先于Player Settings。

Gradle for Android

版本兼容

Unity版本

Gradle版本

Android Gradle plug-in version

2022.3.38f1+

7.5.1

7.4.2

2022.2.0a18 - 2022.3.37f1

7.2

7.1.2

2022.2.0a1 - 2022.2.0a17

6.1.1

4.0.1

Gradle 版本和 Unity 版本之间的兼容性。

If you want to use a custom Gradle or Android Gradle plug-in version, it’s important to know the version compatibility between Gradle and the Android Gradle plug-in. For information on this, refer to Update Gradle.

如果您想使用自定义Gradle或Android Gradle插件版本,了解Gradle和Android Gradle插件之间的版本兼容性非常重要。有关此信息,请参阅更新Gradle。

Gradle 项目结构(Gradle project structure)

文件

描述

launcher

包含启动器模块及其相关所有内容的目录。

src

包含启动器模块源代码和资源的标准 Android Gradle 项目目录。Unity 将源代码和资源放在main子目录中。

main

包含启动器模块源代码和资源的标准 Android Gradle 项目目录。Unity 仅支持main source set。有关source sets的更多信息,请参阅Create source sets。

res

包含要包含在最终应用中的资源的标准 Android Gradle 项目目录。这些资源包括应用图标、应用在运行时访问的文本以及应用样式描述。

要指定此目录中的资源,请在 Android 播放器设置中设置应用图标和项目名称。

AndroidManifest.xml

Unity合并到最终Android App Manifest的标准Android Gradle项目文件。它包含特定于启动器模块的设置。

重要提示:如果多个清单文件为同一设置指定了不同的值,则清单合并过程会失败,您必须手动修复。您可以为清单合并指定规则,以自动决定如何解决合并冲突。有关如何执行此操作的信息,请参阅管理清单文件。

有关如何影响此文件内容的信息,请参阅覆盖Android应用清单。

build.gradle

一个标准的Gradle项目build.gradle文件,它描述了如何构建启动器模块,并包含要包含在构建中的依赖项列表。在Unity中,启动器模块依赖于unityLibrary模块,这意味着在构建启动器模块时,unityLibrary会被构建并包含在最终结果中。

要影响此文件的内容,请提供自定义启动器Gradle模板。

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

包含unityLibrary模块源代码和资源的标准Android Gradle项目目录。Unity将源代码和资源放在main子目录中。

main

包含unityLibrary模块源代码和资源的标准Android Gradle项目目录。Unity仅支持主源集(main source set)。有关源集的更多信息,请参阅创建源集。

assets

包含项目资产的标准Android Gradle目录。Unity将Unity项目的资源放在bin子目录中。

bin

放置Unity所有项目资源的目录。

java

用来放置unityLibrary模块未编译的Java源文件。Unity仅使用此目录来存储UnityPlayerActivity 源文件。有关如何扩展UnityPlayerActivity的信息,请参阅扩展UnityPlayerActivity Java代码。

jniLibs

包含unityLibrary模块使用的原生代码库的标准Android Gradle 项目目录。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应用清单中的标准Android Gradle项目文件。它包含特定于unityLibrary模块的设置。

要影响此文件的内容,请提供自定义的自定义主清单。

symbols

如果您选择通过Create symbol.zip构建设置为应用生成符号文件,则Unity会添加此目录。此目录包含包含调试元数据的文件以及 Unity库的符号表部分。您可以在Android Studio中设置目录路径,以在调试期间解析函数名称。

build.gradle

标准Gradle项目build.gradle文件,描述如何构建unityLibrary模块并包含要包含在构建中的依赖项列表。在Unity中,unityLibrary 模块依赖于Unity项目中的所有插件。

要影响此文件的内容,请提供自定义Main Gradle模板。

proguard-unity.txt

一个Unity专用文件,其中包含Unity Java代码(unity-classes.jar 插件中的代码)的ProGuard(混淆)配置。在播放器设置中启用 Minification时(或通过手动修改gradle构建文件启用 Minification)配置有效。

build.gradle

影响Gradle项目中所有模块的基础Gradle文件。它指定在此 Gradle项目中使用哪些插件版本。其中一个插件是Android Gradle 插件。

要影响此文件的内容,请提供自定义Base Gradle模板。

proguard-user.txt

这是Unity项目特定的文件,其中包含项目的Java代码和第三方 Java插件的ProGuard配置。就像ProGuard-unity.txt 一样,如果您启用最小化,Gradle会使用它。

要创建此文件,请在Android播放器设置中启用自定义Proguard 文件。

gradle.properties

一个标准的 Gradle 项目文件,用于配置如何构建应用程序。此文件包含以下特定于 Unity 的属性:

• unityStreamingAssets:表示 Streaming Assets 目录中的资产名称。Unity 指定这些资产应位于最终应用程序中,并且 Gradle 不应压缩它们。

• unityTemplateVersion:指定 Unity 使用的 Gradle 模板文件的版本。如果您项目的 Gradle 模板版本与指定的版本不同,Unity 会抛出错误,通知您更新 Gradle 文件并在空文件夹中构建项目。

• unityProjectPath:指定 Unity 项目的路径。

有关此文件可以包含的 Gradle属性的信息,请参阅 Gradle 属性文件。

要影响此文件的内容,请提供自定义Gradle属性模板。

local.properties

配置构建系统环境的标准Android Gradle项目文件。Unity在此处指定SDK的路径,以便默认情况下,导出的Gradle项目使用与 Unity Editor相同的SDK。以前的Gradle版本也在此处指定NDK 路径,但现在Unity在启动器和unityLibrary模块的build.gradle 文件中指定它。

有关此文件可以包含的属性的信息,请参阅Gradle属性文件。

settings.gradle

一个标准的Android Gradle项目文件,指定组成此Android Gradle 项目的所有模块。在Unity导出的项目中,这通常仅指定启动器和 unityLibrary模块。但是,如果Unity项目使用Play Asset Delivery,则每个资产包都是一个单独的模块,因此此文件也会列出它们。该文件还指定包含Gradle项目插件的位置。这些位置是此项目内的在线存储库和Java插件的组合。

要影响此文件的内容,请提供自定义Gradle设置模板。

安卓应用清单(Android App Manifest)

Android应用清单包含有关Android应用的信息。每个应用在源集的根目录中都有一个名为 AndroidManifest.xml的Android应用清单XML文件。Android操作系统和数字分发服务(例如Google Play)使用Android应用清单查找信息,例如应用的名称、应用的入口点、Android 版本支持、硬件功能支持和应用权限。有关Android应用清单文件的更多信息以及它配置的设置列表,请参阅Android开发者文档中的Android应用清单。

为了生成一个Android App Manifest,构建合并了Unity Library Manifest、Unity Launcher Manifest、Plug-in manifests(AAR、Android库文件等插件)。

生成应用清单(Generating an Android App Manifest)

  1. Unity使用Unity库清单作为Android应用清单的模板。如果您覆盖Unity库清单,Unity 将使用您指定的文件作为模板。
  2. Unity使用权限(permissions)、配置选项以及应用程序使用的功能等信息来更新Unity 库清单和Unity启动器清单文件。
  3. Gradle将Unity库清单、Unity启动器清单和插件清单合并到一个Android应用清单文件中。

您可以使用Android Studio APK分析器或其他第三方工具(如Apktool)查看输出的Android App Bundle(AAB)或Android Package(APK)内的Android App Manifest文件。

重要提示:您无法编辑APK或AAB中的Android应用清单文件。有关如何覆盖 Android 应用清单内容的信息,请参阅覆盖Android应用清单。

权限(Permissions)

Unity会根据Android Player Settings或者Unity代码内的API将所需的权限加入清单中,比如网络权限、震动权限等。

假如一个插件声明了一个权限,Unity也会将其加入构建后的清单内。

您也可以使用运行时权限系统在运行时申请权限,来代替在清单中声明权限的操作。

Unity库清单(Unity Library Manifest)

Unity库清单是Unity主要的清单,包含有关Unity播放器及其Activity的信息。Unity在构建过程中使用默认的Unity库清单来为应用程序生成最终的Android应用清单。您可以使用自己的清单文件覆盖此清单,以便更好地控制Unity生成的Android应用清单。有关更多信息,请参阅覆盖Android应用清单。

更多关于Android应用权限相关的内容。

Unity库清单声明:

  1. Unity Activity。
  2. Unity Activity使用的主题。
  3. 权限。
  4. VR模式。
  5. VR性能。
  6. 是否允许用户调整应用程序窗口的大小。这对VR和ChromeOS很有用。
  7. 最大纵横比。
  8. 如何响应配置更改。
  9. 支持的方向。
  10. 支持的启动模式。

注意:Unity 仅支持 singleTask 启动模式。

  1. Android UI。
  2. 是否使用硬件加速。
  3. 应用程序使用哪些功能,例如游戏手柄或触摸屏。
  4. 应用程序支持哪些图形API。
  5. 应用程序是否支持设备上的异形屏(刘海挖孔等)。
  6. 初始窗口大小。
  7. 应用程序支持哪些窗口模式。这对ChromeOS很有用。
  8. 启动画面配置。
  9. 安装应用程序时是否提取本机库。
  10. 应用程序可以在哪些设备上运行。

Unity启动器清单(Unity Launcher Manifest)

Unity Launcher Manifest配置应用程序启动前的外观和行为。例如,它包含应用程序的图标、名称和安装位置。Unity Launcher Manifest是Unity特有的Android 开发概念,您可以覆盖它以将Unity作为组件集成到现有项目中。有关更多信息,请参阅将Unity集成到Android 应用程序中。

Unity启动器清单声明:

  1. Package Name。
  2. 应用程序的图标。
  3. 应用程序的名称。
  4. 应用程序启动时的Activity和它的意图(intents)。
  5. 应用程序的安装位置。
  6. 应用程序支持的屏幕尺寸。
  7. 应用程序isGame的标识。

注意:此设置仅供 AndroidTV 使用。如果您未在播放器设置中启用 AndroidTV 支持,则 Unity 不会声明此设置。

如何构建Android应用

构建过程

  1. Unity从项目内收集资源、代码库、插件、Gradle模板和manifest模板来创建一个合法的Gradle工程。
  2. Unity通过获取Player Settings和Build Settings的内容来更新Gradle模板和manifest模板上对应的值。
  3. 如果选择导出Android工程,Unity会使用IL2CPP脚本后端(scripting backend)将C#代码转换为C++源文件放在Gradle工程内;而如果直接选择打包工程,Unity会直接将其编译为libil2cpp.so库文件放在Gradle工程内。
  4. Unity为所有实现了IPostGenerateGradleAndroidProject接口的类调用OnPostGenerateGradleAndroidProject方法。您可以在构建Gradle之前,通过这个回调来修改或者移动文件。
  5. Unity从Gradle 项目中运行Gradle来构建应用程序。Gradle会将Unity库清单(Unity Library Manifes)、Unity启动器清单(Unity Launcher Manifest)和插件清单(plug-in manifests)合并到一个Android应用清单文件中。

增量构建管道

  1. Unity逐步构建/生成:
    1. Gradle文件
    2. 清单文件
    3. 资产包
    4. APK扩展文件(obbs)
    5. 未压缩的资产分割
    6. Android符号zip文件

  1. Unity 增量复制:
    1. 用户二进制文件
    2. Gradle资源

构建过程的最后一步是运行Gradle。从这一点开始,构建过程不再使用增量构建管道,而是由Gradle来跟踪依赖项。

如果您通过实现回调来修改或移动增量构建管道使用的任何Android文件或资产,请参阅创建非增量构建。


注:文章摘要翻译自Unity官方手册,版本2022.3x。


http://www.kler.cn/a/444620.html

相关文章:

  • 关于小程序内嵌h5打开新的小程序
  • 【Rust自学】4.4. 引用与借用
  • Apache Solr RCE(CVE-2017-12629)--vulhub
  • Springboot logback 日志打印配置文件,每个日志文件100M,之后滚动到下一个日志文件,日志保留30天(包含traceid)
  • 2024年华为OD机试真题-字符串分割-C++-OD统一考试(E卷)
  • C盘下的文件夹
  • webpack常用配置讲解
  • 零基础学安全--wireshark简介
  • 健身达人微信小程序的设计与实现ssm+论文源码调试讲解
  • 视频监控/远程视频监控汇聚系统Liveweb网络监控解决方案
  • 【前端】CSS
  • excel 使用vlook up找出两列中不同的内容
  • Qt WORD/PDF(一)使用 QtPdfium库实现 PDF 预览
  • electron窗口锁定、解锁、解决阴影问题
  • 37. Three.js案例-绘制部分球体
  • 科技查新报告需要多长时间能完成?
  • 第10章:CSS最佳实践 --[CSS零基础入门]
  • 构建一个rust生产应用读书笔记四(实战5)
  • 大模型和呼叫中心的结合如何提高自动化水平?
  • L2tp环境搭建笔记- Openwrt平台
  • Redis bitmaps 使用
  • 国标GB28181网页直播平台EasyGBS:网络摄像机中的音频及音频编码技术解析
  • day14-16系统服务管理和ntp和防火墙
  • 【Rust自学】4.1. 所有权:栈内存 vs. 堆内存
  • Unity中实现通过控制Scroll View内物体顺序来做排序
  • 安装@wangeditor/editor-for-vue失败原因