You've already forked Commercialization.topon
167 lines
5.6 KiB
C#
167 lines
5.6 KiB
C#
#if UNITY_EDITOR
|
|
using System;
|
|
using System.IO;
|
|
using System.Reflection;
|
|
using UnityEditor;
|
|
using UnityEditor.Build.Reporting;
|
|
using UnityEngine;
|
|
|
|
public static class IAAAdAndroidBuild
|
|
{
|
|
private const string OutputDirectory = "Build/Android";
|
|
private const string OutputApkPath = OutputDirectory + "/IAAAdDebugSample-starveg.apk";
|
|
private const string KeystorePath = "Build/Android/keys/starveg-test.keystore";
|
|
private const string KeystorePassword = "Foldcc123!";
|
|
private const string KeyAliasName = "starvegtest";
|
|
private const string PackageName = "com.foldcc.starveg";
|
|
|
|
[MenuItem("Topon/Build IAA Android Test APK")]
|
|
public static void BuildAndroidTestApk()
|
|
{
|
|
EnsureBuildFolders();
|
|
ConfigurePlayerSettings();
|
|
var resolverState = CaptureResolverState();
|
|
|
|
try
|
|
{
|
|
ApplyBatchFriendlyResolverSettings();
|
|
|
|
var scenes = new[] { "Assets/Samples/IAAAdDebugSample/Scenes/IAAAdDebugSample.unity" };
|
|
var options = new BuildPlayerOptions
|
|
{
|
|
scenes = scenes,
|
|
target = BuildTarget.Android,
|
|
locationPathName = OutputApkPath,
|
|
options = BuildOptions.None
|
|
};
|
|
|
|
var report = BuildPipeline.BuildPlayer(options);
|
|
if (report.summary.result != BuildResult.Succeeded)
|
|
{
|
|
throw new Exception(
|
|
$"Android APK build failed: {report.summary.result} ({report.summary.totalErrors} errors)");
|
|
}
|
|
|
|
Debug.Log($"[IAA Build] APK generated: {Path.GetFullPath(OutputApkPath)}");
|
|
}
|
|
finally
|
|
{
|
|
RestoreResolverState(resolverState);
|
|
}
|
|
}
|
|
|
|
public static void BuildAndroidTestApkInBatchMode()
|
|
{
|
|
BuildAndroidTestApk();
|
|
EditorApplication.Exit(0);
|
|
}
|
|
|
|
private static void ConfigurePlayerSettings()
|
|
{
|
|
PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.Android, PackageName);
|
|
PlayerSettings.defaultInterfaceOrientation = UIOrientation.Portrait;
|
|
PlayerSettings.Android.targetArchitectures = AndroidArchitecture.ARMv7 | AndroidArchitecture.ARM64;
|
|
PlayerSettings.Android.useCustomKeystore = true;
|
|
PlayerSettings.Android.keystoreName = Path.GetFullPath(KeystorePath);
|
|
PlayerSettings.Android.keystorePass = KeystorePassword;
|
|
PlayerSettings.Android.keyaliasName = KeyAliasName;
|
|
PlayerSettings.Android.keyaliasPass = KeystorePassword;
|
|
PlayerSettings.bundleVersion = string.IsNullOrWhiteSpace(PlayerSettings.bundleVersion)
|
|
? "1.0.0"
|
|
: PlayerSettings.bundleVersion;
|
|
PlayerSettings.Android.bundleVersionCode = Mathf.Max(1, PlayerSettings.Android.bundleVersionCode);
|
|
AssetDatabase.SaveAssets();
|
|
}
|
|
|
|
private static void EnsureBuildFolders()
|
|
{
|
|
Directory.CreateDirectory(Path.GetFullPath(OutputDirectory));
|
|
Directory.CreateDirectory(Path.GetFullPath(Path.GetDirectoryName(KeystorePath) ?? OutputDirectory));
|
|
}
|
|
|
|
private static ResolverState CaptureResolverState()
|
|
{
|
|
var settingsType = GetResolverSettingsType();
|
|
return new ResolverState
|
|
{
|
|
EnableAutoResolution = GetResolverBool(settingsType, "EnableAutoResolution"),
|
|
AutoResolveOnBuild = GetResolverBool(settingsType, "AutoResolveOnBuild"),
|
|
PromptBeforeAutoResolution = GetResolverBool(settingsType, "PromptBeforeAutoResolution")
|
|
};
|
|
}
|
|
|
|
private static void ApplyBatchFriendlyResolverSettings()
|
|
{
|
|
var settingsType = GetResolverSettingsType();
|
|
SetResolverBool(settingsType, "EnableAutoResolution", false);
|
|
SetResolverBool(settingsType, "AutoResolveOnBuild", false);
|
|
SetResolverBool(settingsType, "PromptBeforeAutoResolution", false);
|
|
}
|
|
|
|
private static void RestoreResolverState(ResolverState state)
|
|
{
|
|
var settingsType = GetResolverSettingsType();
|
|
SetResolverBool(settingsType, "EnableAutoResolution", state.EnableAutoResolution);
|
|
SetResolverBool(settingsType, "AutoResolveOnBuild", state.AutoResolveOnBuild);
|
|
SetResolverBool(settingsType, "PromptBeforeAutoResolution", state.PromptBeforeAutoResolution);
|
|
}
|
|
|
|
private static Type GetResolverSettingsType()
|
|
{
|
|
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
|
|
{
|
|
var type = assembly.GetType("GooglePlayServices.SettingsDialog");
|
|
if (type != null)
|
|
{
|
|
return type;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
private static bool GetResolverBool(Type settingsType, string propertyName)
|
|
{
|
|
if (settingsType == null)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
var property = settingsType.GetProperty(
|
|
propertyName,
|
|
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static);
|
|
if (property == null)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return (bool)property.GetValue(null, null);
|
|
}
|
|
|
|
private static void SetResolverBool(Type settingsType, string propertyName, bool value)
|
|
{
|
|
if (settingsType == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var property = settingsType.GetProperty(
|
|
propertyName,
|
|
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static);
|
|
if (property == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
property.SetValue(null, value, null);
|
|
}
|
|
|
|
private struct ResolverState
|
|
{
|
|
public bool EnableAutoResolution;
|
|
public bool AutoResolveOnBuild;
|
|
public bool PromptBeforeAutoResolution;
|
|
}
|
|
}
|
|
#endif
|