diff --git a/build-tools/gradle/gradle/wrapper/gradle-wrapper.properties b/build-tools/gradle/gradle/wrapper/gradle-wrapper.properties index fae08049a6f..d6e308a6378 100644 --- a/build-tools/gradle/gradle/wrapper/gradle-wrapper.properties +++ b/build-tools/gradle/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Javac.targets b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Javac.targets index 4c2a8ed5173..5be2f0eef1c 100644 --- a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Javac.targets +++ b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Javac.targets @@ -124,6 +124,7 @@ It is shared between "legacy" binding projects and .NET 7+ projects. Jars="@(_BindingJavaLibrariesToCompile);@(_ReferenceJavaLibs)" JavacTargetVersion="$(JavacTargetVersion)" JavacSourceVersion="$(JavacSourceVersion)" + JdkVersion="$(_JdkVersion)" IntermediateOutputPath="$(IntermediateOutputPath)" AssemblyIdentityMapFile="$(_AndroidLibrayProjectAssemblyMapFile)" /> @@ -171,6 +172,7 @@ It is shared between "legacy" binding projects and .NET 7+ projects. Jars="@(_JavaLibrariesToCompile);@(_InstantRunJavaReference);@(_ReferenceJavaLibs)" JavacTargetVersion="$(JavacTargetVersion)" JavacSourceVersion="$(JavacSourceVersion)" + JdkVersion="$(_JdkVersion)" IntermediateOutputPath="$(IntermediateOutputPath)" AssemblyIdentityMapFile="$(_AndroidLibrayProjectAssemblyMapFile)" /> diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/Javac.cs b/src/Xamarin.Android.Build.Tasks/Tasks/Javac.cs index b7df052a49f..74cbb16c6e4 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/Javac.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/Javac.cs @@ -27,6 +27,8 @@ public class Javac : JavaCompileToolTask public string JavacTargetVersion { get; set; } public string JavacSourceVersion { get; set; } + public string JdkVersion { get; set; } + public override string DefaultErrorCode => "JAVAC0000"; public override bool RunTask () @@ -61,12 +63,28 @@ protected override string GenerateCommandLineCommands () cmd.AppendSwitchIfNotNull ("-J-Dfile.encoding=", "UTF8"); cmd.AppendFileNameIfNotNull (string.Format ("@{0}", TemporarySourceListFile)); - cmd.AppendSwitchIfNotNull ("-target ", JavacTargetVersion); - cmd.AppendSwitchIfNotNull ("-source ", JavacSourceVersion); + + if (int.TryParse (JavacSourceVersion, out int sourceVersion) && + int.TryParse (JavacTargetVersion, out int targetVersion) && + JavacSupportsRelease ()) { + cmd.AppendSwitchIfNotNull ("--release ", Math.Max (sourceVersion, targetVersion).ToString ()); + } else { + cmd.AppendSwitchIfNotNull ("-target ", JavacTargetVersion); + cmd.AppendSwitchIfNotNull ("-source ", JavacSourceVersion); + } return cmd.ToString (); } + bool JavacSupportsRelease () + { + if (string.IsNullOrEmpty (JdkVersion)) { + return false; + } + var jdkVersion = Version.Parse (JdkVersion); + return jdkVersion.Major >= 17; + } + protected override void WriteOptionsToResponseFile (StreamWriter sw) { sw.WriteLine ($"-d \"{ClassesOutputDirectory.Replace (@"\", @"\\")}\""); diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.props.in b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.props.in index f58d69ec2d7..8be23004de8 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.props.in +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.props.in @@ -17,7 +17,7 @@ false true true - 17.0.99 + 21.0.99 1.6.0 {abi}{versionCode:D5} UpdateGeneratedFiles