using System; using UnityEngine; using UnityEditor; using System.IO; using GooglePlayServices; using UnityEditor.Build; using UnityEditor.Build.Reporting; namespace GoogleMobileAds.Editor { /// /// Pre-processor that performs common setup tasks for all platforms before a build. /// public class BuildPreProcessor : IPreprocessBuildWithReport { // Set the callback order to be before EDM4U. // https://github.com/googlesamples/unity-jar-resolver/blob/master/source/AndroidResolver/src/PlayServicesPreBuild.cs#L39 public int callbackOrder { get { return -1; } } private readonly static string _linkXmlAssetsPath = Path.Combine(Application.dataPath, "GoogleMobileAds", "link.xml"); public void OnPreprocessBuild(BuildReport report) { // Unity's managed code stripping process does not inherently process `link.xml` files // in UPM packages. This pre-processor copies the `link.xml` file from the UPM package // to the Unity project's `Assets/GoogleMobileAds` directory if it does not exist. if (!File.Exists(_linkXmlAssetsPath)) { CopyLinkXml(); } } private static void CopyLinkXml() { if (!AssetDatabase.IsValidFolder(Path.Combine("Assets", "GoogleMobileAds"))) { AssetDatabase.CreateFolder("Assets", "GoogleMobileAds"); } var pathUtils = ScriptableObject.CreateInstance(); if (pathUtils.IsPackageRootPath()) { string parentDirectoryPath = pathUtils.GetParentDirectoryAssetPath(); string linkXmlPackagePath = Path.Combine(parentDirectoryPath, "link.xml"); if(String.IsNullOrEmpty(linkXmlPackagePath)) { Debug.LogWarning("link.xml not found in the package."); return; } AssetDatabase.CopyAsset(linkXmlPackagePath, _linkXmlAssetsPath); } AssetDatabase.Refresh(); } } }