知识点来源:人间自有韬哥在,豆包
 
目录
- 一、发布应用程序
 - 1. 修改发布必备设置
 - 1.1 打开设置面板
 - 1.2 修改公司名、游戏项目名、版本号和默认图标
 - 1.3 修改 Package Name 和 Minimum API Level
 
- 2. 发布应用程序
 - 2.1 配置 Build Settings
 - 2.2 选择发布选项
 - 2.3 构建 APK 文件
 
- 3. 测试发布的 APK 文件
 - 3.1 使用 Android 设备进行测试
 - 3.2 使用 Android 模拟器进行测试
 
- 二、发布界面参数介绍
 - 1.1.BuildSettings生成设置
 - 2.PlayerSettings
 - 3.OtherSettings-渲染
 - 4.OtherSettings-Vulkan设置和身份证明
 - 5.OtherSettings-配置(Configuration)
 - 6.OtherSettings-ScriptCompilation
 - 7.OtherSettings-优化和堆栈跟踪
 - 8.PublishingSettings-KeystoreManager
 - 9.PublishingSettings-其他
 
- 三、交互项目创建
 - 1.Unity调用安卓
 - 2.安卓调用Unity
 - 3.Android开发的必备原理
 - 4.交互项目创建
 
一、发布应用程序
1. 修改发布必备设置
1.1 打开设置面板
在Unity编辑器中,依次点击 File -> Build Settings,接着在弹出的窗口里点击 Player Settings 按钮,这将打开 Player Settings 面板。
1.2 修改公司名、游戏项目名、版本号和默认图标
- 公司名:在 Player Settings 面板的 
Identification部分,找到Company Name字段,把它修改为你公司的名称。 - 游戏项目名:同样在 
Identification部分,将Product Name字段修改为你的游戏项目名称。 - 版本号:还是在 
Identification部分,修改Version字段,以反映游戏当前的版本号,版本号通常遵循主版本号.次版本号.修订号的格式,例如1.0.0。 - 默认图标:在 
Other Settings下的Icon部分,点击+按钮,选择你准备好的图标文件(通常为 PNG 格式)。Unity 支持多种尺寸的图标,你可以上传不同尺寸的图标以适配不同的设备。 
1.3 修改 Package Name 和 Minimum API Level
- Package Name:在 
Other Settings部分,找到Package Name字段,这个字段是应用在 Android 系统中的唯一标识符,一般采用反向域名的格式,例如com.yourcompany.yourgame,必须对其进行修改设置。 - Minimum API Level:同样在 
Other Settings部分,找到Minimum API Level字段,根据你的游戏兼容性需求选择合适的 Android API 级别。通常建议选择一个较广泛支持的 API 级别,但也要考虑到你使用的功能对 API 级别的要求。 
2. 发布应用程序
2.1 配置 Build Settings
在 Build Settings 窗口中,选择 Android 平台,然后点击 Switch Platform 按钮,等待 Unity 完成平台切换。
2.2 选择发布选项
- Build System:通常选择 
Gradle。 - Target SDK Version:根据你的需求选择合适的 Android SDK 版本。
 - Scripting Backend:可以选择 
IL2CPP以获得更好的性能,或者选择Mono以获得更广泛的兼容性。 
2.3 构建 APK 文件
点击 Build 按钮,选择一个保存 APK 文件的目录,然后等待 Unity 完成构建过程。构建过程可能需要一些时间,具体取决于项目的大小和复杂度。
3. 测试发布的 APK 文件
3.1 使用 Android 设备进行测试
- 开启 USB 调试:在 Android 设备的 
设置->关于手机中,多次点击版本号开启开发者选项,然后在开发者选项中开启USB 调试功能。 - 连接设备:使用 USB 数据线将 Android 设备连接到电脑。
 - 安装 APK 文件:在电脑上找到之前构建好的 APK 文件,将其复制到 Android 设备上,然后在设备上找到该文件并点击安装。
 - 测试游戏:安装完成后,在设备的应用列表中找到并打开游戏,进行全面的测试,确保游戏的各项功能正常运行。
 
3.2 使用 Android 模拟器进行测试
- 安装模拟器:可以使用 Android Studio 自带的模拟器,或者第三方模拟器如 BlueStacks。
 - 启动模拟器:启动模拟器并等待其完全启动。
 - 安装 APK 文件:将 APK 文件拖放到模拟器窗口中,按照提示完成安装。
 - 测试游戏:安装完成后,在模拟器的应用列表中找到并打开游戏,进行测试。
 
