【Unity】自动打包脚本整理
本文目录 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所示:

UnityEditor界面设置SDK

在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分钟:

双击打包的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完全控制权限:
