update: AppBuilder 打包脚本的优化, code review
Signed-off-by: huyufei <yufei.hu@castbox.fm>
parent
ae3d3764d8
commit
cf832d88ad
|
|
@ -32,6 +32,10 @@ namespace Guru.Editor
|
||||||
public string AndroidKeystorePass = ""; // Android KeyStore 文件名
|
public string AndroidKeystorePass = ""; // Android KeyStore 文件名
|
||||||
public string AndroidAlias = ""; // Android KeyStore 文件名
|
public string AndroidAlias = ""; // Android KeyStore 文件名
|
||||||
public string AndroidAliasPass = ""; // Android KeyStore 文件名
|
public string AndroidAliasPass = ""; // Android KeyStore 文件名
|
||||||
|
public string CustomGradlePath = ""; // 自定义 Gradle 路径
|
||||||
|
public string CustomJDKRoot = ""; // 自定义 JDK 路径
|
||||||
|
public string CustomNDKRoot = ""; // 自定义 NDK 路径
|
||||||
|
public string CustomAndroidSDKRoot = ""; // 自定义 AndroidSDK 路径
|
||||||
//------------ iOS ----------------
|
//------------ iOS ----------------
|
||||||
public string IOSTargetVersion = ""; // IOS SDK 版本设置 ( iOS 发布专用 )
|
public string IOSTargetVersion = ""; // IOS SDK 版本设置 ( iOS 发布专用 )
|
||||||
public string IOSTeamId = ""; // IOS 打包 TeamId ( iOS 使用专用的开发证书后开启 )
|
public string IOSTeamId = ""; // IOS 打包 TeamId ( iOS 使用专用的开发证书后开启 )
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,7 @@
|
||||||
|
|
||||||
|
|
||||||
namespace Guru.Editor
|
namespace Guru.Editor
|
||||||
{
|
{
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEditor;
|
using UnityEditor;
|
||||||
|
|
@ -24,8 +21,14 @@ namespace Guru.Editor
|
||||||
private const string GuruAliasName = "guru";
|
private const string GuruAliasName = "guru";
|
||||||
private const string GuruAliasPass = "guru0622";
|
private const string GuruAliasPass = "guru0622";
|
||||||
|
|
||||||
private const string UnityGradlePath_2021_3_41 =
|
private const string DEFAULT_GRADLE_PATH_MAC_2021_3_41 =
|
||||||
"/Applications/Unity/Hub/Editor/2021.3.41f1/PlaybackEngines/AndroidPlayer/Tools/gradle";
|
"/Applications/Unity/Hub/Editor/2021.3.41f1/PlaybackEngines/AndroidPlayer/Tools/gradle";
|
||||||
|
private const string DEFAULT_JDK_PATH_MAC_2021_3_41 =
|
||||||
|
"/Applications/Unity/Hub/Editor/2021.3.41f1/PlaybackEngines/AndroidPlayer/OpenJDK";
|
||||||
|
private const string DEFAULT_NDK_PATH_MAC_2021_3_41 =
|
||||||
|
"/Applications/Unity/Hub/Editor/2021.3.41f1/PlaybackEngines/AndroidPlayer/NDK";
|
||||||
|
private const string DEFAULT_ANDROID_SDK_MAC_2021_3_41 =
|
||||||
|
"/Applications/Unity/Hub/Editor/2021.3.41f1/PlaybackEngines/AndroidPlayer/SDK";
|
||||||
|
|
||||||
private static string GuruKeystorePath => Application.dataPath + $"/Plugins/Android/{GuruKeystoreName}";
|
private static string GuruKeystorePath => Application.dataPath + $"/Plugins/Android/{GuruKeystoreName}";
|
||||||
private static string ProguardName => "proguard-user.txt";
|
private static string ProguardName => "proguard-user.txt";
|
||||||
|
|
@ -76,8 +79,11 @@ namespace Guru.Editor
|
||||||
SwitchBuildPlatform(BuildTarget.Android);
|
SwitchBuildPlatform(BuildTarget.Android);
|
||||||
// 打包通用设置
|
// 打包通用设置
|
||||||
ChangeBuildPlayerCommonSetting(buildParam, BuildTargetGroup.Android);
|
ChangeBuildPlayerCommonSetting(buildParam, BuildTargetGroup.Android);
|
||||||
// Set GradlePath
|
// 设置打包环境
|
||||||
SetGradlePath();
|
SetGradlePath(buildParam.CustomGradlePath);
|
||||||
|
SetJDKRoot(buildParam.CustomJDKRoot);
|
||||||
|
SetNDKRoot(buildParam.CustomNDKRoot);
|
||||||
|
SetAndroidSDKRoot(buildParam.CustomAndroidSDKRoot);
|
||||||
|
|
||||||
var isDebug = !buildParam.IsBuildRelease;
|
var isDebug = !buildParam.IsBuildRelease;
|
||||||
var useMinify = buildParam.AndroidUseMinify;
|
var useMinify = buildParam.AndroidUseMinify;
|
||||||
|
|
@ -121,18 +127,17 @@ namespace Guru.Editor
|
||||||
PlayerSettings.Android.keyaliasPass = buildParam.AndroidAliasPass;
|
PlayerSettings.Android.keyaliasPass = buildParam.AndroidAliasPass;
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayerSettings.Android.targetArchitectures = AndroidArchitecture.ARMv7 | AndroidArchitecture.ARM64; // 构建 armv7, arm64
|
PlayerSettings.Android.targetArchitectures = AndroidArchitecture.ARMv7 | AndroidArchitecture.ARM64; // 构建 armV7, arm64
|
||||||
PlayerSettings.Android.minSdkVersion = AndroidSdkVersions.AndroidApiLevel22;
|
PlayerSettings.Android.minSdkVersion = AndroidSdkVersions.AndroidApiLevel22;
|
||||||
PlayerSettings.Android.targetSdkVersion = (AndroidSdkVersions)androidTargetVersion; // 设置 API Version
|
PlayerSettings.Android.targetSdkVersion = (AndroidSdkVersions)androidTargetVersion; // 设置 API Version
|
||||||
|
|
||||||
//打包
|
//打包
|
||||||
string symbolDefine = buildParam.IsBuildRelease ? GameDefine.MACRO_RELEASE : GameDefine.MACRO_DEBUG;
|
string symbolDefine = buildParam.IsBuildRelease ? GameDefine.MACRO_RELEASE : GameDefine.MACRO_DEBUG;
|
||||||
string apkPath = string.Empty;
|
|
||||||
string version = Application.version;
|
string version = Application.version;
|
||||||
string extension = buildParam.IsBuildAAB ? ".aab" : ".apk";
|
string extension = buildParam.IsBuildAAB ? ".aab" : ".apk";
|
||||||
if (EditorUserBuildSettings.exportAsGoogleAndroidProject) extension = ""; // 输出工程
|
if (EditorUserBuildSettings.exportAsGoogleAndroidProject) extension = ""; // 输出工程
|
||||||
string outputDir = Path.GetFullPath($"{Application.dataPath }/../{OutputDirName}/Android");
|
string outputDir = Path.GetFullPath($"{Application.dataPath }/../{OutputDirName}/Android");
|
||||||
apkPath = $"{outputDir}/{Application.productName.Replace(" ","_")}_{symbolDefine}_{version}_{buildNumber}{extension}";
|
var apkPath = $"{outputDir}/{Application.productName.Replace(" ","_")}_{symbolDefine}_{version}_{buildNumber}{extension}";
|
||||||
if (!Directory.Exists(outputDir)) Directory.CreateDirectory(outputDir);
|
if (!Directory.Exists(outputDir)) Directory.CreateDirectory(outputDir);
|
||||||
|
|
||||||
BuildOptions opts = isDebug ? BuildOptions.Development : BuildOptions.None;
|
BuildOptions opts = isDebug ? BuildOptions.Development : BuildOptions.None;
|
||||||
|
|
@ -149,12 +154,87 @@ namespace Guru.Editor
|
||||||
return apkPath;
|
return apkPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void SetGradlePath()
|
/// <summary>
|
||||||
|
/// 设置 GradlePath
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="gradlePath"></param>
|
||||||
|
private static void SetGradlePath(string gradlePath = "")
|
||||||
{
|
{
|
||||||
#if UNITY_ANDROID && UNITY_2021_3_41
|
if (!string.IsNullOrEmpty(gradlePath))
|
||||||
if (Directory.Exists(UnityGradlePath_2021_3_41))
|
|
||||||
{
|
{
|
||||||
UnityEditor.Android.AndroidExternalToolsSettings.gradlePath = UnityGradlePath_2021_3_41;
|
UnityEditor.Android.AndroidExternalToolsSettings.gradlePath = gradlePath;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if UNITY_2021_3_41 && UNITY_EDITOR_OSX
|
||||||
|
// 针对 2021.3.41 MAC 版本,直接强制走Unity 自带的 Gradle 库
|
||||||
|
if (Directory.Exists(DEFAULT_GRADLE_PATH_MAC_2021_3_41))
|
||||||
|
{
|
||||||
|
UnityEditor.Android.AndroidExternalToolsSettings.gradlePath = DEFAULT_GRADLE_PATH_MAC_2021_3_41;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设置自定义的JDK 路径
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="jdkRoot"></param>
|
||||||
|
private static void SetJDKRoot(string jdkRoot)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(jdkRoot))
|
||||||
|
{
|
||||||
|
UnityEditor.Android.AndroidExternalToolsSettings.jdkRootPath = jdkRoot;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if UNITY_2021_3_41 && UNITY_EDITOR_OSX
|
||||||
|
// 针对 2021.3.41 MAC 版本,直接强制走Unity 自带的 JDK 库
|
||||||
|
if (Directory.Exists(DEFAULT_JDK_PATH_MAC_2021_3_41))
|
||||||
|
{
|
||||||
|
UnityEditor.Android.AndroidExternalToolsSettings.jdkRootPath = DEFAULT_JDK_PATH_MAC_2021_3_41;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设置自定义的 NDK 路径
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="ndkRoot"></param>
|
||||||
|
private static void SetNDKRoot(string ndkRoot)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(ndkRoot))
|
||||||
|
{
|
||||||
|
UnityEditor.Android.AndroidExternalToolsSettings.ndkRootPath = ndkRoot;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if UNITY_2021_3_41 && UNITY_EDITOR_OSX
|
||||||
|
// 针对 2021.3.41 MAC 版本,直接强制走Unity 自带的 JDK 库
|
||||||
|
if (Directory.Exists(DEFAULT_JDK_PATH_MAC_2021_3_41))
|
||||||
|
{
|
||||||
|
UnityEditor.Android.AndroidExternalToolsSettings.ndkRootPath = DEFAULT_NDK_PATH_MAC_2021_3_41;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设置自定义的 NDK 路径
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sdkRoot"></param>
|
||||||
|
private static void SetAndroidSDKRoot(string sdkRoot)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(sdkRoot))
|
||||||
|
{
|
||||||
|
UnityEditor.Android.AndroidExternalToolsSettings.sdkRootPath = sdkRoot;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if UNITY_2021_3_41 && UNITY_EDITOR_OSX
|
||||||
|
// 针对 2021.3.41 MAC 版本,直接强制走Unity 自带的 JDK 库
|
||||||
|
if (Directory.Exists(DEFAULT_JDK_PATH_MAC_2021_3_41))
|
||||||
|
{
|
||||||
|
UnityEditor.Android.AndroidExternalToolsSettings.sdkRootPath = DEFAULT_ANDROID_SDK_MAC_2021_3_41;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
@ -252,7 +332,7 @@ namespace Guru.Editor
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
BuildOptions opts = isDebug ? BuildOptions.Development : BuildOptions.None;
|
BuildOptions opts = isDebug ? BuildOptions.Development : BuildOptions.None;
|
||||||
BuildPipeline.BuildPlayer(GetBuildScenes(), outputDir, BuildTarget.iOS, BuildOptions.None);
|
BuildPipeline.BuildPlayer(GetBuildScenes(), outputDir, BuildTarget.iOS, opts);
|
||||||
if (buildParam.BuilderType == AppBuilderType.Editor)
|
if (buildParam.BuilderType == AppBuilderType.Editor)
|
||||||
{
|
{
|
||||||
Open(outputDir);
|
Open(outputDir);
|
||||||
|
|
@ -279,10 +359,9 @@ namespace Guru.Editor
|
||||||
var guids = AssetDatabase.FindAssets($"{nameof(AppBuilder)} t:Script");
|
var guids = AssetDatabase.FindAssets($"{nameof(AppBuilder)} t:Script");
|
||||||
if (guids.Length > 0)
|
if (guids.Length > 0)
|
||||||
{
|
{
|
||||||
var path = "";
|
|
||||||
foreach (var guid in guids)
|
foreach (var guid in guids)
|
||||||
{
|
{
|
||||||
path = AssetDatabase.GUIDToAssetPath(guids[0]);
|
var path = AssetDatabase.GUIDToAssetPath(guid);
|
||||||
if (path.Contains($"Editor/BuildTool/{nameof(AppBuilder)}"))
|
if (path.Contains($"Editor/BuildTool/{nameof(AppBuilder)}"))
|
||||||
{
|
{
|
||||||
return Directory.GetParent(path)!.FullName;
|
return Directory.GetParent(path)!.FullName;
|
||||||
|
|
@ -358,7 +437,6 @@ namespace Guru.Editor
|
||||||
/// 修改打包版本号
|
/// 修改打包版本号
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="buildTarget"></param>
|
/// <param name="buildTarget"></param>
|
||||||
/// <param name="isRelease"></param>
|
|
||||||
private static string ChangeBuildNumber(BuildTarget buildTarget)
|
private static string ChangeBuildNumber(BuildTarget buildTarget)
|
||||||
{
|
{
|
||||||
var nowDate = DateTime.Now;
|
var nowDate = DateTime.Now;
|
||||||
|
|
@ -403,7 +481,7 @@ namespace Guru.Editor
|
||||||
/// 获取打包场景
|
/// 获取打包场景
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static string[] GetBuildScenes()
|
private static string[] GetBuildScenes()
|
||||||
{
|
{
|
||||||
List<string> names = new List<string>();
|
List<string> names = new List<string>();
|
||||||
foreach (var e in EditorBuildSettings.scenes)
|
foreach (var e in EditorBuildSettings.scenes)
|
||||||
|
|
@ -420,7 +498,7 @@ namespace Guru.Editor
|
||||||
/// 打开路径
|
/// 打开路径
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="path"></param>
|
/// <param name="path"></param>
|
||||||
public static void Open(string path)
|
private static void Open(string path)
|
||||||
{
|
{
|
||||||
#if UNITY_EDITOR_OSX
|
#if UNITY_EDITOR_OSX
|
||||||
EditorUtility.RevealInFinder(path);
|
EditorUtility.RevealInFinder(path);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue