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
|