com.guru.unity.adjust/Editor/CodeMods/AdjustMod.cs

134 lines
4.9 KiB
C#
Raw Normal View History

2023-12-26 03:52:53 +00:00
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEditor.Compilation;
using UnityEngine;
namespace Guru.Editor.Adjust
{
public class AdjustMod
{
public static string Tag = "[MOD]";
private static string CodeReplaceSample =
"AssetDatabase.GUIDToAssetPath(guids[0]).Replace(\"AdjustSettings.cs\", \"AdjustSettings.asset\")";
2023-12-27 12:22:14 +00:00
private static string CodeIOSFrameworkAdServices = "private bool _iOSFrameworkAdServices";
private static string CodeIOSFrameworkATT = "private bool _iOSFrameworkAppTrackingTransparency";
2023-12-26 03:52:53 +00:00
/// <summary>
/// 应用补丁
/// </summary>
public static void Apply()
{
var mod = new AdjustMod();
mod.FixSettingsInstancePath();
}
/// <summary>
/// 修复示例地址
/// </summary>
private void FixSettingsInstancePath()
{
var guids = AssetDatabase.FindAssets($"{nameof(AdjustSettings)} t:Script");
if (guids.Length > 0)
{
for (int i = 0; i < guids.Length; i++)
{
var p = AssetDatabase.GUIDToAssetPath(guids[i]);
if(p.Contains($"{nameof(AdjustSettings)}.cs"))
{
var path = Path.Combine(Application.dataPath, p.Replace("Assets/", ""));
if (File.Exists(path))
{
InjectCodeAtPath(path);
return;
}
break;
}
}
}
Debug.Log($"{Tag}<color=orange>--- Guru Adjust inject failed</color>");
}
/// <summary>
/// 注入代码逻辑
/// </summary>
/// <param name="path"></param>
private void InjectCodeAtPath(string path)
{
// ---------- Inject Code ----------
string indent = "\t\t\t\t";
string Info = $"{indent}// ************ Auto fixed by Guru Adjust ************";
string buffer = $"{Info}";
// buffer += $"\n{indent}if(System.IO.File.Exists(\"{GuruAdjustSdkAPI.AdjustSettingsPackagePath}\")) System.IO.File.Delete(\"{GuruAdjustSdkAPI.AdjustSettingsPackagePath}\");";
buffer += $"\n{indent}if(!System.IO.Directory.Exists(\"{GuruAdjustSdkAPI.AdjustSettingsRootDir}\")) System.IO.Directory.CreateDirectory(\"{GuruAdjustSdkAPI.AdjustSettingsRootDir}\");";
buffer += $"\n{indent}var assetPath = \"{GuruAdjustSdkAPI.AdjustSettingsAssetPath}\";";
buffer += $"\n{Info}";
var lines = File.ReadLines(path).ToList();
string line = "";
bool isDirty = false;
for (int i = 0; i < lines.Count; i++)
{
line = lines[i];
2023-12-27 12:22:14 +00:00
if (line.Contains(CodeIOSFrameworkAdServices) && line.Contains("false"))
{
lines[i] = line.Replace("false", "true"); // 允许引入AdService
isDirty = true;
continue;
}
if (line.Contains(CodeIOSFrameworkATT) && line.Contains("false"))
{
lines[i] = line.Replace("false", "true"); // 允许引入AdService
isDirty = true;
continue;
}
2023-12-26 03:52:53 +00:00
if (line.Contains(CodeReplaceSample) && !line.Contains("//"))
{
lines[i] = $"//{line}";
lines.Insert(i+1, buffer);
isDirty = true;
break;
}
}
if (isDirty)
{
File.WriteAllLines(path, lines.ToArray());
Debug.Log($"{Tag}<color=#88ff00>--- Guru Adjust inject success</color>");
CompilationPipeline.RequestScriptCompilation();
}
}
/// <summary>
/// 创建接口
/// </summary>
/// <param name="instance"></param>
public static void CreateInstance (AdjustSettings instance)
{
// 删除旧文件
if(File.Exists(GuruAdjustSdkAPI.AdjustSettingsPackagePath))
File.Delete(GuruAdjustSdkAPI.AdjustSettingsPackagePath);
// 创建新父目录
if (!Directory.Exists(GuruAdjustSdkAPI.AdjustSettingsPackagePath))
Directory.CreateDirectory(GuruAdjustSdkAPI.AdjustSettingsPackagePath);
// 创建对象
var assetPath = GuruAdjustSdkAPI.AdjustSettingsAssetPath;
AssetDatabase.CreateAsset(instance, assetPath);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
}
}
}