91 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			91 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | // Copyright (C) 2023 Google LLC | ||
|  | // | ||
|  | // Licensed under the Apache License, Version 2.0 (the "License"); | ||
|  | // you may not use this file except in compliance with the License. | ||
|  | // You may obtain a copy of the License at | ||
|  | // | ||
|  | //      http://www.apache.org/licenses/LICENSE-2.0 | ||
|  | // | ||
|  | // Unless required by applicable law or agreed to in writing, software | ||
|  | // distributed under the License is distributed on an "AS IS" BASIS, | ||
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
|  | // See the License for the specific language governing permissions and | ||
|  | // limitations under the License. | ||
|  | 
 | ||
|  | using System; | ||
|  | using System.Collections.Generic; | ||
|  | using System.IO; | ||
|  | using System.Text.RegularExpressions; | ||
|  | 
 | ||
|  | namespace GoogleMobileAds.Editor | ||
|  | { | ||
|  |     /* | ||
|  |     * Utils class that contains helper methods. | ||
|  |     */ | ||
|  |     public static class Utils | ||
|  |     { | ||
|  |         internal static string GradleTemplatePath = | ||
|  |             Path.Combine(AndroidPluginsDir, "baseProjectTemplate.gradle"); | ||
|  | 
 | ||
|  |         //  Android library plugins directory that contains custom gradle templates. | ||
|  |         internal const string AndroidPluginsDir = "Assets/Plugins/Android"; | ||
|  | 
 | ||
|  |         // Extracts an Android Gradle Plugin version number from the contents of a *.gradle file. | ||
|  |         // This should work for Unity 2022.1 and below. | ||
|  |         // Ex. | ||
|  |         //   classpath 'com.android.tools.build:gradle:4.0.1' | ||
|  |         private static Regex androidGradlePluginVersionExtract_legacy = | ||
|  |             new Regex(@"^\s*classpath\s+['""]com\.android\.tools\.build:gradle:([^'""]+)['""]$"); | ||
|  | 
 | ||
|  |         // Extracts an Android Gradle Plugin version number from the contents of a *.gradle file for | ||
|  |         // Unity 2022.2+ or 2023.1+. | ||
|  |         // Ex. | ||
|  |         //   id 'com.android.application' version '7.1.2' apply false | ||
|  |         private static Regex androidGradlePluginVersionExtract = | ||
|  |             new Regex(@"^\s*id\s+['""]com\.android\.application['""] version ['""]([^'""]+)['""]"); | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Get the Android Gradle Plugin version used by the Unity project. | ||
|  |         /// </summary> | ||
|  |         public static string AndroidGradlePluginVersion | ||
|  |         { | ||
|  |             private set {} | ||
|  |             get | ||
|  |             { | ||
|  |                 if (!Directory.Exists(AndroidPluginsDir) || !File.Exists(GradleTemplatePath)) | ||
|  |                 { | ||
|  |                     return DefaultAndroidGradlePlugin(); | ||
|  |                 } | ||
|  |                 var gradleTemplates = Directory.GetFiles(AndroidPluginsDir, "*.gradle", | ||
|  |                                                          SearchOption.TopDirectoryOnly); | ||
|  |                 foreach (var path in gradleTemplates) | ||
|  |                 { | ||
|  |                     foreach (var line in File.ReadAllLines(path)) | ||
|  |                     { | ||
|  |                         var match = androidGradlePluginVersionExtract_legacy.Match(line); | ||
|  |                         if (match != null && match.Success) | ||
|  |                         { | ||
|  |                             return match.Result("$1"); | ||
|  |                         } | ||
|  |                         match = androidGradlePluginVersionExtract.Match(line); | ||
|  |                         if (match != null && match.Success) | ||
|  |                         { | ||
|  |                             return match.Result("$1"); | ||
|  |                         } | ||
|  |                     } | ||
|  |                 } | ||
|  |                 return DefaultAndroidGradlePlugin(); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         // TODO(@vkini): read from default Unity baseProjectTemplate.gradle file | ||
|  |         private static string DefaultAndroidGradlePlugin() | ||
|  |         { | ||
|  | #if UNITY_2022_3_OR_NEWER | ||
|  |             return "7.1.2"; | ||
|  | #else | ||
|  |             return "4.0.1"; | ||
|  | #endif | ||
|  |         } | ||
|  |     } | ||
|  | } |