You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CrowdControl/Assets/GoogleMobileAds/Editor/GradleProcessor.cs

108 lines
4.2 KiB
C#

using System;
using System.IO;
using UnityEditor.Android;
using GoogleMobileAds.Editor;
public class GradleProcessor : IPostGenerateGradleAndroidProject
{
public int callbackOrder { get { return 0; } }
private const string GMA_PACKAGING_OPTIONS_LAUNCHER =
"apply from: '../unityLibrary/GoogleMobileAdsPlugin.androidlib/packaging_options.gradle'";
private const string GMA_PACKAGING_OPTIONS =
"apply from: 'GoogleMobileAdsPlugin.androidlib/packaging_options.gradle'";
private const string GMA_VALIDATE_GRADLE_DEPENDENCIES =
"gradle.projectsEvaluated { apply from: 'GoogleMobileAdsPlugin.androidlib/validate_dependencies.gradle' }";
public void OnPostGenerateGradleAndroidProject(string path)
{
var rootDirinfo = new DirectoryInfo(path);
var rootPath = rootDirinfo.Parent.FullName;
var gradleList = Directory.GetFiles(rootPath, "build.gradle", SearchOption.AllDirectories);
var packagingOptionsLauncher = GMA_PACKAGING_OPTIONS_LAUNCHER;
var packagingOptionsUnityLibrary = GMA_PACKAGING_OPTIONS;
var validateGradleDependencies = GMA_VALIDATE_GRADLE_DEPENDENCIES;
// Windows path requires '\\'
#if UNITY_EDITOR_WIN
packagingOptionsLauncher = packagingOptionsLauncher.Replace("/","\\\\");
packagingOptionsUnityLibrary = packagingOptionsUnityLibrary.Replace("/","\\\\");
validateGradleDependencies = validateGradleDependencies.Replace("/","\\\\");
#endif
foreach (var gradlepath in gradleList)
{
if (!gradlepath.Contains("unityLibrary/build.gradle") &&
!gradlepath.Contains("launcher/build.gradle") &&
!gradlepath.Contains("unityLibrary\\build.gradle") &&
!gradlepath.Contains("launcher\\build.gradle"))
{
continue;
}
var contents = File.ReadAllText(gradlepath);
// Delete existing packaging_options and then set it if enabled.
if (contents.Contains("packaging_options.gradle"))
{
contents = DeleteLineContainingSubstring(contents, "packaging_options.gradle");
}
if (!GoogleMobileAdsSettings.LoadInstance().EnableKotlinXCoroutinesPackagingOption)
{
File.WriteAllText(gradlepath, contents);
continue;
}
if (gradlepath.Contains("unityLibrary/build.gradle") || gradlepath.Contains("unityLibrary\\build.gradle"))
{
contents += Environment.NewLine + packagingOptionsUnityLibrary;
}
else if (gradlepath.Contains("launcher/build.gradle") || gradlepath.Contains("launcher\\build.gradle"))
{
contents += Environment.NewLine + packagingOptionsLauncher;
}
File.WriteAllText(gradlepath, contents);
}
// TODO (b/311555203) Use delete then write approach above to update this Gradle script too.
var unityLibraryGradle = Directory.GetFiles(rootPath, "unityLibrary/build.gradle",
SearchOption.TopDirectoryOnly);
foreach (var gradlePath in unityLibraryGradle)
{
var contents = File.ReadAllText(gradlePath);
if (GoogleMobileAdsSettings.LoadInstance().ValidateGradleDependencies)
{
if (!contents.Contains(validateGradleDependencies))
{
contents += Environment.NewLine + validateGradleDependencies;
File.WriteAllText(gradlePath, contents);
}
}
else
{
contents = DeleteLineContainingSubstring(contents, validateGradleDependencies);
File.WriteAllText(gradlePath, contents);
}
}
}
private string DeleteLineContainingSubstring(string file, string substring)
{
string newFile = "";
var lines = file.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
foreach (var line in lines)
{
if (!line.Contains(substring))
{
newFile += line + Environment.NewLine;
}
}
return newFile;
}
}