using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using UnityEditor.Build; using System.IO; using System.Xml; using UnityEditor.Callbacks; public class AndroidBuildProcessor { // build 开始时 [PostProcessBuildAttribute(1)] public static void OnPostProcessBuild(BuildTarget target, string path) { //throw new System.NotImplementedException(); Debug.Log("OnPostProcessBuild"); if (target == BuildTarget.Android) { OnPreprocessBuild_android(target, path); //读取源文件路径 //string sourceParh = Application.dataPath + "/PottingMobileSDK/google-services.json"; ////获取拷贝路径 = 打包输出路径 + 包名(打包文件夹名) + 下级路径 //string targetPath = path + "/" + PlayerSettings.productName; ////是否已存在文件夹 //if (!Directory.Exists(targetPath)) //{ // Directory.CreateDirectory(targetPath); //} ////拷贝文件(源路径及文件名, 拷贝路径及文件名, 若该文件名已存在,是否替换) //File.Copy(sourceParh, targetPath + "/google-services.json", true); } } /// /// 在生成android apk前,将一些配置写入AndroidManifest.xml /// /// /// public static void OnPreprocessBuild_android(BuildTarget buildTarget, string path) { Debug.Log("path: " + path); if (buildTarget != BuildTarget.Android) { return; } // 读取xml string xmlPath = Application.dataPath + "/Plugins/Android/AndroidManifest.xml"; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(xmlPath); // 包名 XmlNode node = xmlDoc.SelectSingleNode("/manifest"); // API_KEY node = FindNode(xmlDoc, "/manifest/application/meta-data", "android:name", "com.facebook.sdk.ApplicationId"); node.Attributes["android:value"].Value = "fb" + AdManagerSettings.Instance.AndroidFacebookID; node = FindNode(xmlDoc, "/manifest/application/meta-data", "android:name", "com.facebook.sdk.ClientToken"); node.Attributes["android:value"].Value = AdManagerSettings.Instance.AndroidFacebookClientToken; node = FindNode(xmlDoc, "/manifest/application/meta-data", "android:name", "applovin.sdk.key"); //node.Attributes["android:value"].Value = jd["android"]["android_manifest"]["yunwa_app_id"].ToString(); node = FindNode(xmlDoc, "/manifest/application/meta-data", "android:name", "com.google.android.gms.ads.APPLICATION_ID"); node.Attributes["android:value"].Value = AdManagerSettings.Instance.AndroidAdmobId; node = FindNode(xmlDoc, "/manifest/application/meta-data", "android:name", "com.google.android.gms.games.APP_ID"); node.Attributes["android:value"].Value = "\\u003"+AdManagerSettings.Instance.GoogleGamesAppID; //node = FindNode(xmlDoc, "/manifest/application/meta-data", "android:name", "com.google.android.gms.games.APP_ID"); //node.Attributes["android:value"].Value = AdManagerSettings.Instance.GoogleGamesAppID; // scheme XmlNodeList nodes = xmlDoc.SelectNodes("/manifest/application/activity/intent-filter/data"); node = nodes.Item(0); node.Attributes["android:scheme"].Value = "fb"+ AdManagerSettings.Instance.AndroidFacebookID; //com.facebook.app.FacebookContentProvider{APP_ID} node = FindNode(xmlDoc, "/manifest/application/provider", "android:name", "com.facebook.FacebookContentProvider"); node.Attributes["android:authorities"].Value = "com.facebook.app.FacebookContentProvider"+ AdManagerSettings.Instance.AndroidFacebookID; // 保存 xmlDoc.Save(xmlPath); AssetDatabase.Refresh(); } static XmlNode FindNode(XmlDocument xmlDoc, string xpath, string attributeName, string attributeValue) { XmlNodeList nodes = xmlDoc.SelectNodes(xpath); //Debug.Log(nodes.Count); for (int i = 0; i < nodes.Count; i++) { XmlNode node = nodes.Item(i); string _attributeValue = node.Attributes[attributeName].Value; if (_attributeValue == attributeValue) { return node; } } return null; } }