107 lines
4.2 KiB
C#
107 lines
4.2 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);
|
|
PlayerSettings.iOS.appleDeveloperTeamID = "P78AXXW29G";
|
|
PlayerSettings.iOS.appleEnableAutomaticSigning = true;
|
|
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;
|
|
}
|
|
}
|