Я использую Unity3D, и я хочу добавить некоторые атрибуты, которые Android-манифест генерирует Unity, это мой код, измененный из этого комментария https://stackoverflow.com/a/54894488/2126254
public class ModifyUnityAndroidAppManifest : IPostGenerateGradleAndroidProject
{
public void OnPostGenerateGradleAndroidProject(string basePath)
{
var androidManifest = new AndroidManifest(GetManifestPath(basePath));
XmlAttribute ReplaceBackupAttr = androidManifest.GenerateAttribute(
"tools", "replace", "android:allowBackup", androidManifest.ToolsXmlNamespace);
XmlAttribute AllowBackupAttr = androidManifest.GenerateAttribute(
"android", "allowBackup", "true", androidManifest.AndroidXmlNamespace);
androidManifest.SetAttribute(ReplaceBackupAttr);
androidManifest.SetAttribute(AllowBackupAttr);
androidManifest.Save();
}
public int callbackOrder { get { return 1; } }
private string _manifestFilePath;
private string GetManifestPath(string basePath)
{
... // irrelevnat
}
}
internal class AndroidXmlDocument : XmlDocument
{
private string m_Path;
protected XmlNamespaceManager nsMgr;
public readonly string AndroidXmlNamespace = "http://schemas.android.com/apk/res/android";
public readonly string ToolsXmlNamespace = "http://schemas.android.com/apk/res/tools";
public AndroidXmlDocument(string path)
{
m_Path = path;
using (var reader = new XmlTextReader(m_Path))
{
reader.Read();
Load(reader);
}
nsMgr = new XmlNamespaceManager(NameTable);
nsMgr.AddNamespace("android", AndroidXmlNamespace);
nsMgr.AddNamespace("tools", ToolsXmlNamespace);
}
public string Save()
{
return SaveAs(m_Path);
}
public string SaveAs(string path)
{
using (var writer = new XmlTextWriter(path, new UTF8Encoding(false)))
{
writer.Formatting = Formatting.Indented;
Save(writer);
}
return path;
}
}
internal class AndroidManifest : AndroidXmlDocument
{
internal readonly XmlElement ApplicationElement;
public AndroidManifest(string path) : base(path)
{
ApplicationElement = SelectSingleNode("/manifest/application") as XmlElement;
}
internal XmlAttribute GenerateAttribute(string prefix, string key, string value, string XmlNamespace)
{
XmlAttribute attr = CreateAttribute(prefix, key, XmlNamespace);
attr.Value = value;
return attr;
}
internal void SetAttribute(XmlAttribute Attribute)
{
ApplicationElement.Attributes.Append(Attribute);
}
}
Моя проблема заключается в том, что после добавления 2атрибуты (replace и allowBackup), пространство имен инструментов также добавляется в конец тега
<application android:theme="@style/UnityThemeSelector" android:icon="@mipmap/app_icon" android:label="@string/app_name" android:isGame="true" android:banner="@drawable/app_banner" tools:replace="android:allowBackup" android:allowBackup="true" xmlns:tools="http://schemas.android.com/apk/res/tools">
Как это можно исправить?Я попытался установить для XmlNamespace значение null, но из-за этого префикс (tools, android) не печатался.