Skip to content

Commit

Permalink
Add android build pipeline editor script
Browse files Browse the repository at this point in the history
  • Loading branch information
magicjar committed Oct 27, 2021
1 parent a75c80b commit 43146f6
Show file tree
Hide file tree
Showing 5 changed files with 147 additions and 1 deletion.
8 changes: 8 additions & 0 deletions Editor.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions Editor/BuildPipelines.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

116 changes: 116 additions & 0 deletions Editor/BuildPipelines/AndroidBuildPipeline.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
#if UNITY_ANDROID
using UnityEngine;
using UnityEditor;
using UnityEditor.Build;
using UnityEditor.Build.Reporting;
using System.Reflection;
using System.IO;

[InitializeOnLoad]
sealed class AndroidBuildPipeline : IPostprocessBuildWithReport
{
public int callbackOrder => 100;

public enum BuildType { Production, Development }

static void AndroidBuild(BuildType buildType, bool includeARM64 = false)
{
PlayerSettings.Android.targetArchitectures |= AndroidArchitecture.ARMv7 | AndroidArchitecture.ARM64;

switch (buildType)
{
case BuildType.Production:
EditorUserBuildSettings.buildAppBundle = true;
EditorUserBuildSettings.development = false;
break;
default:
EditorUserBuildSettings.buildAppBundle = false;
if (!includeARM64)
PlayerSettings.Android.targetArchitectures = AndroidArchitecture.ARMv7;
break;
}

EditorUserBuildSettings.SetBuildLocation(EditorUserBuildSettings.activeBuildTarget, GetBuildPath(buildType));

BuildPlayerOptions options = GetBuildPlayerOptions();
options.options |= BuildOptions.DetailedBuildReport;

if (buildType == BuildType.Production)
{
options.options |= BuildOptions.CompressWithLz4HC;
}
else
{
options.options |= BuildOptions.Development;
options.options |= BuildOptions.CompressWithLz4;
}

BuildReport report = BuildPipeline.BuildPlayer(options);
BuildSummary summary = report.summary;

switch (summary.result)
{
case BuildResult.Cancelled:
break;
case BuildResult.Failed:
Debug.Log("Build failed.");
break;
case BuildResult.Succeeded:
Debug.Log("Build succeeded. " + summary.outputPath);
EditorUtility.RevealInFinder(summary.outputPath);
break;
case BuildResult.Unknown:
break;
default:
break;
}
}

static string GetBuildPath(BuildType buildType)
{
string defaultFolder = Path.Combine(Directory.GetParent(Application.dataPath).FullName, "Builds");
// Based on semantic versioning
string defaultName = $"{Application.productName} {PlayerSettings.bundleVersion}{(buildType == BuildType.Development ? "-dev" : "")}+{PlayerSettings.Android.bundleVersionCode}";
string extension = (EditorUserBuildSettings.buildAppBundle ? ".aab" : ".apk");
return Path.Combine(defaultFolder, defaultName + extension).Replace("\\", "/");
}

static BuildPlayerOptions GetBuildPlayerOptions(bool askForLocation = false, BuildPlayerOptions defaultOptions = new BuildPlayerOptions())
{
// Get static internal "GetBuildPlayerOptionsInternal" method
MethodInfo method = typeof(BuildPlayerWindow.DefaultBuildMethods).GetMethod(
"GetBuildPlayerOptionsInternal",
BindingFlags.NonPublic | BindingFlags.Static);

// invoke internal method
return (BuildPlayerOptions)method.Invoke(
null,
new object[] { askForLocation, defaultOptions });
}

public void OnPostprocessBuild(BuildReport report)
{
PlayerSettings.Android.targetArchitectures |= AndroidArchitecture.ARMv7 | AndroidArchitecture.ARM64;
}

#region MENU
[MenuItem("Agraris/Build/Android - Development", false, 1)]
public static void DevelopmentAndroidBuild()
{
AndroidBuild(BuildType.Development);
}

[MenuItem("Agraris/Build/Android - Development + ARM64 (Slow)", false, 2)]
public static void Development64AndroidBuild()
{
AndroidBuild(BuildType.Development, true);
}

[MenuItem("Agraris/Build/Android - Production", false, 3)]
public static void ProductionAndroidBuild()
{
AndroidBuild(BuildType.Production);
}
#endregion
}
#endif
11 changes: 11 additions & 0 deletions Editor/BuildPipelines/AndroidBuildPipeline.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,14 @@
"displayName": "Agraris Core",
"description": "Agraris tools core components.",
"unity": "2020.3",
"unityRelease": "11f1",
"keywords": [
"utility",
"tool",
"unity",
"singleton"
"singleton",
"android",
"build-pipeline"
],
"homepage": "https://agraris.github.io/",
"bugs": {
Expand Down

0 comments on commit 43146f6

Please sign in to comment.