|
@@ -2,6 +2,7 @@ using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.IO;
|
|
|
using UnityEditor;
|
|
|
+using UnityEditor.AddressableAssets.Settings;
|
|
|
using UnityEngine;
|
|
|
|
|
|
public class MenuItemTools
|
|
@@ -915,4 +916,50 @@ public class MenuItemTools
|
|
|
AssetDatabase.Refresh();
|
|
|
Debug.Log("Assets renamed according to dictionary.");
|
|
|
}
|
|
|
+
|
|
|
+ [MenuItem("Tools/Build/Android/Apk")]
|
|
|
+ private static void BuildAndroidApk()
|
|
|
+ {
|
|
|
+ EditorUserBuildSettings.buildAppBundle = false;
|
|
|
+ var outputPath = $"{Application.productName}-v{Application.version}.apk";
|
|
|
+ BuildAndroid(outputPath);
|
|
|
+ }
|
|
|
+
|
|
|
+ [MenuItem("Tools/Build/Android/AAB")]
|
|
|
+ private static void BuildAndroidAab()
|
|
|
+ {
|
|
|
+ EditorUserBuildSettings.buildAppBundle = true;
|
|
|
+ var outputPath = $"{Application.productName}-v{Application.version}.aab";
|
|
|
+ BuildAndroid(outputPath);
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void BuildAndroid(string outputPath)
|
|
|
+ {
|
|
|
+ KeystorePasswordSetter.AutoSetupKeystore();
|
|
|
+ AddressableAssetSettings.BuildPlayerContent();
|
|
|
+ BuildPlayer(outputPath);
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void BuildPlayer(string outputPath)
|
|
|
+ {
|
|
|
+ var buildOptions = new BuildPlayerOptions {
|
|
|
+ scenes = sceneNames,
|
|
|
+ locationPathName = outputPath,
|
|
|
+ target = BuildTarget.Android,
|
|
|
+ options = BuildOptions.None
|
|
|
+ };
|
|
|
+ BuildPipeline.BuildPlayer(buildOptions);
|
|
|
+ AssetDatabase.Refresh();
|
|
|
+ }
|
|
|
+
|
|
|
+ private static string[] sceneNames {
|
|
|
+ get {
|
|
|
+ var scenes = EditorBuildSettings.scenes;
|
|
|
+ var names = new List<string>();
|
|
|
+ foreach (var scene in scenes) {
|
|
|
+ if (scene.enabled) names.Add(scene.path);
|
|
|
+ }
|
|
|
+ return names.ToArray();
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|