Unity —— Android 应用构建与发布​

文章目录

  • 1 ​Gradle模板​​:了解Gradle模板的作用及使用方法,以增强对构建流程的控制。
  • ​2 ​Gradle模板变量​​:参考文档——自定义Gradle模板文件中可用的变量列表。
    • 2.1 修改Unity应用的Gradle工程文件
      • 2.1.1 通过Gradle模板文件
      • 2.1.2 导出到 Android Studio
      • 2.1.3 Android项目配置管理器
    • 2.2 修改Unity应用的Gradle工程文件——通过Gradle模板文件
    • 2.3 修改Unity应用的Gradle工程文件——通过Android项目配置管理器
    • 2.4 修改Unity应用的Gradle工程文件——在Android Studio中改
  • ​​3 Android构建设置参考​​:完整的Android构建设置参数说明文档。
    • 3.1 构建配置
    • 3.2 发布格式
    • 3.3 构建应用
    • 3.4 应用签名
  • 4 ​导出Android项目​​:将Unity项目导出为Android Studio可用的Gradle项目
  • 5 ​优化分发大小​​:减小应用安装包体积的实用技巧和方法。
    • 5.1 按目标架构拆分 APK 文件​​
    • 5.2 拆分应用二进制文件(Split Application Binary)
    • 5.3 资源压缩(Compression)
    • 5.4 代码裁剪优化(Minification)​​
  • ​6 Android数字分发服务​​:满足各分发平台(如Google Play)特定要求的操作指南。

通过 Unity 官方文档来学习~ https://docs.unity3d.com/6000.1/Documentation/Manual/android-building-and-delivering.html

这一部分章节的主要内容是:在Android平台上构建并发布您的Unity应用程序。通过配置构建设置和修改Gradle项目文件,优化应用程序安装包大小,并满足Google Play的发布要求。
下面按文档的顺序依次进行阅读,关键内容如下。


1 ​Gradle模板​​:了解Gradle模板的作用及使用方法,以增强对构建流程的控制。

Unity构建Android,为了让大家可以按自己实际需求去修改工程配置文件,是提供了两个方案。

  1. Gradle模板文件

    Gradle模板文件跟最终的Android Studio工程中的文件是对应的。所以如果你熟悉Android Studio工程的文件目录结构,直接看官方的图就会非常清楚
    在这里插入图片描述

  2. 在C#中直接修改

    Unity提供了一个类IPostGenerateGradleAndroidProject及其方法OnPostGenerateGradleAndroidProject,只要重载该方法就可以获取到Android Studio工程unityLibrary模块的路径,进而得到整个工程的路径,从而修改相关的文件内容。

    using UnityEditor;
    using UnityEditor.Android;
    using UnityEngine;class MyCustomBuildProcessor : IPostGenerateGradleAndroidProject
    {public int callbackOrder { get { return 0; } }// path:指向 ​​Unity 库 Gradle 项目根目录​​的路径public void OnPostGenerateGradleAndroidProject(string path){Debug.Log("MyCustomBuildProcessor.OnPostGenerateGradleAndroidProject at path " + path);}
    }
    

​2 ​Gradle模板变量​​:参考文档——自定义Gradle模板文件中可用的变量列表。

这一部分没有什么特别要看的。主要就是Unity预设的变量,在Gradle模板中使用这些变量,实际的值是取决于你工程内的配置。比如APIVERSION,这个最终就会根据你Android Player Settings配置的Target API Level来确定,比如35。

​# ​修改Gradle项目文件​​:在构建Android应用过程中调整Gradle项目文件的方法。

2.1 修改Unity应用的Gradle工程文件

2.1.1 通过Gradle模板文件

Unity 通过模板生成最终的 Gradle 项目文件。开发者可通过覆写模板控制文件生成逻辑。Gradle 在构建过程中会:

  1. ​​合并清单文件​​:自动整合 Android 库中的 Manifest 配置,确保最终主清单(AndroidManifest.xml)配置正确性。
    ​2. ​版本兼容问题:使用自定义模板文件时,若升级 Unity 版本(其默认模板可能变更),必须重新适配自定义模板,否则可能导致构建失败

2.1.2 导出到 Android Studio

​1. ​Unity 导出 Android 项目时,会生成 Gradle 项目文件并输出到指定目录,可以验证通过模板或配置管理器的修改是否生效。另外也可在 Android Studio 中直接编辑这些文件。
​​2. ​​​优先在 Unity 内修改​​:通过 Gradle 模板或 Android Project Configuration Manager 调整配置,避免每次导出后重复修改

2.1.3 Android项目配置管理器

