Files
plugin-library/Assets/00.StaryEvo/Editor/Build/BuildApkWindow.cs

140 lines
4.8 KiB
C#
Raw Normal View History

2025-07-02 16:28:08 +08:00
using Sirenix.OdinInspector;
using Sirenix.OdinInspector.Editor;
using UnityEditor;
using UnityEditor.Build.Reporting;
using UnityEngine;
2025-08-21 16:42:16 +08:00
namespace Stary.Evo.Editor
2025-07-02 16:28:08 +08:00
{
2025-08-21 16:42:16 +08:00
public class BuildApkWindow : OdinEditorWindow
2025-07-02 16:28:08 +08:00
{
2025-08-21 16:42:16 +08:00
public static OdinEditorWindow window;
2025-07-02 16:28:08 +08:00
2025-08-21 16:42:16 +08:00
[MenuItem("Evo/Apk打包工具")]
static void ShowWindows()
2025-07-02 16:28:08 +08:00
{
2025-08-21 16:42:16 +08:00
window = (BuildApkWindow)EditorWindow.GetWindow(typeof(BuildApkWindow));
window.maxSize = new Vector2(400, 500);
window.Show();
2025-07-02 16:28:08 +08:00
}
2025-08-21 16:42:16 +08:00
protected override void Initialize()
2025-07-02 16:28:08 +08:00
{
2025-08-21 16:42:16 +08:00
base.Initialize();
buildApkLocalEntity = new BuildApkEntity(() => { BuildAndroid(false); }, null);
buildApkServerEntity = new BuildApkEntity(null, null);
buildApkWatermarkEntity = new BuildApkEntity(() => { BuildAndroid(true); }, null);
2025-07-02 16:28:08 +08:00
}
2025-08-21 16:42:16 +08:00
[EnumToggleButtons, HideLabel] public DeviceType deviceType;
[BoxGroup("Build(清空打包缓存)", centerLabel: true, order: 1)]
[Button("清空打包缓存")]
void OnClearCache()
2025-07-02 16:28:08 +08:00
{
2025-08-21 16:42:16 +08:00
// 清理Library缓存目录
// 使用System.IO删除
// try {
// System.IO.Directory.Delete(Application.dataPath + "/../Library/AssetImportState", true);
// Debug.Log("成功删除AssetImportState");
// } catch (System.Exception e) {
// Debug.LogError($"删除失败: {e.Message}");
// }
// 使用System.IO删除
try
{
System.IO.Directory.Delete(Application.dataPath + "/../Library/BuildCache", true);
Debug.Log("成功删除BuildCache");
}
catch (System.Exception e)
{
Debug.LogError($"删除失败: {e.Message}");
}
2025-07-02 16:28:08 +08:00
2025-08-21 16:42:16 +08:00
// 使用System.IO删除
try
{
System.IO.Directory.Delete(Application.dataPath + "/../Library/ScriptAssemblies", true);
Debug.Log("成功删除ScriptAssemblies");
}
catch (System.Exception e)
{
Debug.LogError($"删除失败: {e.Message}");
}
2025-07-02 16:28:08 +08:00
2025-08-21 16:42:16 +08:00
AssetDatabase.Refresh();
EditorUtility.DisplayDialog("缓存清理", "已成功清除所有打包缓存文件", "确定");
}
2025-07-02 16:28:08 +08:00
2025-08-21 16:42:16 +08:00
[BoxGroup("Build(普通包\\服务器本地包)", centerLabel: true, order: 2), HideLabel]
public BuildApkEntity buildApkLocalEntity;
2025-07-02 16:28:08 +08:00
2025-08-21 16:42:16 +08:00
[BoxGroup("Build(服务器热更包)", centerLabel: true, order: 3), HideLabel]
public BuildApkEntity buildApkServerEntity;
2025-07-02 16:28:08 +08:00
2025-08-21 16:42:16 +08:00
[BoxGroup("Build(水印包)", centerLabel: true, order: 4), HideLabel]
public BuildApkEntity buildApkWatermarkEntity;
public void BuildAndroid(bool isWatermark)
2025-07-02 16:28:08 +08:00
{
2025-08-21 16:42:16 +08:00
HotfixMainResDomain hotfixMainResDomain = Resources.Load<HotfixMainResDomain>("HotfixMainResDomain");
if (hotfixMainResDomain == null)
{
Debug.LogError("HotfixMainResDomain 资源在Resources下不存在请检查");
return;
}
2025-07-02 16:28:08 +08:00
2025-08-21 16:42:16 +08:00
// 设置包名和项目名
PlayerSettings.productName = hotfixMainResDomain.projectInfo.projectName;
PlayerSettings.applicationIdentifier = hotfixMainResDomain.projectInfo.projectPackageName;
2025-07-02 16:28:08 +08:00
2025-08-21 16:42:16 +08:00
string[] scenelist = default;
if (isWatermark)
2025-07-02 16:28:08 +08:00
{
2025-08-21 16:42:16 +08:00
scenelist = new[]
{
hotfixMainResDomain.projectInfo.loadingScenePath,
$"Assets/Main/main_{deviceType.ToString()}.unity"
};
PlayerSettings.applicationIdentifier += "_watermark";
}
else
2025-07-02 18:36:48 +08:00
{
2025-08-21 16:42:16 +08:00
scenelist = new[]
{
$"Assets/Main/main_{deviceType.ToString()}.unity"
};
}
// 配置构建选项
BuildPlayerOptions buildOptions = new BuildPlayerOptions
{
scenes = scenelist,
locationPathName = $"Builds/Android/{PlayerSettings.applicationIdentifier}.apk",
target = BuildTarget.Android,
options = BuildOptions.None
2025-07-02 18:36:48 +08:00
};
2025-08-21 16:42:16 +08:00
// 执行打包
var report = BuildPipeline.BuildPlayer(buildOptions);
2025-07-02 16:28:08 +08:00
2025-08-21 16:42:16 +08:00
BuildSummary summary = report.summary;
if (summary.result == BuildResult.Succeeded)
{
Debug.Log("Build succeeded: " + summary.totalSize + " bytes");
}
2025-07-02 16:28:08 +08:00
2025-08-21 16:42:16 +08:00
if (summary.result == BuildResult.Failed)
{
Debug.LogError("Build failed");
}
2025-07-02 16:28:08 +08:00
}
2025-08-21 16:42:16 +08:00
public enum DeviceType
2025-07-02 16:28:08 +08:00
{
2025-08-21 16:42:16 +08:00
Xreal,
Rokid
2025-07-02 16:28:08 +08:00
}
}
}