com.guru.unity.max/Amazon/Scripts/Editor/AmazonBuildScript.cs

105 lines
4.1 KiB
C#

using UnityEngine;
using UnityEditor;
using System;
using System.Linq;
using UnityEditor.Callbacks;
public class AmazonBuildScript
{
public static string DEFAULT_APK_NAME = "APSUnityTestApp.apk";
public static string DEFAULT_IOS_BUILD_DIR = "Builds/iOS";
public static void BuildIos()
{
string[] scenes = EditorBuildSettings.scenes.Where(s => s.enabled).Select(s => s.path).ToArray();
EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.iOS, BuildTarget.iOS);
string outputFileName = GetArg("-output", DEFAULT_IOS_BUILD_DIR);
BuildPipeline.BuildPlayer(scenes, outputFileName, BuildTarget.iOS, BuildOptions.Development);
}
public static void BuildAndroid()
{
string[] scenes = EditorBuildSettings.scenes.Where(s => s.enabled).Select(s => s.path).ToArray();
EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.Android, BuildTarget.Android);
string outputFileName = GetArg("-output", DEFAULT_APK_NAME);
BuildPipeline.BuildPlayer(scenes, outputFileName, BuildTarget.Android, BuildOptions.Development);
EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.iOS, BuildTarget.iOS);
}
public static void SwitchToIos()
{
EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.iOS, BuildTarget.iOS);
}
private static string GetArg(string name, string defaultVal)
{
var args = System.Environment.GetCommandLineArgs();
for (int i = 0; i < args.Length; i++)
{
if (args[i] == name && args.Length > i + 1)
{
return args[i + 1];
}
}
return defaultVal;
}
public static void BuildExternalAndroid()
{
string[] envvars = new string[]
{
"ANDROID_KEYSTORE_NAME", "ANDROID_KEYSTORE_PASSWORD", "ANDROID_KEYALIAS_NAME", "ANDROID_KEYALIAS_PASSWORD", "ANDROID_SDK_ROOT"
};
if (EnvironmentVariablesMissing(envvars))
{
Environment.ExitCode = -1;
return; // note, we can not use Environment.Exit(-1) - the buildprocess will just hang afterwards
}
//Available Playersettings: https://docs.unity3d.com/ScriptReference/PlayerSettings.Android.html
//set the internal apk version to the current unix timestamp, so this increases with every build
PlayerSettings.Android.bundleVersionCode = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
//set the other settings from environment variables
PlayerSettings.Android.keystoreName = Environment.GetEnvironmentVariable("ANDROID_KEYSTORE_NAME");
PlayerSettings.Android.keystorePass = Environment.GetEnvironmentVariable("ANDROID_KEYSTORE_PASSWORD");
PlayerSettings.Android.keyaliasName = Environment.GetEnvironmentVariable("ANDROID_KEYALIAS_NAME");
PlayerSettings.Android.keyaliasPass = Environment.GetEnvironmentVariable("ANDROID_KEYALIAS_PASSWORD");
EditorPrefs.SetString("AndroidSdkRoot", Environment.GetEnvironmentVariable("ANDROID_SDK_ROOT"));
//Get the apk file to be built from the command line argument
string outputapk = Environment.GetCommandLineArgs().Last();
BuildPipeline.BuildPlayer(GetScenePaths(), outputapk, BuildTarget.Android, BuildOptions.None);
}
static string[] GetScenePaths()
{
string[] scenes = new string[EditorBuildSettings.scenes.Length];
for (int i = 0; i < scenes.Length; i++)
{
scenes[i] = EditorBuildSettings.scenes[i].path;
}
return scenes;
}
static bool EnvironmentVariablesMissing(string[] envvars)
{
string value;
bool missing = false;
foreach (string envvar in envvars)
{
value = Environment.GetEnvironmentVariable(envvar);
if (value == null)
{
Console.Write("BUILD ERROR: Required Environment Variable is not set: ");
Console.WriteLine(envvar);
missing = true;
}
}
return missing;
}
}