[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.mzph.cn/diannao/64376.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

监控易在汽车制造行业信息化运维中的应用案例

引言 随着汽车制造行业的数字化转型不断深入,信息化类IT软硬件设备的运行状态监控、故障告警、报表报告以及网络运行状态监控等成为了企业运维管理的关键环节。监控易作为一款全面、高效的信息化运维管理工具,在汽车制造行业中发挥着重要作用。本文将结合…

Trimble天宝三维激光扫描仪在建筑工程竣工测量中的应用【沪敖3D】

竣工测量是建筑项目竣工阶段的一个至关重要的环节,它为建筑工程的质量验收和成果核查提供了核心的参考依据。传统的竣工测量方法,如全站仪测量,主要依赖于现场人工操作,存在一些明显的局限性,例如作业时间长、工作量大…

健康养生:拥抱生活的艺术

健康养生:拥抱生活的艺术 在快节奏的现代生活中,健康已成为我们最宝贵的财富。健康养生,不仅仅是一种生活方式的选择,更是一种对待生活的态度,它关乎于如何在日常中寻找到平衡,让身心得以滋养,…

【C语言程序设计——入门】基本数据类型与表达式(头歌实践教学平台习题)【合集】

目录&#x1f60b; <第1关&#xff1a;print 函数操作> 任务描述 相关知识 编程要求 测试说明 我的通关代码: 测试结果&#xff1a; <第2关&#xff1a;转义字符使用> 任务描述 相关知识 编程要求 测试说明 我的通关代码: 测试结果&#xff1a; <…

C++算法第九天

本篇文章我们继续学习c算法 目录 第一题 题目链接 题目展示 代码原理 暴力解法 二分解法 代码编写 第二题 题目链接 题目展示 代码原理 代码编写 重点回顾 朴素二分 非朴素二分 重点一 重点二 重点三 第一题 题目链接 153. 寻找旋转排序数组中的最小值 - 力…

Mysql学习笔记之SQL-2

上篇文章介绍了SQL语句的第一部分数据定义语言&#xff08;DDL)&#xff0c;这篇文章我们介绍SQL语句的第二部分&#xff0c;数据库操作语言&#xff08;DML&#xff09; 1.简介 DML全称&#xff08;Data Manipulation Language&#xff09;&#xff0c;用来对数据表中的数据…

opencv-python的简单练习

题目1.读取一张彩色图像并将其转换为灰度图。 import cv2 # 读取图片文件 img cv2.imread(./1.png)# 将原图灰度化 img_gray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 输出图片 cv2.imshow(img,img) cv2.imshow(img_g,img_gray) # 进行阻塞 cv2.waitKey(0) 题目2&#xff1a;…

AOP实现操作日志记录+SQL优化器升级

文章目录 1.引入依赖1.sun-dependencies 指定依赖2.将sun-dependencies进行install3.sun-common-log引入依赖 2.sun-common-log代码实现1.LogAspect.java&#xff08;需要更改包时就修改Pointcut的切点表达式即可&#xff09;2.log4j2-spring.xml3.效果展示 3.SQL优化器升级1.目…

CH582F BLE5.3 蓝牙核心板开发板 60MHz RAM:32KB ROM:448KB

CH582F BLE5.3 蓝牙核心板开发板 60MHz RAM:32KB ROM:448KB 是一款基于南京沁恒&#xff08;WCH&#xff09;推出的高性能、低功耗无线通信芯片CH582F的开发板。以下是该开发板的功能和参数详细介绍&#xff1a; 主要特性 双模蓝牙支持&#xff1a; 支持蓝牙5.0标准&#xff0…

AI技术在演示文稿制作中的应用一键生成PPT

在快节奏的现代工作环境中&#xff0c;时间就是金钱。为了提高工作效率&#xff0c;许多专业人士都在寻找能够快速生成演示文稿&#xff08;PPT&#xff09;的工具。本文将探讨AI技术如何帮助用户自动生成演示文稿&#xff0c;从文案撰写到排版&#xff0c;最终输出成品&#x…

【Redis篇】Set和Zset 有序集合基本使用

目录 Set 基本命令 sadd SMEMBERS SISMEMBER SCARD 返回值&#xff1a; SPOP SMOVE SREM 集合间操作 交集&#xff1a; 并集&#xff1a; 差集&#xff1a; ​编辑 内部编码 使用场景&#xff1a; Zset 有序集合 Zset基本命令 ZADD ZCARD ZCOUNT ZRANGE …

安防监控Liveweb视频汇聚融合平台助力执法记录仪高效使用

Liveweb平台可接入的设备除了常见的智能分析网关与摄像头以外 &#xff0c;还可通过GB28181协议接入执法记录仪&#xff0c;实现对执法过程的全程监控与录像&#xff0c;并对执法轨迹与路径进行调阅回看。那么&#xff0c;如何做到执法记录仪高效使用呢&#xff1f; 由于执法记…

技术理性角度思考:游戏是什么?

1、从单纯技术理性角度来看&#xff0c;游戏就是若干事件的组合&#xff0c; 每一个事件都是若干代码控制的若干动画。通过各种事件&#xff0c;玩家持续输入&#xff0c;改变游戏状态&#xff0c;获得输出结果。 细分为界面切换事件&#xff0c;游戏逻辑事件&#xff0c; a…

IDEA 未启用lombok插件的Bug

项目中maven已引用了lombok依赖&#xff0c;之前运行没有问题的&#xff0c;但有时启动会提示&#xff1a; java: You arent using a compiler supported by lombok, so lombok will not work and has been disabled. Your processor is: com.sun.proxy.$Proxy8 Lombok support…

【vue】npm install 报错 python2 Error: not found: python2

如图所示&#xff0c;vue项目在下载依赖的时候报错找不到python2&#xff0c;有网友通过下载python2.7并配置环境变量解决了&#xff0c;这里有两个其他自测可用的方式&#xff0c;供各位作为参考。 报错的主要原因是因为【sass-loader】【node-sass】这两个依赖跟nodejs版本有…

批量DWG文件转换低版本(CAD图转低版本)——c#插件实现

此插件可实现指定路径下所有dwg文件&#xff08;包含子文件夹内dwg&#xff09;一键全部转为低版本&#xff08;包含2004、2007、2018版本&#xff0c;也可定制指定版本&#xff09;。效果如下&#xff1a; &#xff08;使用方法&#xff1a;命令行输入 “netload” 加载插件&…

无管理员权限 LCU auth-token、port 获取(全网首发 go)

一&#xff1a; 提要&#xff1a; 参考项目&#xff1a; https://github.com/Zzaphkiel/Seraphine 想做一个 lol 查战绩的软件&#xff0c;并且满足自己的需求&#xff08;把混子和大爹都表示出来&#xff09;&#xff0c;做的第一步就是获取 lcu token &#xff0c;网上清一色…

STM32F407ZGT6-UCOSIII笔记6:UCOS-III软件定时器

今日学习使用UCOS系统的软件定时器功能 本文学习与程序编写基于 正点原子的 STM32F1 UCOS开发手册 文章提供测试代码讲解、完整工程下载、测试效果图 软件定时器卡柱UCOS III 系统问题解决 目录 UCOS-III 软件定时器&#xff1a; 单次定时器&#xff1a; 周期定时器: 开启软…

金碟中间件-AAS-V10.0安装

金蝶中间件AAS-V10.0 AAS-V10.0安装 1.解压AAS-v10.0安装包 unzip AAS-V10.zip2.更新license.xml cd /root/ApusicAS/aas# 这里要将license复制到该路径 [rootvdb1 aas]# ls bin docs jmods lib modules templates config domains …

Reactor 响应式编程(第四篇:Spring Security Reactive)

系列文章目录 Reactor 响应式编程&#xff08;第一篇&#xff1a;Reactor核心&#xff09; Reactor 响应式编程&#xff08;第二篇&#xff1a;Spring Webflux&#xff09; Reactor 响应式编程&#xff08;第三篇&#xff1a;R2DBC&#xff09; Reactor 响应式编程&#xff08…