二、发布界面参数介绍
1.1.BuildSettings生成设置
| 设置项 | 描述 | 可选值及说明 | 
|---|---|---|
| Texture Compression(纹理压缩) | 设置发布后的纹理压缩格式 | 1. Use Player Settings:使用在播放器设置中设置的纹理压缩格式 2. ETC:使用ETC格式 3. ETC2:使用ETC2格式,安卓常用,支持透明通道,老设备可能不支持 4. ASTC:使用ASTC格式 5. DXT:使用DXT格式 6. PVRTC:使用PVRTC格式 可统一设为ETC2,并在ETC2 fallback设置不支持时的替代方式  | 
| ETC2 fallback(ETC2回退) | 当Unity用于不支持ETC2的安卓设备时的RGBA纹理格式 | 1. 32 - bit:32位,以全分辨率存储RGBA纹理,质量最高,内存占用最多 2. 16 - bit:16位,以全分辨率存储RGBA纹理,质量较低,内存占用相对较少 3. 32 - bit, half resolution:32位,半分辨率,纹理会模糊,内存占用较小 非ETC2压缩,大多用32 - bit备用,取决于GPU支持  | 
| Export Project(导出项目) | 勾选后,将Unity项目导出为可导入Android Studio的Gradle项目 | - | 
| Symlink Sources(符号链接源) | 当勾选Export Project时才能勾选,决定是否在Unity和导出的Gradle项目之间共享Java和Kotlin源文件 | 启用后利于测试和迭代Java和Kotlin代码,重新导出时更改会保留,适合二次开发 | 
| Build App Bundle (Google Play)(生成应用程序资源包) | 是否将应用程序作为Android应用捆绑包(AAB) | 1. 启用:发布AAB,可配合安卓二次开发 2. 禁用:发布APK,可直接安装  | 
| Create symbols.zip(创建符号压缩文件) | 符号文件可帮助调试应用程序 | 1. Disabled:不生成 2. Public:生成公共符号包,包含解析函数地址信息,包小于调试符号包 3. Debugging:生成调试符号包,含完整调试信息和符号表,可解析堆栈、附加调试器  | 
| Run Device(运行设备) | 指定在哪个附加设备上测试生成 | 连接新设备或列表无设备时,点击Refresh刷新 | 
| Build to Device(构建到设备) | 不创建完整构建,将修改文件直接部署到设备 | 速度快,方便调试 | 
| Development Build(开发构建) | 是否包含脚本调试符号和性能分析器到项目中 | 勾选可调试应用程序 | 
| Autoconnect Profiler(自动连接分析器) | 是否自动将分析器连接到生成的应用程序 | - | 
| Deep Profiling(深度分析) | 是否启用深度剖析在分析器中 | 启用可返回详细分析数据,但会降低脚本执行速度 | 
| Script Debugging(脚本调试) | 是否允许调试应用程序的脚本文件 | Wait For Managed Debugger:程序运行脚本代码前是否等待调试器连接 | 
| Compression Method(压缩方法) | Unity在构建时压缩项目中数据的方式 | 1. Default:默认用ZIP,压缩效果略好,解压慢 2. LZ4:快速压缩格式,提高加载时间 3. LZ4HC:LZ4高压缩版本,构建慢,发布版本效果好,提高加载时间  | 
| Max Texture Size(最大的纹理大小) | 用于本地开发时导入纹理的最大尺寸 | 减小可加快资源导入和平台切换 | 
| Texture Compression(纹理压缩相关选项) | 选择可加快资源导入和平台切换 | 1. No Override:使用默认设置 2. Force Fast Compressor:强制快速压缩 3. Force Uncompressed:强制解压缩  | 
2.PlayerSettings
| 设置项 | 分类 | 描述 | 可选值及说明 | 
|---|---|---|---|
| icon(图标设置) | 基础设置 | 设置在设备上显示的应用图标 | 1. Adaptive:运行在 Android 8.0 及以上版本设备的应用图标 2. Round:运行在 Android 7.1 及以上版本设备的应用图标 3. Legacy icons:运行在 Android 7.1 以下版本设备的应用图标  | 
| Resolution and Presentation(分辨率和演示设置) | 基础设置 | - | - | 
| Fullscreen Mode(全屏模式) | 分辨率和演示设置 | - | 1. Fullscreen Window:全屏窗口,导航栏始终隐藏,应用内容可能缩放,有黑边 2. Windowed:窗口模式,大小取决于应用分辨率  | 
| Default Window Width | 分辨率和演示设置 | 应用程序窗口的默认窗口宽度 | 单位为像素 | 
| Default Window Height | 分辨率和演示设置 | 应用程序窗口的默认窗口高度 | 单位为像素 | 
| Minimum Window Width | 分辨率和演示设置 | 应用程序窗口的最小宽度 | 单位为像素 | 
| Minimum Window Height | 分辨率和演示设置 | 应用程序窗口的最小高度 | 单位为像素 | 
| Resizable Window(可调整大小的窗口) | 分辨率和演示设置 | 设置用户是否可调整应用窗口大小,可在 Android 和平板应用中启用多窗口功能 | 详情见 Android Developers | 
| Hide Navigation Bar | 分辨率和演示设置 | 是否隐藏顶部显示的导航栏 | - | 
| Render outside safe area | 分辨率和演示设置 | 是否使用所有可用屏幕控件渲染,包括刘海区域 | - | 
| Optimized frame Pacing | 分辨率和演示设置 | 是否均匀分布帧以减小帧率方差,启用后体验更流畅 | - | 
| Resolution Scaling Mode(分辨率缩放模式) | 分辨率和演示设置 | - | 1. Disabled:禁用,应用以设备本机屏幕分辨率呈现 2. Fixed DPI:使用 API 应用分辨率缩放,优化性能和电池寿命  | 
| Target DPI | 分辨率和演示设置 | 若设备本机屏幕 DPI 高于此值,Unity 降低应用分辨率匹配设置 | 计算方式:Min(Target DPI * Factor / Screen DPI,1),Factor 是 Quality 质量设置中 Resolution Scaling Fixed DPI Factor 参数 | 
| Reset resolution on window resize | 分辨率和演示设置 | 本机窗口大小更改时,是否将屏幕分辨率设为新的本机窗口大小,若为 Fixed DPI 则重新计算分辨率 | - | 
| Blit Type(光高类型) | 分辨率和演示设置 | 是否使用 Blit 将最终图像呈现在屏幕上 | 1. Always:Unity 渲染到屏幕外缓冲区,再用 Blit 复制到设备帧缓冲区 2. Never:Unity 渲染到设备操作系统提供的帧缓冲区,失败有警告,通常更快但不兼容所有设备 3. Auto:先渲染到设备提供的帧缓冲区,失败则用 Blit 呈现  | 
| Supported Aspect Ratio(支持的纵横比) | 分辨率和演示设置 | - | - | 
| Aspect Ratio Mode | 分辨率和演示设置 | 指定应用支持的最大纵横比,设备纵横比大于此值时,Unity 用此纵横比并添加黑条 | 1. Legacy Wide Screen(1.86):支持 Android 传统宽屏宽高比 2. Native Aspect Ratio:支持 Android 本机宽高比 3. Custom:自定义纵横比  | 
| Up To | 分辨率和演示设置 | 选择自定义纵横比时可自行设置 | - | 
| Orientation(屏幕取向) | 分辨率和演示设置 | - | - | 
| Default Orientation | 分辨率和演示设置 | 指定应用使用的屏幕方向 | 1. Portrait:竖屏,应用窗口底部和屏幕底部对齐 2. Portrait Upside Down:竖屏倒置,应用窗口底部和屏幕顶部对齐 3. Landscape Right:右横屏,应用窗口右侧和屏幕底部对齐 4. Landscape Left:左横屏,应用窗口左侧和屏幕底部对齐 5. Auto Rotation:自动旋转,可勾选允许的方向  | 
| Use 32 - bit Display Buffer | 分辨率和演示设置 | 显示缓冲区是否保存 32 位颜色值而非 16 位,后期处理有条纹或需 Alpha 值时启用 | 某些后期处理效果需此设置,因以相同格式创建渲染纹理 | 
| Disable Depth and Stencil | 分辨率和演示设置 | 是否禁用深度和模板缓冲区 | - | 
| Render Over Native UI | 分辨率和演示设置 | 是否在 Android 或 iOS 的本机 UI 上渲染,生效需相机清除标志设为使用 Alpha 值低于 1 的纯色 | - | 
| Show Loading Indicator(显示加载指示器) | 分辨率和演示设置 | 指定加载指示器是否显示及显示方式 | 1. Don’t Show:不显示加载指示条 2. Large:显示大的加载指示条 3. Inversed Large:显示大的加载指示条,颜色翻转 4. Small:显示小的加载指示条 5. Inversed Small:显示小的加载指示条,颜色翻转  | 
| Splash Image(启动图像设置) | 基础设置 | - | - | 
| Virtual Reality Splash Image | 启动图像设置 | 虚拟现实的初始屏幕设置 | - | 
| Show Splash Screen | 启动图像设置 | 是否显示启动图像,收费版本可修改,免费版本不能改 | - | 
| Preview | 启动图像设置 | 预览启动图像 | - | 
| Splash Style(启动风格) | 启动图像设置 | - | 1. Dark on Light:暗到亮 2. Light on Dark:亮到暗  | 
| Animation(启动图像动画效果) | 启动图像设置 | - | 1. Static:静态不动 2. Dolly:由小变大 3. Custom:自定义  | 
| Draw Mode(绘制模式) | 启动图像设置 | - | 1. Unity Logo Below:Unity Logo 显示在前 2. All Sequential:所有按顺序 3. Logos:可添加 Logo 图片按顺序显示  | 
| Overlay Opacity | 启动图像设置 | 覆盖不透明度 | - | 
| Background Color | 启动图像设置 | 背景颜色 | - | 
| Blur Background Image | 启动图像设置 | 是否模糊背景图像 | - | 
| Background Image | 启动图像设置 | 背景图像 | - | 
| Alternate Portrait Image | 启动图像设置 | 备选图像 | - | 
| Static Splash Image | 启动图像设置 | 静态启动图像 | - | 
| Scaling(缩放比例) | 启动图像设置 | - | 1. Center:居中(仅缩小),图像太大时缩小,否则以原始大小绘制 2. Scale to fit(填充):缩放图像使较长尺寸适合屏幕,用黑色填充空白 3. Scale to fit(裁剪):缩放图像使较短尺寸适合屏幕,裁剪较长维度  | 
3.OtherSettings-渲染
| 设置项 | 描述 | 可选值及说明 | 
|---|---|---|
| Color Space(色彩空间) | 切换 Unity 中用于渲染的色彩空间 | 1. Gamma(伽马):纹理倾向于保存在此空间,但着色器采样时基于伽马值可能导致结果不准确 2. Linear(线性):效果相对较好,不是所有平台都支持。支持平台有 Android、iOS、WebGL、Windows、Mac OS X 、Linux。Android 至少需 OpenGL ES 3.0 图形 API 和 Android 4.3;iOS 需要 Metal 图形 API;WebGL 至少需 WebGL 2.0 图形 API。确定主流设备支持情况选择,不支持自动退出  | 
| Vulkan | 一个跨平台的 2D 和 3D 绘图应用程序接口,是 OpenGL 的下一代版本,旨在提供更低的 CPU 开销与更直接的 GPU 控制 | - | 
| Auto Graphics API(自动图形接口) | 控制图形 API 接口的使用方式 | 1. 勾选:Unity 自动尝试使用对应图形 API 接口,默认使用 Vulkan,不支持则退到 GLES3.2、GLES3.1 或 GLES3.0 2. 不勾选:可在列表中自行对使用的图形 API 接口进行排序,设置使用优先级。下方副选项 ES3.1、ES3.1+AEP、ES3.2 用于配置最低 OpenGL ES 3.X 次要版本(Require ES3.1: 要求使用 ES3.1;Require ES3.1 + AEP: 要求使用 ES3.1 + AEP;Require ES3.2: 要求使用 ES3.2)。只有当 GLES2 不在列表中时,Unity 才会将额外的三个选项要求添加到 Android 应用清单中,若发布到 Google Play 应用商店,不受支持设备不会显示该应用  | 
| Color Gamut(色域) | 添加或删除 Android 平台用于渲染的色域,色域定义设备可显示的颜色范围 | 1. sRGB:默认且必需的色域,一般手机使用此色域即可 2. DisplayP3:当定位具有宽色域显示的设备(如 PC 主机游戏)时,可利用完整显示功能  | 
| Multithreaded Rendering(多线程渲染) | 将图形 API 调用从 Unity 的主线程移动到单独的工作线程,提升主线程 CPU 使用率较高的应用程序性能 | 启用此选项可实现;不启用则不进行此操作 | 
| Static Batching(静态批处理) | 将静态物体合并处理 DC,提升性能 | 启用可实现合并处理;不启用则不进行此操作 | 
| Dynamic Batching(动态批处理) | 动态合并 DC 提高性能,可编程渲染管线(SPR)处于活动状态(启用 URP 或 HDRP)时不起作用,使用 FairyGUI 时需开启以优化 DC | 启用可实现动态合并;不启用则不进行此操作,且在特定情况(启用 URP 或 HDRP)下无法使用 | 
| Compute Skinning(计算蒙皮) | 启用 DX11/ES3 GPU 计算蒙皮,释放 CPU 资源,对图形接口版本要求较高(PC 上 DX11、移动设备 ES3) | 启用可启用计算蒙皮;不启用则不进行此操作 | 
| Graphics Jobs (Experimental)(图形作业) | 启用后将渲染循环的图形任务移到其它 CPU 内核上运行的工作线程,减少主线程时间 | 启用可实现任务转移;不启用则不进行此操作 | 
| Texture Compression Format(纹理压缩格式) | 可在 ASTC、ETC2、ETC 之间选择纹理压缩格式 | 可选择 ASTC、ETC2、ETC 其中一种格式 | 
| Normal Map Encoding(法线地图编码) | 选择 XYZ 或 DXT5nm 样式设置法线映射编码,影响法线贴图的编码方案和压缩格式 | 1. 选择 XYZ 样式 2. 选择 DXT5nm 样式:法线贴图质量更高,但在着色器中解码成本更高  | 
| Lightmap Encoding(光照贴图编码) | 选择“正常质量”或“高质量”设置光照贴图编码,影响光照贴图的编码方案和压缩格式 | 1. 选择“正常质量” 2. 选择“高质量”  | 
| Lightmap Streaming(光照贴图流) | 是否对光照贴图使用 Mipmap 流式处理 | 选择启用则使用;选择不启用则不使用 | 
| Streaming Priority(流优先级) | 设置 Mipmap 流式处理系统中所有光照贴图的优先级,生成光照贴图时应用于所有光照贴图,正数表示更高优先级,范围为 –128 到 127 | 可设置具体数值(在 –128 到 127 之间的整数) | 
| Frame Timing Stats(帧时序统计) | 启用可收集 CPU 和 GPU 帧时间统计信息,需和摄像机上的动态分辨率设置(Camera 组件下的 Allow Dynamic Resolution 选项)结合使用,确定应用程序受 CPU 还是 GPU 限制 | 启用可收集统计信息;不启用则不收集 | 
| OpenGL: Profiler GPU Recorders | 是否启用 OpenGL 的探查 GPU 记录器,在 OpenGL 上,探查 GPU 记录器会禁用 GPU 探查器 | 启用则开启记录器并禁用 GPU 探查器;不启用则不开启记录器 | 
| Virtual Texturing(虚拟纹理) | 在场景有很多高分辨率纹理时减少 GPU 内存使用量和纹理加载时间,将纹理拆分为瓦片,按需上传到 GPU 内存,不兼容安卓设备 | 启用可实现虚拟纹理功能;不启用则不进行此操作,且因不兼容安卓设备,安卓平台无法使用 | 
| Shader Precision Model(着色器精度模型) | 控制着色器中使用的采样器的默认精度 | - | 
| 360 Stereo Capture(360 度立体捕捉) | Unity 是否可以捕获立体 360 度全景图像和视频,不兼容 Android | 启用则可进行捕捉操作;不启用则不进行此操作,且因不兼容 Android,安卓平台无法使用 | 
4.OtherSettings-Vulkan设置和身份证明
| 设置项 | 分类 | 描述 | 可选值及说明 | 
|---|---|---|---|
| SRGB Write Mode(SRGB 写入模式) | Vulkan设置 | 允许呈现器在运行时切换 sRGB 写入模式,可暂时关闭线性到 sRGB 写入颜色转换 | 1. 启用:可切换 sRGB 写入模式,但不建议移动设备启用,会增加 GPU 负担 2. 不启用:保持默认的 sRGB 写入模式  | 
| Number of swapchain buffers(交换链缓冲区数量) | Vulkan设置 | 设置交换链缓冲区数量,与Vulkan渲染器配合使用,可解决移动平台延迟问题 | 1. 设为 2:双缓冲 2. 设为 3:三重缓冲,一般保持为 3,不建议安卓设备使用双缓冲,会产生负面影响  | 
| Acquire swapchain image late as possible(尽可能晚的获取交换链图像) | Vulkan设置 | 启用后,Vulkan 延迟获取后缓冲器,直到将帧渲染为屏幕外图像,与双缓冲结合可提高性能,但额外的 blit 会占用带宽 | 1. 启用:延迟获取后缓冲器,可能提高性能但有带宽占用风险,不建议安卓设备修改 2. 不启用:按常规方式获取后缓冲器  | 
| Recycle command buffers(回收命令缓冲区) | Vulkan设置 | 决定 Unity 执行命令缓冲区后是回收还是释放命令缓冲区 | 1. 回收:执行后回收命令缓冲区 2. 释放:执行后释放命令缓冲区  | 
| Apply display rotation during rendering(在渲染期间应用显示旋转) | Vulkan设置 | 启用可在显示的本机方向上执行所有渲染,有性能优势但有使用限制 | 1. 启用:在本机方向渲染,有性能优势但有使用限制,不建议修改 2. 不启用:按常规方式渲染  | 
| Override Default Package Name(是否覆盖默认包名称) | 身份证明 | 用于在公司名和游戏名不是英文时,自行设置包名 | 1. 勾选:可自行设置包名 2. 不勾选:使用默认包名  | 
| Package Name(软件包名) | 身份证明 | 应用程序的 ID,用于在设备和安卓应用商店中唯一标识应用 | 格式为 com.公司名.产品名,只能包含字母数字和下划线,每段都必须以字母开头 | 
| Version(版本号) | 身份证明 | 标识应用程序包的迭代 | 格式为数字.数字.数字……,如 1.0、4.3.2、1.2.1 等 | 
| Bundle Version Code(内部版本号) | 身份证明 | 用于确定版本新旧,数字越大版本越新,不显示给用户 | 为整数,每次发布新版本可让数字加一 | 
| Minimum API Level(最低API级别) | 身份证明 | 决定应用程序运行所需的最低 API 级别,SDK 版本低于该设置的设备无法安装应用 | 设置具体的 API 级别,如 Android 系统的 API 版本号 | 
| Target API Level(目标API级别) | 身份证明 | 指定应用的目标 API 级别,通知 Android 系统已针对目标版本测试,应用也可在较低版本运行(取决于 Minimum API Level) | 设置具体的 API 级别,如 Android 系统的 API 版本号 | 
5.OtherSettings-配置(Configuration)
| 设置项 | 描述 | 可选值及说明 | 
|---|---|---|
| Scripting Backend(脚本后端) | 决定Unity如何在项目中编译和执行C#代码 | 1. Mono:将C#编译为.Net公共中间语言CIL,并使用公共语言运行时执行中间语言 2. IL2CPP:将C#编译为CIL,再将CIL转换为C++,最后将C++编译为本机代码  | 
| Api Compatibility Level(API兼容性级别) | 决定可以在项目中使用的.Net API,影响代码和第三方库的兼容性 | 1…Net Standard 2.1:和.Net Standard 2.1兼容,生成较小版本,具有完整跨平台支持 2…Net Framework:和.Net Framework兼容(包含.Net Standard 2.1所有内容),包含更多API支持,但生成包更大。使用C#高级功能报错时可尝试切换,有替代方案时建议用.Net Standard 2.1以减小包体  | 
| C++ Compiler Configuration(C++编译器配置) | 只有将Scripting Backend设置为IL2CPP才能使用该选项 | 1. Debug(调试模式):关闭所有优化,代码生成速度快但运行慢,用于调试 2. Release(发布模式):对代码进行优化,编译后代码运行快、二进制文件小,但编译时间长 3. Master(大师模式):实现所有可能的优化,发布时间比发布模式长,发布最终版本时可使用  | 
| Use incremental GC(使用增量GC) | 启用后可使用增量垃圾回收器,将GC分散到多个帧上执行,降低一帧中GC造成的卡顿 | 启用或不启用 | 
| Assembly Version Validation(程序集版本验证) | Mono是否验证强名称程序集中的类型,强名称程序集为程序集创建唯一标识,防止程序集冲突 | 验证或不验证 | 
| Mute Other Audio Sources(将其它音频源静音) | 希望在运行Unity应用程序时停止后台运行应用程序中的音频,可启用该选项,否则后台音频和Unity音频一起播放 | 启用或不启用 | 
| Target Architectures(目标体系结构) | 允许应用程序运行的CPU,64位环境运行安卓应用有性能优势,64位应用可处理超4GB内存空间,Mono模式只能选ARMv7,IL2CPP模式可选更多 | 1. ARMv7:32位的ARM 2. ARM64:64位的ARM 3. x86(Chrome OS):32位 4. x86-64(Chrome OS):64位  | 
| Split APKs by target architecture(按目标架构拆分APK) | 启用后,为目标体系结构中选择的每个CPU架构创建单独的APK,在Google Play中根据设备情况下载对应版本APK,可减小apk大小,但主要针对Google Play,国内产品几乎不使用 | 启用或不启用 | 
| Target Devices(目标设备) | 指定允许运行APK的目标设备 | 1. All Devices(所有设备):允许apk在所有Android和Chrome OS设备上运行 2. Phones,Tablets,and TV Devices Only(手机、平板、电视设备):允许apk在Android手机、平板电脑、电视上运行,不能在Chrome OS设备上运行 3. Chrome OS Devices Only(Chrome OS设备):允许apk在Chrome OS设备上运行,不能在Android手机、平板、电视上运行  | 
| Install Location(安装位置) | 指定设备上应用程序的安装位置 | 1. Automatic(自动):由操作系统决定,用户可移动安装位置 2. Prefer External(首选外部):先尝试安装到外部存储(SD卡),不行则安装到手机存储空间 3. Force Internal(强制内部):安装到手机存储空间,用户无法移动到外部存储安装  | 
| Internet Access(互联网接入) | 选择是否始终将网络权限添加到Android清单(即使未使用任何网路API) | 1. Auto:仅当使用网络API时添加互联网访问权限 2. Require:始终添加互联网访问权限  | 
| Write Permission(写入权限) | 是否启用对外部存储(SD卡)的写入访问权限,并向Android应用清单添加相应权限 | 1. Internal(内部):仅授予对内部存储的写入权限 2. External(外置SD卡):启用对外部存储的写入权限  | 
| Filter Touches When Obscured(遮挡时过滤触摸) | 启用后丢弃在另一个可见窗口覆盖Unity应用程序时收到的触摸(触屏事件),防止窃听劫持 | 启用或不启用 | 
| Sustained Performance Mode(持续性能模式) | 启用此选项可在较长时间段内设置可预测且一致的设备性能级别,无需热限制,但整体性能可能降低 | 启用或不启用 | 
| Low Accuracy Location(低精度定位) | 启用后改为低精度值与Android位置API配合使用 | 启用或不启用 | 
| Chrome OS Input Emulation(Chrome OS输入仿真) | Chrome OS操作系统默认将鼠标和触摸板输入事件转为触屏输入事件,取消可禁用此默认行为 | 启用或不启用 | 
| Android TV Compatibility(安卓电视兼容性) | 启用后应用程序标记为兼容Android TV | 启用或不启用 | 
| Android Game(安卓游戏) | 启用后将输出的apk标记为游戏而非常规应用 | 启用或不启用 | 
| Android Gamepad Support Level(安卓游戏输入板支持等级) | 选择玩游戏时支持的输入方式 | 可根据需求选择相应等级 | 
| Warn about App Bundle size(警告应用程序包的大小) | 只有在Build Settings中勾选了Build App Bundle(Google Play)才有用,应用程序包大小超过阈值时收到警告 | 可设置具体的阈值大小 | 
| Active Input Handling(活动输入处理) | 选择处理来自用户输入的方式 | 1. Input Manager:老的输入系统,Input相关 2. Input System Package:新输入系统 3. Both:同时使用,在Unity进阶之InputSystem中有详细讲解  | 
6.OtherSettings-ScriptCompilation
| 设置项 | 分类 | 描述 | 可选值及说明 | 
|---|---|---|---|
| Scripting Define Symbols(脚本定义符号) | 脚本编译 | 设置自定义编译标志,使用第三方内容时可能在此添加脚本符号,Unity 有内置脚本符号,可配合多路测试 #if 使用,也可自定义 | 可添加自定义脚本符号,利用内置脚本符号(如 Lua 热更相关、FairyGUI 相关等),通过 #if、#elif、#else、#endif 控制代码逻辑 | 
| Additional Compiler Arguments(其它编译器参数) | 脚本编译 | 向此列表添加条目以将其他参数传递给 Roslyn 编译器 | 1. 按“+”按钮创建新条目添加参数 2. 按“-”按钮删除条目 3. 单击“应用”按钮在将来编译中包括其他参数 4. 单击“还原”按钮将列表重置为最近应用的状态  | 
| Suppress Common Warnings(禁止显示常见警告) | 脚本编译 | 禁用此设置可显示 C# 警告 | 1. 启用:禁止显示常见 C# 警告,如 CS0169(从不使用私有字段)、CS0649(未初始化的私有或内部字段声明) 2. 禁用:显示 C# 警告  | 
| Allow ‘unsafe’ Code(允许使用“不安全”代码) | 脚本编译 | 启用对在预定义程序集中编译“unsafe”C# 代码的支持 | 1. 启用:支持编译“unsafe”C# 代码,使用指针等操作需勾选此项 2. 不启用:不支持编译“unsafe”C# 代码  | 
| Use Deterministic Compilation(使用确定性编译) | 脚本编译 | 启用此设置后,编译的程序集在每次编译时都是完全相同的,可用于确定二进制文件是否从受信任的源编译 | 1. 启用:使用确定性编译,编译的程序集每次相同 2. 禁用:防止使用 -确定性 C# 标志进行编译  | 
| Enable Roslyn Analyzers(启用罗斯林分析器) | 脚本编译 | 禁用此设置可编译用户编写的脚本,而无需项目中可能存在的 Roslyn 分析器 DLL(Roslyn 是微软的.Net 开源编译器,提供丰富的代码分析 API) | 1. 启用:使用 Roslyn 分析器分析脚本 2. 禁用:不使用 Roslyn 分析器,直接编译用户编写的脚本  | 
| unsafe 关键词(基本概念) | C# 语言特性 | 默认 C# 不支持指针,unsafe 关键词用于表示不安全的上下文,在 C# 中进行指针相关操作必须使用该关键词,不安全代码在 CLR 中是指无法验证的代码,但不一定危险,使用时需确保无安全风险和指针错误 | 在 C# 中使用指针等操作需使用 unsafe 关键词,代码在 CLR 中无法验证安全性,仅在完全信任的程序集中执行不安全代码 | 
| unsafe 关键词(基本使用) | C# 语言特性 | 在 Unity 中正常使用 unsafe 关键词编写程序,需在 Unity 的 Player Settings 中的 Other Settings 中将 Allow ‘unsafe’ Code 选项勾选上,可用于修饰函数、代码块、成员变量、类 | 1. 勾选 Allow ‘unsafe’ Code 选项后可使用 unsafe 关键词2. 可修饰函数、代码块、成员变量、类  | 
| unsafe 关键词(总结) | C# 语言特性 | unsafe 的使用能让在 C# 中使用指针,但存在安全风险和稳定性风险,无特殊需求尽量避免使用 | 尽量避免在 C# 中使用 unsafe 关键词,以减少安全和稳定性风险 | 
7.OtherSettings-优化和堆栈跟踪
| 设置项 | 分类 | 描述 | 可选值及说明 | 
|---|---|---|---|
| Prebake Collision Meshes(预烘焙碰撞到网格) | 优化 | 在构建时将碰撞数据添加到网格 | 启用:在构建时添加碰撞数据到网格 不启用:不进行此操作  | 
| Keep Loaded Shaders Alive(保持加载的着色器的活动状态) | 优化 | 启动后,着色器不能卸载,避免卸载后重复加载造成性能开销和卡顿 | 启用:不能卸载着色器 不启用:可以卸载着色器  | 
| Preloaded Assets(预装资源) | 优化 | 设置启动时加载的资源数组,将想要预加载的内容拖入框中 | 可将需要预加载的资源拖入设置框中 | 
| Strip Engine Code(剥离引擎代码) | 优化 | 选择IL2CPP模式才会出现的字段,启用可删除Unity引擎功能中没有使用的代码,减小包体大小 | 启用:删除未使用的引擎代码,减小包体 不启用:不进行代码剥离  | 
| Managed Stripping Level(管理剥离水平) | 优化 | 选择Unity如何剥离未使用的C#代码,发布时自动去除未使用代码,可能意外删除需要的代码 | 1. Disabled:不剥离,只有在Mono模式下才能选择 2. Minimal:最小剥离,Unity 只会搜索Unity引擎未使用的.Net类库,不删除用户编写代码,IL2CPP模式下默认 3. Low:低级剥离,处理Unity相关,玩家自己编写的代码也会被剥离,尽量减小意外剥离 4. Medium:中级剥离,比Low更多一些剥离 5. High:高级剥离,优先考虑打包大小,最大限度剥离代码,可配合link.xml手动拒绝剥离,或使用[Preserve]特性(在不希望被剥离的函数前加该特性)  | 
| Enable Internal Profiler(启用内部探查器) | 优化 | 已弃用的功能,用于从Android SDK的设备中获取profiler数据adblogcat测试项目时输出,仅在开发版本中可用 | 该功能已弃用 | 
| Vertex Compression(顶点压缩) | 优化 | 选择要设置的通道,以便在顶点压缩方法下压缩网格,减少内存中网格数据的大小,提高CPU性能 | 选择相应的通道进行顶点压缩设置 | 
| Optimize Mesh Data(优化网格数据) | 优化 | 启用后,构建时会从使用的网格中剥离未使用的顶点属性,减少网格数量,减小包体大小,减小加载时间和运行时内存使用,但运行时不能更改材质或着色器相关设置 | 启用:构建时剥离未使用的顶点属性 不启用:不进行此操作,运行时可自由更改材质或着色器设置  | 
| Texture MipMap Stripping(贴图纹理剥离) | 优化 | 启用后会启用纹理贴图剥离,在构建时会从纹理中剥离没有使用的纹理贴图,根据发布平台的质量设置确定哪些贴图用不到,mipmap生成的多分辨率图也会被剥离 | 启用:进行纹理贴图剥离 不启用:不进行此操作  | 
| StackTrace(堆栈跟踪) | 优化 | 选择在特定的上下文中允许的日志记录类型和日志记录的方式 | 日志记录类型: 1. Error:错误信息 2. Assert:断言(用于检测非法情况的)信息 3. Warning:警告信息 4. Log:打印日志信息 5. Exception:异常信息 日志记录方式: 1. None:不记录 2. ScriptOnly:只在运行脚本时记录信息 3. Full:一直记录  | 
| Clamp BlendShapes(Deprecated)(钳制混合形状权重的范围) | 优化 | 启用骨骼蒙皮动画中钳制混合形状权重的范围,已弃用 | 该功能已弃用 | 
8.PublishingSettings-KeystoreManager
| 设置项 | 分类 | 描述 | 可选值及说明 | 
|---|---|---|---|
| Android 中的签名 | 发布设置准备知识 | Android 要求所有已安装应用程序使用数字证书做数字签名,数字证书私钥由开发者持有,用于标示应用程序作者并建立信任关系,证书可自制,未正确签名应用无法安装或运行 | 数字证书私钥由开发者持有,可使用自制签名证书,无正确签名应用在 Android 系统(模拟器或真实设备)无法安装运行 | 
| Android 应用程序清单(AndroidManifest.xml) | 发布设置准备知识 | Android 应用程序工程中的 xml 文件,用于声明应用程序组件,确定用户权限、最低 API 级别,声明硬件和软件特性等,引入 Android 第三方 SDK 或与 Android 交互时需编辑,无需求可忽略 | 声明应用程序组件、确定用户权限(如网络、通讯录、信息读取等)、声明最低 API 级别、声明硬件和软件特性(如摄像头、蓝牙、多点触碰等) | 
| Gradle | 发布设置准备知识 | 一个自动化构建开源工具,基于 JVM,主要面向 Java 应用,也支持其他语言,可用于 Android 项目构建,使项目更简洁,在 Unity 中用于打包安卓应用程序,Android Studio 也使用它打包 | 基于 JVM 的自动化构建工具,用于 Android 项目构建,帮助打包安卓应用程序 | 
| ProGuard | 发布设置准备知识 | 一个压缩、优化和混淆 Java 字节码文件的免费工具,可删除无用内容、优化字节码、重命名类等,常用于 Android 开发混淆项目,增加反编译难度,Unity 发布安卓应用默认使用 | 压缩、优化和混淆 Java 字节码文件,删除无用类、字段、方法和属性,删除注释,重命名类、字段等 | 
| R8 | 发布设置准备知识 | 相对 ProGuard 较新的 Android 混淆编译器,可减小应用大小,Android Gradle 3.4.0 或更高版本构建项目不再使用 ProGuard 优化,Android Sutdio 3.3 版本开始用它做代码压缩器,比 ProGuard 缩减代码更快、输出大小更优,Unity 发布安卓应用可选择使用 | 较新的 Android 混淆编译器,减小应用大小,在特定版本 Android 构建项目中替代 ProGuard,缩减代码更快、输出更优 | 
| 密钥管理器 | 发布设置 | 可通过密钥管理器创建、配置和加载密钥和密钥库,可在 Keystore Manager 窗口或 Publishing Settings 发布设置中加载现有密钥库和密钥 | - | 
| 下拉菜单(密钥管理器) | 发布设置 | 在该下拉菜单选择创建新的密钥库或加载现有的密钥库 | 1. Create New:创建新的密钥库 - Anywhere:打开项目文件夹根目录下的文件资源管理器,是 Unity 存储密钥库的默认位置 - In Dedicated Location:将密钥库文件保存到计算机中的另一个目录中,为协同开发方便,建议保存在项目文件夹下 2. Select Existing:选择现有密钥库,可指定加载现有密钥库  | 
| Password(密钥库的密码) | 发布设置 | 密钥库的密码 | 设置密钥库密码 | 
| Confirm password(创建密钥库时需要重复一次密码) | 发布设置 | 创建密钥库时重复输入密码以确认 | 重复输入密码与 Password 一致 | 
| Existing Keys(现有密钥) | 发布设置 | 界面中包含当前密钥库包含的密钥的只读列表 | 显示当前密钥库中密钥的只读信息 | 
| New Key Values(新键值) | 发布设置 | 可在此处在密钥库中添加密钥 | 1. Alias:密钥的标识名字,一般分不同厂商,如 huawei、xiaomi 2. Password:密钥的密码 3. Confirm password:密钥的确认密码,必须和密码相同 4. Validity(years):有效期(年),默认有效期为 50 年,一般设置较大值,可理解为管理应用程序的有效时间 5. First and Last Name:名字和姓氏 6. Organizational Unit:所在企业中的部门 7. Organization:组织,管理应用程序的组织,一般为公司名 8. City Or Locality:个人所在的城市或地区 9. State or Province:个人所在的州或省 10. Country Code(XX):个人的国家代码,中国的国家代码为 86  | 
9.PublishingSettings-其他
项目密钥库
 项目密钥库是用来保存签名密钥,以保障应用程序安全性的容器。若要加载并使用现有的密钥库,需进行以下操作:
