update: 移动文件
							parent
							
								
									603a78736e
								
							
						
					
					
						commit
						68a14a4ae5
					
				|  | @ -1,252 +0,0 @@ | |||
| 
 | ||||
| using System.Collections.Generic; | ||||
| 
 | ||||
| namespace Guru.Editor | ||||
| { | ||||
|     using System.Xml; | ||||
|     using System.IO; | ||||
|     using UnityEngine; | ||||
|      | ||||
|     /// <summary> | ||||
|     /// Android 配置修改器 | ||||
|     /// </summary> | ||||
|     public class MainManifestDoc | ||||
|     { | ||||
|         private const string TargetPath = "Plugins/Android/AndroidManifest.xml"; | ||||
|         private const string XmlnsAndroid = "xmlns:android"; | ||||
|         private const string NamespaceAndroid = "http://schemas.android.com/apk/res/android"; | ||||
|         private const string XmlnsTools= "xmlns:tools"; | ||||
|         private const string NamespaceTools = "http://schemas.android.com/tools"; | ||||
|          | ||||
|          | ||||
|          | ||||
|         private XmlDocument _doc; | ||||
|         public XmlDocument Doc => _doc; | ||||
| 
 | ||||
|         private string _docPath; | ||||
|         private bool _isReady = false; | ||||
|          | ||||
|         private XmlElement _manifestNode; | ||||
|         private XmlElement _applicationNode; | ||||
|         private XmlNodeList _metadataList; | ||||
|         private XmlNodeList _permissionList; | ||||
| 
 | ||||
|          | ||||
|         #region Initiallize | ||||
|          | ||||
|         /// <summary> | ||||
|         /// 加载文件 | ||||
|         /// </summary> | ||||
|         /// <param name="docPath"></param> | ||||
|         /// <returns></returns> | ||||
|         public static MainManifestDoc Load(string docPath = "") | ||||
|         { | ||||
|             if (string.IsNullOrEmpty(docPath)) | ||||
|             { | ||||
|                 docPath = Path.GetFullPath(Path.Combine(Application.dataPath, TargetPath)); | ||||
|             } | ||||
| 
 | ||||
|             if (!File.Exists(docPath)) | ||||
|             { | ||||
|                 Debug.LogError($"--- File not found: {docPath}"); | ||||
|                 return null; | ||||
|             } | ||||
| 
 | ||||
|             var mod = new MainManifestDoc(); | ||||
|             mod.ReadFromPath(docPath); | ||||
|             return mod; | ||||
|         } | ||||
| 
 | ||||
|         public static MainManifestDoc Read(string xmlStr, string docPath = "") | ||||
|         { | ||||
|             var mod = new MainManifestDoc(); | ||||
|             mod.ReadFromXml(xmlStr, docPath); | ||||
|             return mod; | ||||
|         } | ||||
|          | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// 从文件路径读取 | ||||
|         /// </summary> | ||||
|         /// <param name="docPath"></param> | ||||
|         public void ReadFromPath(string docPath) | ||||
|         { | ||||
|             _isReady = false; | ||||
|             if (File.Exists(_docPath)) | ||||
|             { | ||||
|                 _docPath = docPath; | ||||
|                 var xmlStr = File.ReadAllText(docPath); | ||||
|                 ReadFromXml(xmlStr); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         public void ReadFromXml(string xmlStr, string docPath = "") | ||||
|         { | ||||
|             _doc = new XmlDocument(); | ||||
|             _doc.LoadXml(xmlStr); | ||||
|             Init(); | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Initializes the Doc | ||||
|         /// </summary> | ||||
|         private void Init() | ||||
|         { | ||||
|             // --- Root Nodes --- | ||||
|             _manifestNode = _doc.SelectSingleNode("manifest") as XmlElement; | ||||
|             _applicationNode = _doc.SelectSingleNode("manifest/application") as XmlElement; | ||||
|             // --- Metadatas --- | ||||
|             _metadataList = _applicationNode.SelectNodes("meta-data"); | ||||
|             // --- Permissions --- | ||||
|             _permissionList = _applicationNode.SelectNodes("uses-permission"); | ||||
| 
 | ||||
|             AddXmlnsAndroid(); | ||||
|             AddXmlnsTools(); | ||||
|             _isReady = true; | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Save Doc | ||||
|         /// </summary> | ||||
|         public void Save(string docPath = "") | ||||
|         { | ||||
|             if (_isReady) | ||||
|             { | ||||
|                 if(string.IsNullOrEmpty(docPath)) docPath = _docPath; | ||||
|                 if (!string.IsNullOrEmpty(docPath)) | ||||
|                 { | ||||
|                     var dir = Directory.GetParent(docPath); | ||||
|                     if(!dir.Exists) dir.Create(); | ||||
|                     _doc.Save(_docPath); | ||||
| 
 | ||||
|                 } | ||||
| 
 | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         #endregion | ||||
| 
 | ||||
|         #region Node Opreation | ||||
| 
 | ||||
|          | ||||
|         public static bool AddAttribute(XmlElement node, string key, string value) | ||||
|         { | ||||
|             if (node != null) | ||||
|             { | ||||
|                 if (node.HasAttribute(key)) | ||||
|                 { | ||||
|                     node.Attributes[key].Value = value; | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     node.SetAttribute(key, value); | ||||
|                 } | ||||
|                 return true; | ||||
|             } | ||||
|             return false; | ||||
|         } | ||||
|          | ||||
|          | ||||
| 
 | ||||
|         #endregion | ||||
|          | ||||
| 
 | ||||
|         #region API | ||||
| 
 | ||||
|         public bool AddXmlnsAndroid() | ||||
|         { | ||||
|             return AddAttribute(_manifestNode, XmlnsAndroid, NamespaceAndroid); | ||||
|         } | ||||
|          | ||||
|         public bool AddXmlnsTools() | ||||
|         { | ||||
|             return AddAttribute(_manifestNode, XmlnsTools, NamespaceTools); | ||||
|         } | ||||
|          | ||||
|         /// <summary> | ||||
|         /// Add Replace Item | ||||
|         /// </summary> | ||||
|         /// <param name="item"></param> | ||||
|         public void AddReplaceItem(string item) | ||||
|         { | ||||
|             if (_manifestNode != null) | ||||
|             { | ||||
|                 List<string> items = new List<string>(5); | ||||
|                 if (_manifestNode.HasAttribute("replace", NamespaceTools)) | ||||
|                 { | ||||
|                     var arr = _manifestNode.GetAttribute("replace",NamespaceTools).Split(','); | ||||
|                     if(arr != null && arr.Length > 0) | ||||
|                     { | ||||
|                         items.AddRange(arr); | ||||
|                     } | ||||
|                 } | ||||
| 
 | ||||
|                 if (!items.Contains(item)) items.Add(item); | ||||
|                  | ||||
|                 _manifestNode.SetAttribute("replace",  NamespaceTools, string.Join(",", items)); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Set metadata | ||||
|         /// </summary> | ||||
|         /// <param name="key"></param> | ||||
|         /// <param name="value"></param> | ||||
|         public void SetMetadata(string key, string value) | ||||
|         { | ||||
|             _metadataList = _applicationNode?.SelectNodes("meta-data") ?? null; | ||||
|              | ||||
|             XmlElement item = null; | ||||
|             if (_metadataList != null) | ||||
|             { | ||||
|                 foreach (XmlElement e in _metadataList) | ||||
|                 { | ||||
|                     // var nm =    e.GetAttribute("name", NamespaceAndroid); | ||||
|                     if (e.GetAttribute("name", NamespaceAndroid) is string k && k == key) | ||||
|                     { | ||||
|                         item = e; | ||||
|                         break; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             if (item == null) | ||||
|             { | ||||
|                 item = _doc.CreateElement("meta-data"); | ||||
|                 _applicationNode?.AppendChild(item); | ||||
|             } | ||||
|              | ||||
|             item.SetAttribute("name", NamespaceAndroid, key); | ||||
|             item.SetAttribute("value", NamespaceAndroid, value); | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         #endregion | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|         #region Output | ||||
| 
 | ||||
| 
 | ||||
|         public override string ToString() | ||||
|         { | ||||
|             if (_doc != null) return _doc.InnerXml; | ||||
|             return this.ToString(); | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         #endregion | ||||
|          | ||||
|          | ||||
|          | ||||
|          | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|     } | ||||
| } | ||||
|  | @ -1,3 +0,0 @@ | |||
| fileFormatVersion: 2 | ||||
| guid: 89a1c7f77fcf4982adbbaf6dc61bd62d | ||||
| timeCreated: 1711505949 | ||||
		Loading…
	
		Reference in New Issue