// // AppLovinBuildPreProcessor.cs // AppLovin MAX Unity Plugin // // Created by Santosh Bagadi on 8/27/19. // Copyright © 2019 AppLovin. All rights reserved. // #if UNITY_ANDROID using System.Xml.Linq; using UnityEditor.Build; using UnityEditor.Build.Reporting; namespace AppLovinMax.Scripts.IntegrationManager.Editor { /// /// Adds the AppLovin Quality Service plugin to the gradle template file. See for more details. /// public class AppLovinPreProcessAndroid : AppLovinProcessGradleBuildFile, IPreprocessBuildWithReport { private const string ElementNameAndroidPackages = "androidPackages"; private const string ElementNameAndroidPackage = "androidPackage"; private const string AttributeNameSpec = "spec"; private const string UmpDependencyPackage = "com.google.android.ump:user-messaging-platform:"; private const string UmpDependencyVersion = "2.1.0"; public void OnPreprocessBuild(BuildReport report) { PreprocessAppLovinQualityServicePlugin(); AddGoogleCmpDependencyIfNeeded(); } private static void PreprocessAppLovinQualityServicePlugin() { // We can only process gradle template file here. If it is not available, we will try again in post build on Unity IDEs newer than 2018_2 (see AppLovinPostProcessGradleProject). if (!AppLovinIntegrationManager.GradleTemplateEnabled) return; #if UNITY_2019_3_OR_NEWER // The publisher could be migrating from older Unity versions to 2019_3 or newer. // If so, we should delete the plugin from the template. The plugin will be added to the project's application module in the post processing script (AppLovinPostProcessGradleProject). RemoveAppLovinQualityServiceOrSafeDkPlugin(AppLovinIntegrationManager.GradleTemplatePath); #else AddAppLovinQualityServicePlugin(AppLovinIntegrationManager.GradleTemplatePath); #endif } private static void AddGoogleCmpDependencyIfNeeded() { if (AppLovinInternalSettings.Instance.ConsentFlowEnabled) { var umpPackage = new XElement(ElementNameAndroidPackage, new XAttribute(AttributeNameSpec, UmpDependencyPackage + UmpDependencyVersion)); var success = AddOrUpdateAndroidDependency(UmpDependencyPackage, umpPackage ); if (!success) { MaxSdkLogger.UserWarning("Google CMP will not function. Unable to add user-messaging-platform dependency."); } } else { RemoveAndroidDependency(UmpDependencyPackage); } } /// /// Adds or updates an Android dependency in the AppLovin Dependencies.xml file. /// /// The package that we are trying to update /// The new dependency to add if it doesn't exist /// Returns true if the file was successfully edited private static bool AddOrUpdateAndroidDependency(string package, XElement newDependency) { var dependenciesFilePath = AppLovinDependenciesFilePath; var dependenciesDocument = GetAppLovinDependenciesFile(dependenciesFilePath, AppLovinIntegrationManager.IsPluginInPackageManager); if (dependenciesDocument == null) return false; AddOrUpdateDependency(dependenciesDocument, ElementNameAndroidPackages, ElementNameAndroidPackage, AttributeNameSpec, package, newDependency); return SaveDependenciesFile(dependenciesDocument, dependenciesFilePath); } /// /// Removed an android dependency from the AppLovin Dependencies.xml file. /// /// The package to remove private static void RemoveAndroidDependency(string package) { var dependenciesFilePath = AppLovinDependenciesFilePath; var dependenciesDocument = GetAppLovinDependenciesFile(dependenciesFilePath); if (dependenciesDocument == null) return; var removed = RemoveDependency(dependenciesDocument, ElementNameAndroidPackages, ElementNameAndroidPackage, AttributeNameSpec, package); if (!removed) return; SaveDependenciesFile(dependenciesDocument, dependenciesFilePath); } public int callbackOrder { get { return CallbackOrder; } } } } #endif