返回「计算机、信息技术与工程」

【Unity】自动打包脚本整理

更多
Markdown 结构化数据
本文目录 21 个章节

【Unity】自动打包脚本整理

# 【Unity】自动打包脚本整理

创建时间:2021/4/28 19:51

  • 相关技术概念
    • ABB
    • OBB
    • Android SDK 设置相关
      • UnityEditor界面设置SDK
      • 脚本设置SDK
      • Best Practice: 使用并修改Unity内置的SDK
      • 注:Unity猜测SDK会导致构建时间过长的问题
    • 打包脚本
      • 设置
        • 通用
        • Android
        • iOS平台
      • 打包代码
        • Android
        • iOS平台
        • Windows平台
      • Tool
    • 遇到的坑
      • Build java.io.IOException: Unable to delete XXX\signing-config.json
    • Ref

相关技术概念

ABB

OBB

Android SDK 设置相关

在打包时,会检测AndroidSDK、NDK等工具的目录,验证目录的正确性,如下图的BuildLog所示:

assets/0017 - 【Unity】自动打包脚本整理__resource-004-1726d9f5666b.png

UnityEditor界面设置SDK

assets/0017 - 【Unity】自动打包脚本整理__resource-002-3119e8950063.png

在Editor下,勾选"with Unity"即为选择UseEmbedded(使用Unity嵌入的Android相关工具)。如果不勾选,可以设置自定义路径,在Preference窗口设置路径的行为与接口EditorPrefs.SetString("AndroidSdkRoot", value);设置的内容是一致的。

无论在Editor界面点击Build打包,还是用batchmode调用BuildPlayer函数打包,Unity使用的SDK都会按照 “Edit->Preferences->External Tools” 当中的设置来进行。

如果勾选了使用Unity自带的SDK,那么通过设置EditorPrefs方式修改也是没有用的。

脚本设置SDK

Unity 使用的SDK配置,是保存在EditorPrefs当中的。可以通过以下脚本修改。

string s = String.Empty;

Best Practice: 使用并修改Unity内置的SDK

Unity Editor自己安装的SDK就比较方便并且稳定,如果SDK所包含的API Level不符合要求,修改也是比较容易的。 Unity安装AndroidSDK后,会把SDK放在Unity安装目录下找到以下位置

string s = String.Empty;

使用SDK目录下自带的sdkmanager.bat脚本即可实现安装指定的API Level。

string s = String.Empty;

注:Unity猜测SDK会导致构建时间过长的问题

而如果使用batchmode运行,如果设置错误,会在环境变量当中查找,存在一个GuessDirectory的过程,代码如下:

string s = String.Empty;

检索可能涉及到的相关环境变量大致如下: Windows系统上:

  • ANDROID_SDK_ROOT
  • ANDROID_NDK_ROOT
  • LOCALAPPDATA
  • ProgramFiles
  • ProgramFiles(x86)

类Unix系统上:

  • HOME/Library/Android/sdk

这就会导致Detecting Android SDK的时间过长,或者甚至导致Android SDK not found而打包失败。如下图,是某次打包的Editor.log,检测AndroidSDK的耗时约6分钟:

assets/0017 - 【Unity】自动打包脚本整理__resource-003-ae666f8dc70e.png

双击打包的bat脚本与使用Pipeline运行时的区别就在于环境变量不同,因此可能会出现双击bat打包成功,而使用Pipeline打包失败的现象。

Pipeline的参数化构建功能就是用来解决环境变量相关问题的。

相关讨论或博客: https://forum.unity.com/threads/unity-command-line-doesnt-find-android-sdk.162976/ https://blog.csdn.net/KindSuper_liu/article/details/89891780 https://medium.com/@johanesriandy/week-one-setup-jenkins-to-build-android-app-using-gradle-1534755ca1bc

打包脚本

设置

通用

string s = String.Empty;

Android

string s = String.Empty;

iOS平台

string s = String.Empty;

打包代码

Android

string s = String.Empty;

iOS平台

string s = String.Empty;

Windows平台

string s = String.Empty;

Tool

string s = String.Empty;

遇到的坑

Build java.io.IOException: Unable to delete XXX\signing-config.json

方案一: Just Delete the File signing_config.json and re-run And it will work fine

方案二: 授予Users完全控制权限:

assets/0017 - 【Unity】自动打包脚本整理__resource-001-e33e6a5fb87a.png

Ref

https://chenghu.online/posts/a27a69b1/