- 启动 Custom Keystore。
 - 在 Select 下拉列表里选 Browse,从文件系统挑选密钥库。
 - 输入密钥库密码。
 
相关设置说明
| 设置项 | 描述 | 
|---|---|
| Custom Keystore | 启用后,能够指定加载和使用现有的密钥库 | 
| Select | 启用 Custom Keystore 后,可通过此按钮选择要使用的密钥库 | 
| Path | 显示所选密钥库所在的路径 | 
| Password | 输入用于加载所选密钥库的密码 | 
| Project Key | 加载密钥库后,Unity 会加载库中的全部密钥。可在此设置从该密钥库中选择哪一个密钥作为项目的活动密钥 | 
| Alias | 选择用于打开项目的密钥 | 
| Password(项目密钥密码) | 输入所选密钥的密码 | 
构建相关
 默认情况下,Unity 采用安装时提供的清单文件、Gradle 模板和文件来构建应用程序。若要进行自定义,需启用 Build 下方的复选框,此时文件会出现在复选框下方,接着打开新文件进行修改,保存修改后的文件,Unity 下次构建应用程序时就会自动使用这些文件。
| 设置项 | 描述 | 
|---|---|
| Custom Main Manifest | 这是一个 xml 文件,可在此决定权限设置,还能设置是否启用某些安卓功能等 | 
| Custom Launcher Manifest | 同样是 xml 文件,可在此决定应用程序启动前的外观和行为 | 
| Custom Main Gradle Template | Gradle 是一个构建系统,能自动执行许多构建过程并避免常见的构建错误,Unity 对所有 Android 版本都使用 Gradle | 
| Custom Launcher Gradle Template | 这是一个 gradle 文件,包含了构建 Android 应用程序的相关说明 | 
| Custom Base Gradle Template | 是一个 gradle 文件,包含了所有其他模板和 Gradle 项目间的共享配置 | 
| Custom Gradle Properties Template | 属于属性文件,包含了 Gradle 生成环境的配置设置 | 
| Custom Proguard File | 是一个 txt 文件,包含了缩小过程的配置设置 | 
代码混淆和缩小相关
 Minify 是对应用程序代码进行缩减、混淆和优化的过程,能减小代码大小并增加反编译难度。使用 Minify 设置可确定 Unity 何时以及如何将缩小应用于构建。不过使用该功能会延长发布时间,还会使调试变得复杂,所以通常在最终发布时才使用,平时发布测试应用时无需开启。