​1. 提供 C# 类库接口,用于设置和修改​​自定义模块​​的 Gradle 文件。开发者可通过代码动态干预构建流程。
​2. ​关键限制​​:
- ​​不可修改默认模块​​:无法直接编辑 unityLibrary 和 launcher 模块的原始 Gradle 文件
- ​支持自定义模块​​:可在默认模块内创建子模块并配置其 Gradle 脚本
​3. ​执行时机​​:配置在​​构建后处理阶段​​(OnModifyAndroidProjectFiles 接口)生效,允许开发者覆盖 Unity 的默认值

2.2 修改Unity应用的Gradle工程文件——通过Gradle模板文件

具体步骤直接看官网文档的步骤即可

1. Go to Edit > Project Settings to open the Project Settings window.
2. Select the Player tab, then open Android Player Settings
3. In the Publishing Settings section, enable the checkbox that corresponds to the Gradle project file type you want to create a custom template for. This creates a Gradle project template file and displays the path to the file.
4. Modify the template file to control the final format and contents of the final Gradle project file.

这里简单总结几点内容

  1. 如果你用模板文件,写入你自己需要的内容,放到Unity工程/Plugins/Android目录下,就会生效。
  2. 如果你用的模板文件的内容,跟Unity工程中Android Player settings的不一致,请注意优先级更高的是Unity工程中Android Player settings。
  3. 为了确保你用模板文件的内容是实际生效了,Unity是建议是导出个Android Studio工程,实际看看效果。

2.3 修改Unity应用的Gradle工程文件——通过Android项目配置管理器

为什么要单独有这个东西呢?为什么不能就直接用OnPostGenerateGradleAndroidProject即可,为什么不允许编辑 unityLibrary 和 launcher 模块的 Gradle 文件。
在这个文档中有介绍:https://docs.unity3d.com/6000.1/Documentation/Manual/how-unity-builds-android-applications.html

2.4 修改Unity应用的Gradle工程文件——在Android Studio中改

这个对熟悉安卓开发的人就比较方便了,不需要多讲了。

​​3 Android构建设置参考​​:完整的Android构建设置参数说明文档。

比较常规的​Android构建设置,需要的时候查阅文档即可。

​# 构建​Android应用程序​​:将Unity项目编译为Android应用的操作流程。

3.1 构建配置

分为下面两部分,先不展开~

  • Player settings: Configure runtime and build settings for the application.
  • Build settings: Configure build system settings.

3.2 发布格式

  • APK
  • AAB

构建AAB的操作流程​​:

  1. 打开 Unity Editor,依次选择:文件(File) > 构建配置文件(Build Profiles)。
    ​2. ​选择 Android 平台​​
    ​3. ​勾选 ​​Build App Bundle (Google Play)​​。此选项仅在​导出项目(Export Project)​​禁用时可见。若需导出到 Android Studio 构建:启用 ​​导出项目(Export Project)​​,并勾选 ​​为应用程序包导出(Export for App Bundle)

3.3 构建应用

就是在Unity Editor里面依次点点点,然后开始构建。先不展开~

3.4 应用签名

先不展开~

4 ​导出Android项目​​:将Unity项目导出为Android Studio可用的Gradle项目

选择安卓平台然后勾选Export Project再构建就可以。先不展开~

5 ​优化分发大小​​:减小应用安装包体积的实用技巧和方法。

5.1 按目标架构拆分 APK 文件​​

我们构建APK时,开启 ​​Player Settings (构建设置)​​ 中的 ​​Split APKs by target architecture (按目标架构拆分 APK)​​ 选项可以优化应用程序的下载和安装大小。Unity 不会生成一个包含 ​​Target Architectures (目标架构)​​ Player Setting 中所选的所有目标 CPU 架构二进制文件的单个 APK,而是​​为每个 CPU 架构创建一个单独的 APK 文件​​。

​注意:Google Play 现在要求新应用必须使用 AAB(Android App Bundle)格式上传,而不是 APK。​​当上传 AAB 时,Google Play 会自动针对每种设备配置生成并分发优化过的 APK 文件。

5.2 拆分应用二进制文件(Split Application Binary)

通过拆分应用程序,可减小初始安装包体积。设备可先安装轻量版应用,再单独下载资源资产。
​​若输出为APK格式​​:Unity会将应用程序拆分为​​主APK​​和​​扩展文件(OBB)​​。
在Publishing Settings中勾选Split Application Binary即可。

5.3 资源压缩(Compression)

可修改 Unity 为应用程序资源文件选择的压缩方式。

  1. ​优势​​:减少应用程序包体体积;
  2. ​潜在影响​​:若压缩算法导致数据解压耗时增加,可能延长加载时

