130 lines
4.2 KiB
C#
130 lines
4.2 KiB
C#
|
|
|
|
using System.Xml;
|
|
using UnityEngine;
|
|
|
|
namespace Guru.Editor
|
|
{
|
|
using UnityEditor;
|
|
using UnityEditor.Callbacks;
|
|
using System.IO;
|
|
|
|
public class PostBuild_DMA
|
|
{
|
|
|
|
|
|
[PostProcessBuild]
|
|
public static void OnPostProcessBuild(BuildTarget target, string buildPath)
|
|
{
|
|
string dir = "";
|
|
// TODO: add your code here
|
|
if (target == BuildTarget.Android)
|
|
{
|
|
dir = $"{buildPath}/src/main";
|
|
OnSetAndroidManifest(dir);
|
|
}
|
|
else if (target == BuildTarget.iOS)
|
|
{
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
#region Android Inject
|
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------------
|
|
*
|
|
*
|
|
* 向 AndroidManifest 中添加以下数据
|
|
* <meta-data android:name="google_analytics_default_allow_analytics_storage" android:value="true" />
|
|
* <meta-data android:name="google_analytics_default_allow_ad_storage" android:value="true" />
|
|
* <meta-data android:name="google_analytics_default_allow_ad_user_data" android:value="true" />
|
|
* <meta-data android:name="google_analytics_default_allow_ad_personalization_signals" android:value="true" />
|
|
*
|
|
*
|
|
--------------------------------------------------------------------------------*/
|
|
|
|
/// <summary>
|
|
/// 修复 AndroidManifest.xml
|
|
/// </summary>
|
|
/// <param name="dir"></param>
|
|
private static void OnSetAndroidManifest(string dir)
|
|
{
|
|
var filePath = Path.Combine(dir, "AndroidManifest.xml");
|
|
|
|
// 预注入 Key
|
|
string[] dma_keys = new string[]
|
|
{
|
|
"google_analytics_default_allow_analytics_storage",
|
|
"google_analytics_default_allow_ad_storage",
|
|
"google_analytics_default_allow_ad_user_data",
|
|
"google_analytics_default_allow_ad_personalization_signals"
|
|
};
|
|
|
|
int[] flags = new int[] { 0, 0, 0, 0 };
|
|
|
|
string defaultValue = "true"; // 日后可能会进行修改
|
|
|
|
if (File.Exists(filePath))
|
|
{
|
|
var xmlStr = File.ReadAllText(filePath);
|
|
|
|
var doc = new XmlDocument();
|
|
doc.LoadXml(xmlStr);
|
|
|
|
var root = doc.SelectSingleNode("manifest") as XmlElement;
|
|
if (root == null) return;
|
|
if (root.SelectSingleNode("application") is XmlElement app)
|
|
{
|
|
var namespace_uri = root.GetAttribute("xmlns:android");
|
|
|
|
var list = app.SelectNodes("meta-data");
|
|
|
|
// 刷新已有属性
|
|
foreach (XmlElement item in list)
|
|
{
|
|
for(int i = 0; i < dma_keys.Length; i++)
|
|
{
|
|
if (item.HasAttributes && item.GetAttribute("android:name") == dma_keys[i])
|
|
{
|
|
item.SetAttribute("value", namespace_uri, defaultValue);
|
|
flags[i] = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
// 补全缺失属性
|
|
for (int i = 0; i < flags.Length; i++)
|
|
{
|
|
if (flags[i] == 0)
|
|
{
|
|
var node = doc.CreateElement("meta-data");
|
|
node.SetAttribute("name", namespace_uri,dma_keys[i]);
|
|
node.SetAttribute("value", namespace_uri, defaultValue);
|
|
app.AppendChild(node);
|
|
}
|
|
}
|
|
|
|
doc.Save(filePath);
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
Debug.LogError($"[Post] can't find AndroidManifest.xml at {filePath}");
|
|
}
|
|
}
|
|
|
|
public static void Test_AndroidManifestInject()
|
|
{
|
|
OnSetAndroidManifest($"{Application.dataPath}/Plugins/Android");
|
|
}
|
|
|
|
|
|
|
|
#endregion
|
|
}
|
|
} |