#if UNITY_ANDROID using System.IO; using System.Xml.Linq; using UnityEngine; using UnityEditor; using UnityEditor.Android; namespace Topon_Adapter.Editor { public class AD_BuildAndroidProcess : IPostGenerateGradleAndroidProject { private static readonly XNamespace AndroidNamespace = "http://schemas.android.com/apk/res/android"; private static readonly XNamespace ToolsNamespace = "http://schemas.android.com/tools"; public void OnPostGenerateGradleAndroidProject(string path) { ProcessAndroidManifest(path); } public static void ProcessAndroidManifest(string path) { #if UNITY_2019_3_OR_NEWER var manifestPath = Path.Combine(path, "src/main/AndroidManifest.xml"); var launcherManifestPath = Path.Combine(path, "../launcher/src/main/AndroidManifest.xml"); #else var manifestPath = Path.Combine(path, "unityLibrary/src/main/AndroidManifest.xml"); #endif // var manifestPath = Path.Combine(path, "src/main/AndroidManifest.xml"); XDocument manifest; XDocument launcherManifest; try { manifest = XDocument.Load(manifestPath); launcherManifest = XDocument.Load (launcherManifestPath); } #pragma warning disable 0168 catch (IOException exception) #pragma warning restore 0168 { ATLog.log("[BuildAndroidProcess] AndroidManifest.xml is missing."); return; } // Get the `manifest` element. var elementManifest = manifest.Element("manifest"); if (elementManifest == null) { ATLog.log("[BuildAndroidProcess] AndroidManifest.xml is invalid."); return; } var elementApplication = elementManifest.Element("application"); if (elementApplication == null) { ATLog.log("[BuildAndroidProcess] AndroidManifest.xml is invalid."); return; } var queries = CreateQueries(); elementManifest.Add(queries); elementApplication.Add(CreateActivityXML()); var elementlauncherManifest = launcherManifest.Element("manifest"); var elementlauncherApplication = elementlauncherManifest.Element("application"); //增加穿山甲配置 elementlauncherApplication.Add (CreateCSJGromore ()); // Save the updated manifest file. manifest.Save(manifestPath); launcherManifest.Save (launcherManifestPath); } /// /// 增加微信开放平台的适配 /// public static XElement CreateActivityXML() { var metaData = new XElement("activity"); metaData.Add(new XAttribute(AndroidNamespace + "name", ".wxapi.WXEntryActivity")); metaData.Add(new XAttribute(AndroidNamespace + "label", "@string/app_name")); metaData.Add(new XAttribute(AndroidNamespace + "theme", "@android:style/Theme.Translucent.NoTitleBar")); metaData.Add(new XAttribute(AndroidNamespace + "exported", "true")); metaData.Add(new XAttribute(AndroidNamespace + "taskAffinity", Application.identifier)); metaData.Add(new XAttribute(AndroidNamespace + "launchMode", "singleTask")); return metaData; } public static XElement CreateQueries() { var metaData = new XElement("queries"); var packageData = new XElement("package"); packageData.Add(new XAttribute(AndroidNamespace + "name", "com.tencent.mm")); metaData.Add(packageData); return metaData; } public static XElement CreateCSJGromore () { // ReSharper disable once InvalidXmlDocComment /** * * */ var providerData = new XElement("provider"); providerData.Add (new XAttribute (AndroidNamespace + "name" , "com.bytedance.sdk.openadsdk.TTFileProvider")); providerData.Add (new XAttribute (AndroidNamespace + "authorities" , "${applicationId}.TTFileProvider")); providerData.Add (new XAttribute (AndroidNamespace + "exported" , "false")); providerData.Add (new XAttribute (AndroidNamespace + "grantUriPermissions" , "true")); providerData.Add (new XAttribute (ToolsNamespace + "replace" , "android:authorities")); var metaData = new XElement("meta-data"); metaData.Add (new XAttribute (AndroidNamespace+"name" , "android.support.FILE_PROVIDER_PATHS")); metaData.Add (new XAttribute (AndroidNamespace+"resource" , "@xml/alex_tt_file_path")); providerData.Add (metaData); return providerData; } public int callbackOrder { get; } } } #endif