This commit is contained in:
zhangzheng
2026-03-16 17:31:09 +08:00
parent a1131f5ede
commit 255e7936f0
2 changed files with 100 additions and 6 deletions

View File

@@ -1,3 +1,4 @@
using System.Collections.Generic;
using Sirenix.OdinInspector;
using Sirenix.OdinInspector.Editor;
using UnityEditor;
@@ -10,7 +11,7 @@ namespace Stary.Evo.Editor
{
public static OdinEditorWindow window;
[MenuItem("Evo/Dev/Apk打包工具",false, 4)]
[MenuItem("Evo/Dev/Apk打包工具", false, 4)]
static void ShowWindows()
{
window = (BuildApkWindow)EditorWindow.GetWindow(typeof(BuildApkWindow));
@@ -28,6 +29,11 @@ namespace Stary.Evo.Editor
[EnumToggleButtons, HideLabel] public DeviceType deviceType;
[HideLabel] [Title("包裹列表", titleAlignment: TitleAlignments.Centered)] [ValueDropdown("GetBuildPackageNames")]
public string selectedPackageNames;
[BoxGroup("Build(清空打包缓存)", centerLabel: true, order: 1)]
[Button("清空打包缓存")]
void OnClearCache()
@@ -84,9 +90,26 @@ namespace Stary.Evo.Editor
return;
}
// 设置包名和项目名
PlayerSettings.productName = hotfixMainResDomain.projectInfo.projectName;
PlayerSettings.applicationIdentifier = hotfixMainResDomain.projectInfo.projectPackageName;
string packageName = "";
// 检测包名格式
if (!IsValidPackageName(selectedPackageNames))
{
// 不是有效包名格式,添加前缀 com.xosmo.
packageName = "com.xosmo." + selectedPackageNames;
// 设置包名和项目名
PlayerSettings.productName = selectedPackageNames;
PlayerSettings.applicationIdentifier = packageName;
}
else
{
// 分割包名字符串
string[] segments = selectedPackageNames.Split('.');
// 返回最后一个部分
packageName = segments[segments.Length - 1];
PlayerSettings.productName = packageName;
PlayerSettings.applicationIdentifier = selectedPackageNames;
}
string[] scenelist = default;
if (isWatermark)
@@ -96,7 +119,15 @@ namespace Stary.Evo.Editor
hotfixMainResDomain.projectInfo.loadingScenePath,
$"Assets/Main/main_{deviceType.ToString()}.unity"
};
PlayerSettings.productName += "_watermark";
PlayerSettings.applicationIdentifier += "_watermark";
Sprite xosmo = Resources.Load<Sprite>("logo");
PlayerSettings.virtualRealitySplashScreen = xosmo.texture;
PlayerSettings.SplashScreen.showUnityLogo = false;
PlayerSettings.SplashScreen.logos = new[]
{
PlayerSettings.SplashScreenLogo.Create(3f, xosmo),
};
}
else
{
@@ -104,13 +135,16 @@ namespace Stary.Evo.Editor
{
$"Assets/Main/main_{deviceType.ToString()}.unity"
};
PlayerSettings.virtualRealitySplashScreen = null;
PlayerSettings.SplashScreen.showUnityLogo = false;
PlayerSettings.SplashScreen.logos = null;
}
// 配置构建选项
BuildPlayerOptions buildOptions = new BuildPlayerOptions
{
scenes = scenelist,
locationPathName = $"Builds/Android/{PlayerSettings.applicationIdentifier}.apk",
locationPathName = $"Builds/Android/{PlayerSettings.productName}.apk",
target = BuildTarget.Android,
options = BuildOptions.None
};
@@ -136,5 +170,65 @@ namespace Stary.Evo.Editor
Xreal,
Rokid
}
/// <summary>
/// 检测当前所有包裹
/// </summary>
/// <returns></returns>
private List<string> GetBuildPackageNames()
{
List<string> result = new List<string>();
foreach (var name in CreatAssetWindow.GetCreatDomainAllName())
{
result.Add(name);
}
if (selectedPackageNames.IsNullOrEmpty())
{
if (result.Count > 0)
{
selectedPackageNames = result[0];
}
else
{
selectedPackageNames = "";
}
}
return result;
}
/// <summary>
/// 检测字符串是否是有效的包名格式
/// </summary>
/// <param name="packageName">要检测的字符串</param>
/// <returns>是否是有效的包名格式</returns>
private bool IsValidPackageName(string packageName)
{
if (string.IsNullOrEmpty(packageName))
return false;
// 包名只能包含小写字母、数字和点
foreach (char c in packageName)
{
if (!char.IsLower(c) && !char.IsDigit(c) && c != '.')
return false;
}
// 不能以点开头或结尾
if (packageName.StartsWith(".") || packageName.EndsWith("."))
return false;
// 不能包含连续的点
if (packageName.Contains(".."))
return false;
// 至少包含一个点
if (!packageName.Contains("."))
return false;
return true;
}
}
}