Files
taptap2024_GJ_chidouren/Assets/Editor/AndroidBuildSetting/ModifyUnityAndroidAppManifestSample.cs
2024-10-16 00:03:41 +08:00

112 lines
3.9 KiB
C#

using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using UnityEditor.Android;
namespace Editor.AndroidBuildSetting
{
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
{
return;
}
// Get the `manifest` element.
var elementManifest = manifest.Element ("manifest");
if (elementManifest == null)
{
return;
}
var elementApplication = elementManifest.Element ("application");
if (elementApplication == null)
{
return;
}
// elementApplication.
var elementlauncherManifest = launcherManifest.Element ("manifest");
var elementlauncherApplication = elementlauncherManifest.Element ("application");
var xManifestElements = elementManifest.Descendants ();
var xApplicationElements = elementApplication.Descendants ();
var useQueries = xApplicationElements.Where (element => element.Name.LocalName.Equals ("activity"));
var elementByName = GetElementByName (useQueries , "com.unity3d.player.UnityPlayerActivity");
//开启硬件加速 android:hardwareAccelerated="true"
XName name = AndroidNamespace + "hardwareAccelerated";
elementByName.SetAttributeValue (name , "true");
// Save the updated manifest file.
manifest.Save (manifestPath);
launcherManifest.Save (launcherManifestPath);
}
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;
}
private static XElement GetElementByName (IEnumerable<XElement> elements, string name)
{
foreach (var element in elements)
{
var attributes = element.Attributes ();
if (attributes.Any (attribute => attribute.Name.Namespace.Equals (AndroidNamespace)
&& attribute.Name.LocalName.Equals ("name")
&& attribute.Value.Equals (name)))
{
return element;
}
}
return null;
}
public int callbackOrder { get; }
}
}