123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- 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 =
- "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;
- }
- }
|