diff --git a/sample/Assets/Editor/AndroidBuilder.cs b/sample/Assets/Editor/AndroidBuilder.cs new file mode 100644 index 00000000..f904defd --- /dev/null +++ b/sample/Assets/Editor/AndroidBuilder.cs @@ -0,0 +1,124 @@ +#if UNITY_EDITOR + +using UnityEngine; +using UnityEditor; +using UnityEditor.SceneManagement; +using AltTester.AltTesterUnitySDK.Editor; +using AltTester.AltTesterUnitySDK; +using System; +using System.IO; + +public class AndroidBuilder +{ + private const string DefaultBuildPath = "Builds/Android/SampleApp.apk"; + + static void Build() + { + BuildPlayer(DefaultBuildPath, BuildOptions.Development); + } + + static void BuildForAltTester() + { + BuildPlayer(DefaultBuildPath, BuildOptions.Development | BuildOptions.IncludeTestAssemblies, true); + } + + + private static void BuildPlayer(string defaultBuildPath, BuildOptions buildOptions, bool setupForAltTester = false) + { + try + { + string buildPath = GetBuildPathFromArgs(defaultBuildPath); + + BuildPlayerOptions buildPlayerOptions = CreateBuildPlayerOptions(buildPath, buildOptions); + + if (setupForAltTester) + { + SetupAltTester(buildPlayerOptions); + } + + var results = BuildPipeline.BuildPlayer(buildPlayerOptions); + + if (setupForAltTester) + { + // Clean up AltTester settings after build + AltBuilder.RemoveAltTesterFromScriptingDefineSymbols(BuildTargetGroup.Android); + RemoveAltFromScene(buildPlayerOptions.scenes[0]); + } + } + catch (Exception exception) + { + Debug.LogException(exception); + } + } + + private static string GetBuildPathFromArgs(string defaultBuildPath) + { + string[] args = Environment.GetCommandLineArgs(); + for (int i = 0; i < args.Length; i++) + { + if (args[i] == "--buildPath" && i + 1 < args.Length) + { + return args[i + 1]; + } + } + return defaultBuildPath; + } + + private static BuildPlayerOptions CreateBuildPlayerOptions(string buildPath, BuildOptions buildOptions) + { + return new BuildPlayerOptions + { + scenes = new[] + { + "Assets/Scenes/SelectAuthMethod.unity", + "Assets/Scenes/UnauthenticatedScene.unity", + "Assets/Scenes/AuthenticatedScene.unity", + "Assets/Scenes/ZkEvmGetBalance.unity", + "Assets/Scenes/ZkEvmGetTransactionReceipt.unity", + "Assets/Scenes/ZkEvmSendTransaction.unity", + "Assets/Scenes/ImxNftTransfer.unity" + }, + locationPathName = buildPath, + target = BuildTarget.Android, + options = buildOptions + }; + } + + private static void SetupAltTester(BuildPlayerOptions buildPlayerOptions) + { + AltBuilder.AddAltTesterInScriptingDefineSymbolsGroup(BuildTargetGroup.Android); + AltBuilder.CreateJsonFileForInputMappingOfAxis(); + + var instrumentationSettings = new AltInstrumentationSettings(); + AltBuilder.InsertAltInScene(buildPlayerOptions.scenes[0], instrumentationSettings); + } + + public static void RemoveAltFromScene(string scene) + { + Debug.Log("Removing AltTesterPrefab from the [" + scene + "] scene."); + + var sceneToModify = EditorSceneManager.OpenScene(scene); + + // Find the AltTesterPrefab instance in the scene + var altRunner = GameObject.FindObjectOfType(); + + if (altRunner != null) + { + // Destroy the AltTesterPrefab instance + GameObject.DestroyImmediate(altRunner.gameObject); + + // Mark the scene as dirty and save it + EditorSceneManager.MarkSceneDirty(sceneToModify); + EditorSceneManager.SaveOpenScenes(); + + Debug.Log("AltTesterPrefab successfully removed from the [" + scene + "] scene."); + } + else + { + Debug.LogWarning("AltTesterPrefab was not found in the [" + scene + "] scene."); + } + } + +} + +#endif diff --git a/sample/Assets/Editor/AndroidBuilder.cs.meta b/sample/Assets/Editor/AndroidBuilder.cs.meta new file mode 100644 index 00000000..c1886d4b --- /dev/null +++ b/sample/Assets/Editor/AndroidBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9f5492bc5cfc64fd9a2cde3b066c6532 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: