134 lines
4.9 KiB
C#
134 lines
4.9 KiB
C#
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\")";
|
|
|
|
private static string CodeIOSFrameworkAdServices = "private bool _iOSFrameworkAdServices";
|
|
private static string CodeIOSFrameworkATT = "private bool _iOSFrameworkAppTrackingTransparency";
|
|
|
|
|
|
|
|
/// <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];
|
|
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;
|
|
|
|
}
|
|
|
|
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();
|
|
}
|
|
}
|
|
} |