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