111 lines
3.4 KiB
C#
111 lines
3.4 KiB
C#
using System.Collections;
|
|
using Unity.EditorCoroutines.Editor;
|
|
|
|
namespace Guru.Editor
|
|
{
|
|
using NUnit.Framework;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
using System;
|
|
using System.IO;
|
|
using System.Xml;
|
|
|
|
public static class AndroidManifestMod
|
|
{
|
|
private const string TargetPath = "Plugins/Android/AndroidManifest.xml";
|
|
private const string ValOptimizeInitialization = "com.google.android.gms.ads.flag.OPTIMIZE_INITIALIZATION";
|
|
private const string ValOptimizeAdLoading = "com.google.android.gms.ads.flag.OPTIMIZE_AD_LOADING";
|
|
|
|
private static string TargetFullPath = Path.Combine(Application.dataPath, TargetPath);
|
|
|
|
public static bool IsManifestExist() => File.Exists(TargetFullPath);
|
|
|
|
public static void Apply()
|
|
{
|
|
if (!IsManifestExist())
|
|
{
|
|
CopyManifest();
|
|
}
|
|
|
|
var doc = new XmlDocument();
|
|
doc.Load(TargetFullPath);
|
|
|
|
var rootNode = doc.SelectSingleNode("manifest/application");
|
|
int item1 = 0;
|
|
int item2 = 0;
|
|
|
|
XmlNodeList metadatas = rootNode.SelectNodes("meta-data");
|
|
if (metadatas != null && metadatas.Count > 0)
|
|
{
|
|
bool isDirty = false;
|
|
|
|
foreach (XmlElement e in metadatas)
|
|
{
|
|
if (e != null)
|
|
{
|
|
if (e.HasAttribute("android:name"))
|
|
{
|
|
if (e.Attributes["android:name"].Value == ValOptimizeInitialization) item1 = 1;
|
|
if (e.Attributes["android:name"].Value == ValOptimizeAdLoading) item2 = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
string androidSP = "http://schemas.android.com/apk/res/android";
|
|
|
|
if (item1 == 0)
|
|
{
|
|
var e = doc.CreateElement("meta-data");
|
|
e.SetAttribute("name",androidSP, ValOptimizeInitialization);
|
|
e.SetAttribute("value",androidSP, "true");
|
|
rootNode.AppendChild(e);
|
|
}
|
|
|
|
if (item2 == 0)
|
|
{
|
|
var e = doc.CreateElement("meta-data");
|
|
e.SetAttribute("name",androidSP,ValOptimizeAdLoading);
|
|
e.SetAttribute("value",androidSP, "true");
|
|
rootNode.AppendChild(e);
|
|
}
|
|
|
|
var rootE = doc.SelectSingleNode("manifest") as XmlElement;
|
|
if (rootE != null)
|
|
{
|
|
rootE.Attributes["package"].Value = PlayerSettings.applicationIdentifier; // 写入包名
|
|
}
|
|
|
|
doc.Save(TargetFullPath);
|
|
}
|
|
|
|
private static void CopyManifest()
|
|
{
|
|
if (File.Exists(TargetFullPath)) return;
|
|
|
|
var path = GuruEditorHelper.GetFilePath($"{nameof(AndroidManifestMod)} t:Script");
|
|
if (!string.IsNullOrEmpty(path))
|
|
{
|
|
var from = Path.GetFullPath($"{path}/../../Files/AndroidManifest.txt");
|
|
if (File.Exists(from))
|
|
{
|
|
File.Copy(from, TargetFullPath);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
#region Testing
|
|
|
|
[Test]
|
|
public static void Test_Injection()
|
|
{
|
|
Apply();
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
} |