diff --git a/source/AndroidResolver/src/PlayServicesResolver.cs b/source/AndroidResolver/src/PlayServicesResolver.cs index 5904778c..10215769 100644 --- a/source/AndroidResolver/src/PlayServicesResolver.cs +++ b/source/AndroidResolver/src/PlayServicesResolver.cs @@ -571,8 +571,17 @@ public static string GradleVersion { // Gradle plugin version. private static DateTime mainTemplateLastWriteTime = default(DateTime); // 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( + @"['""]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( - @"['""]com\.android\.tools\.build:gradle:([^']+)['""]$"); + @"['""]com\.android\.application['""] version ['""]([^'""]+)['""]"); /// /// Get the Android Gradle Plugin version used by Unity. @@ -609,7 +618,12 @@ public static string AndroidGradlePluginVersion { SearchOption.TopDirectoryOnly)); foreach (var path in gradleTemplates) { foreach (var line in File.ReadAllLines(path)) { - var match = androidGradlePluginVersionExtract.Match(line); + var match = androidGradlePluginVersionExtract_legacy.Match(line); + if (match != null && match.Success) { + androidGradlePluginVersion = match.Result("$1"); + break; + } + match = androidGradlePluginVersionExtract.Match(line); if (match != null && match.Success) { androidGradlePluginVersion = match.Result("$1"); break; diff --git a/source/AndroidResolver/src/UnityCompat.cs b/source/AndroidResolver/src/UnityCompat.cs index e9dbcd22..265e19fb 100644 --- a/source/AndroidResolver/src/UnityCompat.cs +++ b/source/AndroidResolver/src/UnityCompat.cs @@ -64,8 +64,8 @@ private static int VersionFromAndroidSDKVersionsEnum(object enumValue, string fa //Fall back on auto if the enum value is not parsable return -1; } - - // If the enumName is empty then enumValue was not represented in the enum, + + // If the enumName is empty then enumValue was not represented in the enum, // most likely because Unity has not yet added the new version, // fall back on the raw enumValue if (String.IsNullOrEmpty(enumName)) return (int)enumValue; @@ -462,7 +462,9 @@ private static string GetUnity56AndAboveApplicationIdentifier(BuildTarget buildT private static bool SetUnity56AndAboveApplicationIdentifier(BuildTarget buildTarget, string applicationIdentifier) { var setApplicationIdentifierMethod = - typeof(UnityEditor.PlayerSettings).GetMethod("SetApplicationIdentifier"); + typeof(UnityEditor.PlayerSettings).GetMethod( + "SetApplicationIdentifier", + new[]{typeof(BuildTargetGroup), typeof(string)}); if (setApplicationIdentifierMethod == null) return false; var buildTargetGroup = ConvertBuildTargetToBuildTargetGroup(buildTarget); if (buildTargetGroup == BuildTargetGroup.Unknown) return false; diff --git a/source/AndroidResolver/test/src/AndroidResolverIntegrationTests.cs b/source/AndroidResolver/test/src/AndroidResolverIntegrationTests.cs index 5bc48065..32d807ae 100644 --- a/source/AndroidResolver/test/src/AndroidResolverIntegrationTests.cs +++ b/source/AndroidResolver/test/src/AndroidResolverIntegrationTests.cs @@ -484,10 +484,24 @@ private static void ValidateAndroidTargetSelected( }); IntegrationTester.Runner.LogSummaryAndExit(); } + + // Verify if PlayServicesResolver properties are working properly. + var testCaseResult = new IntegrationTester.TestCaseResult(testCase); + + if (String.IsNullOrEmpty(PlayServicesResolver.AndroidGradlePluginVersion)) { + testCaseResult.ErrorMessages.Add(String.Format( + "PlayServicesResolver.AndroidGradlePluginVersion is empty or null")); + } + + if (String.IsNullOrEmpty(PlayServicesResolver.GradleVersion)) { + testCaseResult.ErrorMessages.Add(String.Format( + "PlayServicesResolver.GradleVersion is empty or null")); + } + // Also, set the internal Gradle version to a deterministic version number. This controls // how gradle template snippets are generated by GradleTemplateResolver. PlayServicesResolver.GradleVersion = "2.14"; - testCaseComplete(new IntegrationTester.TestCaseResult(testCase)); + testCaseComplete(testCaseResult); } ///