142 lines
4.7 KiB
C#
142 lines
4.7 KiB
C#
namespace Guru.Editor
|
|
{
|
|
using System;
|
|
using UnityEditor;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using UnityEngine;
|
|
using Debug=UnityEngine.Debug;
|
|
using System.Collections.Generic;
|
|
|
|
public class DepsOutputHelper
|
|
{
|
|
public static readonly string DepsScriptName = "deps.sh";
|
|
public static readonly string EnvScriptName = ".deps_env";
|
|
private static string _scriptFilePath = String.Empty;
|
|
public static string ScriptFilePath
|
|
{
|
|
get
|
|
{
|
|
if(string.IsNullOrEmpty(_scriptFilePath))
|
|
_scriptFilePath = GetScriptFilePath();
|
|
return _scriptFilePath;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 获取脚本路径
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private static string GetScriptFilePath()
|
|
{
|
|
string sc = string.Empty;
|
|
var guids = AssetDatabase.FindAssets($"{nameof(DepsOutputHelper)} t:script");
|
|
if (guids.Length > 0)
|
|
{
|
|
sc = AssetDatabase.GUIDToAssetPath(guids[0]);
|
|
var fpath = $"{Directory.GetParent(sc).FullName}/files/{DepsScriptName}";
|
|
if(File.Exists(fpath)) return fpath;
|
|
}
|
|
return string.Empty;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 执行脚本
|
|
/// </summary>
|
|
/// <param name="projPath"></param>
|
|
/// <param name="cmd"></param>
|
|
public static void CallDepsScript(string workpath, string cmd = "")
|
|
{
|
|
if (string.IsNullOrEmpty(cmd)) cmd = DepsScriptName;
|
|
RunShellCmd(workpath, cmd);
|
|
Debug.Log($"---- running command: {cmd} is over -----");
|
|
}
|
|
|
|
// 运行命令
|
|
public static void RunShellCmd(string workpath, string cmd)
|
|
{
|
|
//------ 启动命令 --------
|
|
Process p = new Process();
|
|
p.StartInfo.WorkingDirectory = workpath;
|
|
p.StartInfo.FileName = "/bin/bash";
|
|
p.StartInfo.Arguments = cmd;
|
|
p.StartInfo.UseShellExecute = false;
|
|
p.StartInfo.RedirectStandardOutput = true;
|
|
p.Start();
|
|
var log = p.StandardOutput.ReadToEnd();
|
|
p.WaitForExit();
|
|
Debug.Log(log);
|
|
}
|
|
|
|
// 设置ENV文件
|
|
private static void SetupEnvScript(string projPath, string depauditPath = "")
|
|
{
|
|
string buildName = $"1.0.0-00000000";
|
|
string platform = $"editor";
|
|
string dir = projPath;
|
|
|
|
#if UNITY_ANDROID
|
|
buildName = $"{Application.version}-{PlayerSettings.Android.bundleVersionCode}";
|
|
platform = "android";
|
|
#elif UNITY_IOS
|
|
buildName = $"{Application.version}-{PlayerSettings.iOS.buildNumber}";
|
|
platform = "ios";
|
|
#endif
|
|
List<string> lines = new List<string>()
|
|
{
|
|
$"export BUILD_NAME={buildName}",
|
|
$"export APP_NAME=\"{PlayerSettings.productName}\"",
|
|
$"export APP_ID={Application.identifier}",
|
|
$"export PLATFORM={platform}",
|
|
$"export DIR={dir}",
|
|
};
|
|
|
|
if (!string.IsNullOrEmpty(depauditPath))
|
|
{
|
|
// 本地调试, 需要工具路径
|
|
lines.Add($"export depaudit={depauditPath}");
|
|
}
|
|
|
|
File.WriteAllLines($"{projPath}/{EnvScriptName}", lines.ToArray());
|
|
}
|
|
|
|
/// <summary>
|
|
/// 安装和运行依赖输出器
|
|
/// </summary>
|
|
/// <param name="buildPath"></param>
|
|
public static void InstallAndRun(string buildPath)
|
|
{
|
|
if (string.IsNullOrEmpty(ScriptFilePath) || !File.Exists(ScriptFilePath))
|
|
{
|
|
Debug.LogError($"--- deps script file not found, skip output deps...");
|
|
return;
|
|
}
|
|
|
|
string projPath = buildPath;
|
|
#if UNITY_ANDROID
|
|
projPath = Directory.GetParent(buildPath).FullName;
|
|
#elif UNITY_IOS
|
|
//TBD
|
|
#endif
|
|
//---- Setup Env ----
|
|
SetupEnvScript(projPath);
|
|
|
|
//---- Setup Deps ----
|
|
string to = $"{projPath}/{DepsScriptName}";
|
|
if (File.Exists(to)) File.Delete(to);
|
|
FileUtil.CopyFileOrDirectory(ScriptFilePath, to); //拷贝脚本
|
|
|
|
try
|
|
{
|
|
Debug.Log($"=== Output build deps data ===");
|
|
CallDepsScript(projPath);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Debug.LogError(ex);
|
|
Debug.Log($"=== Output pods deps failed: {ex}");
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
} |