private static void ResolveInternalLibs(AN_AndroidBuildRequirements requirements) { List <string> libsToAdd = new List <string>(); List <string> libsToRemove = new List <string>(); List <string> internalLibs = SA_AssetDatabase.FindAssetsWithExtentions(AN_Settings.ANDROID_INTERNAL_FOLDER); foreach (var lib in internalLibs) { string libName = SA_AssetDatabase.GetFileName(lib); if (!requirements.HasInternalLib(libName)) { libsToRemove.Add(libName); } } foreach (var lib in requirements.InternalLibs) { string libPath = AN_Settings.ANDROID_INTERNAL_FOLDER + lib; if (!SA_AssetDatabase.IsFileExists(libPath)) { libsToAdd.Add(lib); } } SA_PluginsEditor.UninstallLibs(AN_Settings.ANDROID_INTERNAL_FOLDER, libsToRemove); SA_PluginsEditor.InstallLibs(AN_Settings.ANDROID_INTERNAL_FOLDER_DISABLED, AN_Settings.ANDROID_INTERNAL_FOLDER, libsToAdd); }
private static List <string> ReadDependencies() { var result = new List <string>(); try { if (SA_AssetDatabase.IsFileExists(AN_Settings.DEPENDENCIES_FILE_PATH)) { var doc = new XmlDocument(); doc.Load(SA_PathUtil.ConvertRelativeToAbsolutePath(AN_Settings.DEPENDENCIES_FILE_PATH)); var xnList = doc.SelectNodes("dependencies/androidPackages/androidPackage"); foreach (XmlNode xn in xnList) { var spec = xn.Attributes["spec"].Value; result.Add(spec); } } } catch (Exception ex) { AN_Logger.LogError("Error reading AN_Dependencies"); AN_Logger.LogError(AN_Settings.DEPENDENCIES_FILE_PATH + " filed: " + ex.Message); } return(result); }
public void SaveManifest() { #if !(UNITY_WP8 || UNITY_METRO) if (!SA_AssetDatabase.IsFileExists(m_path)) { string m_folderPath = SA_PathUtil.GetDirectoryPath(m_path); if (!SA_AssetDatabase.IsValidFolder(m_folderPath)) { SA_AssetDatabase.CreateFolder(m_folderPath); } } XmlDocument newDoc = new XmlDocument(); //Create XML header XmlNode docNode = newDoc.CreateXmlDeclaration("1.0", "UTF-8", null); newDoc.AppendChild(docNode); XmlElement child = newDoc.CreateElement("manifest"); child.SetAttribute("xmlns:android", "http://schemas.android.com/apk/res/android"); child.SetAttribute("xmlns:tools", "http://schemas.android.com/tools"); child.SetAttribute("package", "com.stansassets.androidnative"); m_template.ToXmlElement(newDoc, child); newDoc.AppendChild(child); newDoc.Save(SA_PathUtil.ConvertRelativeToAbsolutePath(m_path)); //Replace 'android___' pattern with 'android:' TextReader reader = new StreamReader(SA_PathUtil.ConvertRelativeToAbsolutePath(m_path)); string src = reader.ReadToEnd(); string pattern = @"android___"; string replacement = "android:"; Regex regex = new Regex(pattern); src = regex.Replace(src, replacement); pattern = @"tools___"; replacement = "tools:"; regex = new Regex(pattern); src = regex.Replace(src, replacement); reader.Close(); TextWriter writer = new StreamWriter(SA_PathUtil.ConvertRelativeToAbsolutePath(m_path)); writer.Write(src); writer.Close(); AssetDatabase.Refresh(); #endif }
public static void SaveManifest() { #if !(UNITY_WP8 || UNITY_METRO) if (!SA_AssetDatabase.IsFileExists(AMM_Settings.MANIFEST_FILE_PATH)) { //Make sure we have a folder if (!SA_AssetDatabase.IsValidFolder(AMM_Settings.MANIFEST_FOLDER_PATH)) { SA_AssetDatabase.CreateFolder(AMM_Settings.MANIFEST_FOLDER_PATH); } } XmlDocument newDoc = new XmlDocument(); //Create XML header XmlNode docNode = newDoc.CreateXmlDeclaration("1.0", "UTF-8", null); newDoc.AppendChild(docNode); XmlElement child = newDoc.CreateElement("manifest"); s_template.ToXmlElement(newDoc, child); newDoc.AppendChild(child); newDoc.Save(SA_PathUtil.ConvertRelativeToAbsolutePath(AMM_Settings.MANIFEST_FILE_PATH)); //Replace 'android___' pattern with 'android:' TextReader reader = new StreamReader(SA_PathUtil.ConvertRelativeToAbsolutePath(AMM_Settings.MANIFEST_FILE_PATH)); string src = reader.ReadToEnd(); string pattern = @"android___"; string replacement = "android:"; Regex regex = new Regex(pattern); src = regex.Replace(src, replacement); pattern = @"tools___"; replacement = "tools:"; regex = new Regex(pattern); src = regex.Replace(src, replacement); reader.Close(); TextWriter writer = new StreamWriter(SA_PathUtil.ConvertRelativeToAbsolutePath(AMM_Settings.MANIFEST_FILE_PATH)); writer.Write(src); writer.Close(); AssetDatabase.Refresh(); #endif }
public static void UninstallLibs(string path, List <string> libs) { for (int i = 0; i < libs.Count; i++) { var lib = libs[i]; float progress = (float)(i + 1) / (float)libs.Count; EditorUtility.DisplayProgressBar("Stan's Assets.", "Uninstalling: " + lib, progress); string libPath = path + lib; if (SA_AssetDatabase.IsFileExists(libPath) || SA_AssetDatabase.IsDirectoryExists(libPath)) { SA_AssetDatabase.DeleteAsset(path + lib); } else { Debug.LogWarning("There is no file to deleted at: " + libPath); } } EditorUtility.ClearProgressBar(); }
public static void InstallLibs(string source, string destination, List <string> libs) { for (int i = 0; i < libs.Count; i++) { var lib = libs[i]; string disabledLib = lib + DISABLED_LIB_EXTENSION; string sourcePath = source + disabledLib; string destinationPath = destination + lib; if (!SA_AssetDatabase.IsFileExists(sourcePath)) { Debug.LogError("Can't find the source lib folder at path: " + sourcePath); continue; } float progress = (float)(i + 1) / (float)libs.Count; EditorUtility.DisplayProgressBar("Stan's Assets.", "Installing: " + lib, progress); SA_AssetDatabase.CopyAsset(sourcePath, destinationPath); } EditorUtility.ClearProgressBar(); }
private void ReadManifest(string manifestPath) { m_template = new AMM_Template(); if (!SA_AssetDatabase.IsFileExists(manifestPath)) { return; } #if !(UNITY_WP8 || UNITY_METRO) //Read XML file XmlDocument doc = new XmlDocument(); doc.Load(SA_PathUtil.ConvertRelativeToAbsolutePath(manifestPath)); XmlNode rootNode = doc.DocumentElement; foreach (XmlAttribute attr in rootNode.Attributes) { m_template.SetValue(attr.Name, attr.Value); } foreach (XmlNode childNode in rootNode.ChildNodes) { if (!childNode.Name.Equals("application") && !childNode.Name.Equals("uses-permission") && !childNode.Name.Equals("#comment")) { m_template.AddProperty(childNode.Name, AMM_Manager.ParseProperty(childNode)); } } XmlNode applicationNode = null; foreach (XmlNode childNode in rootNode.ChildNodes) { if (childNode.Name.Equals("application")) { applicationNode = childNode; break; } } foreach (XmlAttribute attr in applicationNode.Attributes) { m_template.ApplicationTemplate.SetValue(attr.Name, attr.Value); } foreach (XmlNode childNode in applicationNode.ChildNodes) { if (!childNode.Name.Equals("#comment") && !childNode.Name.Equals("activity")) { m_template.ApplicationTemplate.AddProperty(childNode.Name, AMM_Manager.ParseProperty(childNode)); } } foreach (XmlNode childNode in applicationNode.ChildNodes) { if (childNode.Name.Equals("activity") && !childNode.Name.Equals("#comment")) { string activityName = ""; if (childNode.Attributes["android:name"] != null) { activityName = childNode.Attributes["android:name"].Value; } else { Debug.LogWarning("Android Manifest contains activity tag without android:name attribute."); } XmlNode launcher = null; bool isLauncher = false; foreach (XmlNode actNode in childNode.ChildNodes) { if (actNode.Name.Equals("intent-filter")) { foreach (XmlNode intentNode in actNode.ChildNodes) { if (intentNode.Name.Equals("category")) { if (intentNode.Attributes["android:name"].Value.Equals("android.intent.category.LAUNCHER")) { isLauncher = true; launcher = actNode; } } } } } AMM_ActivityTemplate activity = new AMM_ActivityTemplate(isLauncher, activityName); foreach (XmlAttribute attr in childNode.Attributes) { activity.SetValue(attr.Name, attr.Value); } foreach (XmlNode actNode in childNode.ChildNodes) { if (!actNode.Name.Equals("#comment")) { if (actNode != launcher) { activity.AddProperty(actNode.Name, AMM_Manager.ParseProperty(actNode)); } } } m_template.ApplicationTemplate.AddActivity(activity); } } //Load Manifest Permissions foreach (XmlNode node in rootNode.ChildNodes) { if (node.Name.Equals("uses-permission")) { AMM_PropertyTemplate permission = new AMM_PropertyTemplate("uses-permission"); permission.SetValue("android:name", node.Attributes["android:name"].Value); m_template.AddPermission(permission); } } #endif }