5.4 代码裁剪优化(Minification)​​

通过 ​​ProGuard 代码裁剪优化​​可显著减小应用程序体积并提升运行时性能。
在Unity的Publishing Settings中​找到 ​​Minify(压缩)​​ 下拉菜单按需勾选:

  • Release:对发布版本启用压缩
  • Debug:对调试版本启用压缩
  • Both:同时启用

​这东西主要是通过移除未使用的代码来​​缩减体积​​,精简字节码结构,加速执行效率来优化性能。因此 ProGuard 可能​​错误移除应用依赖的关键代码​​(如反射调用的类或 JNI 接口),还是存在​​代码误删风险​​的,所以千万在开启代码裁剪优化后要注意充分测试。​​
若需规避特定代码被移除,可以​​通过proguard-user.txt自定义混淆规则​​.

​6 Android数字分发服务​​:满足各分发平台(如Google Play)特定要求的操作指南。

目前主要就是讲Google Play的一些要求。这里不展开~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/917433.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917433.shtml

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

相关文章

【iOS】strong和copy工作流程探寻、OC属性关键字复习

文章目录前言strong和copy的区别为什么要用copy?什么时候用什么修饰?strong(ARC自动管理)strong修饰变量的底层流程图底层代码核心实现小结copy底层流程图对比与strong的关键不同之处内部调用关系(伪代码)小…

程序代码篇---多循环串口程序切换

上位机版(Python)要实现根据串口接收结果高效切换四个 while 循环函数,我们可以采用状态机模式,配合非阻塞串口读取来设计程序结构。这种方式可以实现快速切换,避免不必要的资源消耗。下面是一个高效的实现方案&#x…

rk3568上,实现ota,计算hash,验证签名,判断激活分区,并通过dd命令,写入对应AB分区

通过自定义升级程序&#xff0c;更直观的理解ota升级原理。 一、模拟计算hash&#xff0c;验证签名&#xff0c;判断激活分区&#xff0c;并通过dd命令&#xff0c;写入对应分区 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <u…

数据分析—numpy库

numpy库NumPy 库全面指南NumPy (Numerical Python) 是 Python 科学计算的基础库&#xff0c;提供了高性能的多维数组对象和工具。以下是 NumPy 的核心功能和使用方法。一、安装与基础1. 安装 NumPypip install numpy2. 导入 NumPyimport numpy as np # 标准导入方式二、数组创建…

Vue3 setup、ref和reactive函数

一、setup函数1.理解&#xff1a;Vue3.0中一个新的配置项&#xff0c;值为一个函数。2.setup是所有Composition API(组合API)的“表演舞台”。3.组件中用到的&#xff1a;数据、方法等等&#xff0c;均要配置在setup中。4.setup函数的两种返回值&#xff1a;(1).若返回一个对象…

python中appium 的NoSuchElementException错误 原因以及解决办法

错误收集D:\Program\Util\python.exe "D:/Program/myUtil/PyCharm 2024.3.5/plugins/python-ce/helpers/pycharm/_jb_pytest_runner.py" --target demo.py::TestAppium Testing started at 15:57 ... Launching pytest with arguments demo.py::TestAppium --no-hea…

mybatis-plus从入门到入土(四):持久层接口之BaseMapper和选装件

大家好&#xff0c;今天继续更新MybatisPlus从入门到入土系列&#xff0c;上一次的持久层接口还没讲完&#xff0c;只讲了IService接口&#xff0c;今天我们继续来讲一下。 BaseMapper BaseMapper中的方法也比较简单&#xff0c;都是增删改查的基础API&#xff0c;不知道大家还…

数组和指针的关系

在 C 语言中&#xff0c;​指针和数组有着非常紧密的联系&#xff0c;但它们本质上是 ​不同的概念。理解它们的关系是掌握 C 语言内存操作的关键。下面我会从多个角度帮你梳理 ​指针和数组的直接联系&#xff0c;并解释它们的异同点。1. 数组和指针的本质区别​概念本质存储方…

AI大模型探索之路-实战篇:智能化IT领域搜索引擎之github网站在线搜索

系列篇章💥 No. 文章 1 AI大模型探索之路-实战篇:智能化IT领域搜索引擎的构建与初步实践 2 AI大模型探索之路-实战篇:智能化IT领域搜索引擎之GLM-4大模型技术的实践探索 3 AI大模型探索之路-实战篇:智能化IT领域搜索引擎之知乎网站数据获取(初步实践) 4 AI大模型探索之路…

从0到1学PHP(十二):PHP 框架入门与项目实战

目录一、主流 PHP 框架介绍1.1 Laravel1.2 ThinkPHP1.3 Yii1.4 框架的优势二、框架基本使用&#xff08;以 Laravel 为例&#xff09;2.1 框架的安装与配置2.2 路由定义、控制器创建、视图渲染2.3 数据库操作&#xff08;ORM 的使用&#xff09;三、小型项目实战3.1 项目需求分…

MPLS LSP

一、概述上一章我们已经介绍过,LSP是MPLS报文在MPLS网络中转发时经过的路径,可以看作是由报文传输方向节点为对应FEC分配的MPLS入标签组成的,因为每台设备上为每个FEC分配的入标签是唯一 的&#xff0c;并与由下游节点为本地节点上该FEC分配的出标签建立映射关系&#xff0c; 所…

图像、视频、音频多模态大模型中长上下文token压缩方法综述

多模态大模型MLLMs 能够处理高分辨率图像、长视频序列和冗长音频输入等复杂上下文&#xff0c;但自注意力机制的二次复杂度使得大量输入 token 带来了巨大的计算和内存需求。 如下图&#xff0c;上&#xff1a;图像、视频和音频数据类型可以在其表示维度上进行扩展&#xff0c;…

Spring MVC 九大组件源码深度剖析(一):MultipartResolver - 文件上传的幕后指挥官

文章目录一、为什么从 MultipartResolver 开始&#xff1f;二、核心接口&#xff1a;定义文件上传的契约三、实现解析&#xff1a;两种策略的源码较量1. StandardServletMultipartResolver&#xff08;Servlet 3.0 首选&#xff09;2. CommonsMultipartResolver&#xff08;兼容…

stm32是如何实现电源控制的?

STM32的电源控制主要通过内置的电源管理模块&#xff08;PWR&#xff09;实现&#xff0c;涵盖电压调节、功耗模式切换和电源监控等功能。以下是其核心机制及实现方式&#xff1a;​​1. 电源架构与供电区域​​STM32的电源系统分为多个供电区域&#xff0c;各司其职&#xff1…

《R for Data Science (2e)》免费中文翻译 (第3章) --- Data transformation(1)

写在前面 本系列推文为《R for Data Science (2)》的中文翻译版本。所有内容都通过开源免费的方式上传至Github&#xff0c;欢迎大家参与贡献&#xff0c;详细信息见&#xff1a; Books-zh-cn 项目介绍&#xff1a; Books-zh-cn&#xff1a;开源免费的中文书籍社区 r4ds-zh-cn …

rclone、rsync、scp使用总结

数据同步工具使用总结【rclone、rsync、scp】一、数据处理背景二、数据处理方法对比1、数据关系梳理2、不同工具处理方法3、经验总结三、工具扩展知识1、rclone工具介绍&#xff08;1&#xff09;、rclone概述&#xff08;2&#xff09;、安装工具及配置本地文件迁移到云上服务…

用latex+vscode+ctex写毕业论文

文章目录前言一、安装latex二、安装ctex包三、更新ctex包四、使用ctex文档类前言 用latexvscodectex写毕业论文。&#xff08;英文论文不用安装ctex&#xff09; CTEX 宏集是面向中文排版的通用 LATEX 排版框架&#xff0c;为中文 LATEX 文档提供了汉字输出支持、标点压缩、字…

深度学习·mmsegmentation基础教程

mmsegmentation的使用教程 mmsegmentation微调方法总结 自定义自己的数据集&#xff1a;mmsegmentation\configs\_base_\datasets\ZihaoDataset_pipeline.py注册&#xff1a;mmsegmentation\configs\_base_\datasets\__init__.py定义训练和测试的pipeline&#xff1a;mmsegme…

InfluxDB 与 Node.js 框架:Express 集成方案(二)

四、优化与注意事项 &#xff08;一&#xff09;性能优化技巧 连接池管理&#xff1a;使用连接池可以有效减少创建和销毁数据库连接的开销。在 Node.js 中&#xff0c;可以借助influx模块结合第三方连接池库&#xff0c;如generic-pool来实现连接池的管理 。通过设置连接池的…

单位长度上的RC参数

1inch1000mil25.4mm2.54cm 使用SI9000计算导线上电容电感参数并使用Q2D进行仿真验证。使用SI9000建立一个阻抗为50欧的微带线模型&#xff0c;后对该模型进行1GHz频域计算 通过计算得到结果&#xff0c;可知1GHz频率下单位传输线上的RLGC参数使用SI9000计算好单位长度上的RLGC参…