| 设置项 | 描述 | 
|---|---|
| Use R8 | 默认情况下,Unity 使用 Proguard 进行缩小。启用此复选框可改用 R8 | 
| Release | 若希望 Unity 在发布构建时缩小应用程序的代码,需启用此复选框 | 
| Debug | 若希望 Unity 在调试构建时缩小应用程序的代码,需启用此复选框 | 
拆分应用程序二进制文件
 启用 Split Application Binary 选项,可将输出包拆分为主包 (APK) 和扩展包 (OBB) 包。若要发布大于 100 MB 的应用程序,Google Play 应用商店要求使用此功能。
三、交互项目创建
1.Unity调用安卓
| 操作类型 | 方法调用格式 | 描述 | 
|---|---|---|
| 成员变量获取 | androidJavaObject.Get<变量类型>("变量名") | 用于获取 Android Java 对象的成员变量 | 
| 成员变量赋值 | androidJavaObject.Set<变量类型>("变量名", 值) | 用于给 Android Java 对象的成员变量赋值 | 
| 静态变量获取 | androidJavaObject.GetStatic<变量类型>("变量名") | 用于获取 Android Java 对象的静态变量 | 
| 静态变量赋值 | androidJavaObject.SetStatic<变量类型>("变量名", 值) | 用于给 Android Java 对象的静态变量赋值 | 
| 无返回值成员函数调用 | androidJavaObject.Call("函数名", 参数) | 调用 Android Java 对象的无返回值成员函数 | 
| 有返回值成员函数调用 | androidJavaObject.Call<返回值类型>("函数名", 参数) | 调用 Android Java 对象的有返回值成员函数 | 
| 无返回值静态函数调用 | androidJavaObject.CallStatic("函数名", 参数) | 调用 Android Java 对象的无返回值静态函数 | 
| 有返回值静态函数调用 | androidJavaObject.CallStatic<返回值类型>("函数名", 参数) | 调用 Android Java 对象的有返回值静态函数 | 
代码示例:
androidJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");androidJavaObject = androidJavaClass.GetStatic<AndroidJavaObject>("currentActivity");btnOpenAndroidActivity.onClick.AddListener((() =>{androidJavaObject.Call("OpenActivity");}));
 
