116 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			116 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | // | |||
|  | //  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 | |||
|  | { | |||
|  |     /// <summary> | |||
|  |     /// Adds the AppLovin Quality Service plugin to the gradle template file. See <see cref="AppLovinProcessGradleBuildFile"/> for more details. | |||
|  |     /// </summary> | |||
|  |     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); | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         /// Adds or updates an Android dependency in the AppLovin Dependencies.xml file. | |||
|  |         /// </summary> | |||
|  |         /// <param name="package">The package that we are trying to update</param> | |||
|  |         /// <param name="newDependency">The new dependency to add if it doesn't exist</param> | |||
|  |         /// <returns>Returns true if the file was successfully edited</returns> | |||
|  |         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); | |||
|  |         } | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         /// Removed an android dependency from the AppLovin Dependencies.xml file. | |||
|  |         /// </summary> | |||
|  |         /// <param name="package">The package to remove</param> | |||
|  |         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 |