介绍
Unity 在构建 Android APK 时需要指定当前使用的 Android SDK
、Android NDK
、Java SDK
的路径。
如果不同版本的 Unity 同时存在,而其依赖的库的版本并不统一,因此需要在构建时显式确定性地指定库的路径。
接口
由于 Unity 将相关路径直接设置在 EditorPrefs 中,可以通过编辑器脚本 API EditorPrefs.GetString
、EditorPrefs.SetString
设置。
- AndroidSdkRoot
- AndroidNdkRoot
- JdkPath
方案
由于要为自动打包考虑,所以要考虑多个候选项、跨平台。
按照以下顺序执行:
- 环境变量
- 不同平台默认值
代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public static void UpdateAndroidSettings()
{
UpdateSetting("AndroidSdkRoot", "ANDROID_SDK", "C:\AndroidSDK", "/Applications/android-sdk-macosx");
UpdateSetting("AndroidNdkRoot", "ANDROID_NDK", "C:\AndroidNDK", "/Applications/android-ndk-r13b");
UpdateSetting("JdkPath", "JAVA_SDK", "C:\JavaSDK", "/Library/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/Contents/Home/");
}
private static void UpdateSetting(string key, string environmentKey, string defaultWindowsPath, string defaultMacOSPath)
{
string environmentPath = Environment.GetEnvironmentVariable(environmentKey);
if (!string.IsNullOrEmpty(environmentPath) && Directory.Exists(environmentPath))
{
EditorPrefs.SetString(key, environmentPath);
return;
}
string defaultPath = Application.platform == RuntimePlatform.WindowsEditor ? defaultWindowsPath : defaultMacOSPath;
if (!string.IsNullOrEmpty(defaultPath) && Directory.Exists(defaultPath))
{
EditorPrefs.SetString(key, defaultPath);
return;
}
throw new DirectoryNotFoundException(string.Format("{0} {1} {2}", key, environmentKey, defaultPath));
}
|