2.安卓调用Unity
Android调用Unity规则
- 需要写在继承MonoBehaviour的脚本中。
 - 需要挂载在场景中处于激活状态的GameObject上。
 - 交互时,在Android端调用API:
 
调用方法:UnityPlayer.UnitySendMessage("对象名", "函数名", "参数信息")
 注意:该API中的参数只能是String类型或者为null
3.Android开发的必备原理
(1)Android应用程序的基本构成
 Android SDK:为开发Android应用程序提供了各种各样的API和工具,是进行Android开发的基础支撑,它包含了丰富的开发资源。
 编程语言:主要使用Java或者Kotlin语言进行开发,这两种语言都提供了大量丰富的库和API,开发者可以利用这些来实现应用的各种功能。
 XML配置文件:在Android应用程序中,XML用于定义UI布局、样式以及资源信息等。它承担着界面和资源相关的配置工作,使得开发者能够设计出不同的用户界面。
- 应用程序组件:Android应用程序由以下四种组件组成: 
- Activity(活动):主要用于实现用户界面,代表着一个屏幕或窗口,其中包含了各种UI组件,如按钮、文本、输入框等,是用户与应用进行交互的主要界面载体。
 - Service(服务):是一种可以在后台执行长时间运行操作的组件,没有用户界面,通常用于处理和交互无关的逻辑,例如上传、下载、音乐播放等后台任务。
 - Broadcast Receiver(广播接收器):主要负责接收系统或者其他应用程序发出的广播消息。这些消息可以来自系统事件,比如网络连接变化、设备启动等,也可以来自其它应用程序。
 - Content Provider(内容提供程序):用于管理应用程序数据,既可以让其它应用程序或系统访问本应用中的数据,也能让本应用访问其它应用或系统的数据,例如用于存储应用程序的图片、音频、视频等数据。
 
 
在开发Android应用程序时,主要是编写基于这四种组件的逻辑。日常开发中,更多的是利用Android SDK中的API开发Activity活动组件,类似于游戏中UI界面逻辑开发。只有在有其他后台或者拓展功能需求时,才会使用其它三种组件。
(2)AndroidManifest.xml文件的作用
 AndroidManifest.xml是Android应用程序的应用清单文件,每个应用程序都必须包含一个,并且文件名必须是AndroidManifest.xml。该文件中包含了应用程序的配置信息,Android系统会根据这些配置来运行应用程序。
以下是该文件中包含的重要信息:
 应用程序组件信息:包含应用程序的四大组件(Activity、Service、Broadcast Receiver、Content Provider)的相关内容。
 应用程序权限:如存储权限、互联网访问权限等等,通过这些权限声明,应用才能在系统中获得相应的操作许可。
 应用程序元数据:包括程序名称、版本号、图标、包名等等,这些信息用于标识和描述应用程序。
 应用程序启动信息:指定默认启动哪一个Activity,决定了应用启动时呈现给用户的第一个界面。
(3)常用标签作用
 manifest标签:作为文件的根标签,主要包含包名、版本号等信息,是整个应用配置的基础。
 uses-permission标签:用于声明应用程序所需的权限,例如存储权限、网络访问权限等,明确应用在系统中可以执行的操作。
 application标签:应用程序的各组件都包含在其中,并且还可以配置一些图标、文本、样式等信息,是应用组件的容器。
 activity标签:用于描述Activity组件的具体信息,包括其属性和相关配置。
 meta-data标签:为Activity提供元数据,这些数据可以通过API获取,为Activity添加额外的信息。
 intent-filter标签:为组件声明意图(intent),其中包含action(意图类型)和category(意图类别)两个子标签,用于定义组件的意图匹配规则,决定组件在何种情况下被激活。
4.交互项目创建
-  
Unity项目:创建项目后切换到Android平台,设置包名和Android版本。
 -  
Android Studio项目:选择Phone and Tablet,创建Empty Activity项目。确保包名和Minimum SDK版本与Unity项目一致,若版本缺失,在Android Studio中下载。创建完成后,删除工程里两个Test项目和res下的无用资源。
 -  
build.gradle文件:在Android Studio的Project页签切换到Project视图,展开app页签,打开build.gradle文件。将
id 'com.android.application'改为id 'com.android.library',删除defaultConfig中的applicationId项,点击右上角“Sync Now”同步。 -  
导入classes.jar包:从
Unity安装目录\Data\PlaybackEngines\AndroidPlayer\Variations\mono(il2cpp)\Release\Classes路径拷贝包到Android Studio的app\libs下,选中包右键点击“Add As Library”。 -  
导入UnityPlayerActivity脚本:将
Unity安装目录/Data/PlaybackEngines/AndroidPlayer/Source/…路径下的文件夹拷贝到Android Studio的app/src/main/java中。 -  
修改MainActivity脚本:让其继承
UnityPlayerActivity,注释onCreate函数里的setContentView代码。

 -  
修改AndroidManifest.xml配置文件:删除
application中的无用内容,在activity里添加<meta-data android:name="unityplayer.UnityActivity" android:value="true"/>。

 
8.选中 MainActivity 脚本,通过工具栏“Build” -> “Make Moudle …” 生成Unity用的aar包。若打包时出现下载提示,等待下载完成即可构建成功。
 9.将生成的aar包导入Unity。