Skip to content

Instantly share code, notes, and snippets.

@jonpryor
Created October 13, 2025 20:47
Show Gist options
  • Save jonpryor/36943048440f4cd81a0287ba90e9bccf to your computer and use it in GitHub Desktop.
Save jonpryor/36943048440f4cd81a0287ba90e9bccf to your computer and use it in GitHub Desktop.
diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/GetAndroidDefineConstants.cs b/src/Xamarin.Android.Build.Tasks/Tasks/GetAndroidDefineConstants.cs
index 8699d0af0..f3bd8a40e 100644
--- a/src/Xamarin.Android.Build.Tasks/Tasks/GetAndroidDefineConstants.cs
+++ b/src/Xamarin.Android.Build.Tasks/Tasks/GetAndroidDefineConstants.cs
@@ -15,7 +15,7 @@ namespace Xamarin.Android.Tasks
public override string TaskPrefix => "GAD";
[Required]
- public int AndroidApiLevel { get; set; }
+ public string AndroidApiLevel { get; set; } = "";
public string? ProductVersion { get; set; }
@@ -34,9 +34,20 @@ namespace Xamarin.Android.Tasks
constants.Add (new TaskItem ("__MOBILE__"));
constants.Add (new TaskItem ("__ANDROID__"));
- for (int i = 1; i <= AndroidApiLevel; ++i) {
+ if (!MonoAndroidHelper.TryParseApiLevel (AndroidApiLevel, out var apiLevel)) {
+ return false;
+ }
+
+ for (int i = 1; i <= apiLevel.Major; ++i) {
constants.Add (new TaskItem ($"__ANDROID_{i}__"));
}
+ // TODO: We're just going to assume that there is a minor release for every major release from API-36.1 onward…
+ for (int i = 36; i < apiLevel.Major; ++i) {
+ constants.Add (new TaskItem ($"__ANDROID_{i}_1__"));
+ }
+ if (apiLevel.Minor != 0) {
+ constants.Add (new TaskItem ($"__ANDROID_{apiLevel.Major}_1__"));
+ }
AndroidDefineConstants = constants.ToArray ();
diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/ResolveAndroidTooling.cs b/src/Xamarin.Android.Build.Tasks/Tasks/ResolveAndroidTooling.cs
index 5ea189b93..a805675e2 100644
--- a/src/Xamarin.Android.Build.Tasks/Tasks/ResolveAndroidTooling.cs
+++ b/src/Xamarin.Android.Build.Tasks/Tasks/ResolveAndroidTooling.cs
@@ -81,7 +81,7 @@ namespace Xamarin.Android.Tasks
{
// This should be 31.0, 32.0, etc.
if (Version.TryParse (TargetPlatformVersion, out Version v)) {
- AndroidApiLevel = v.Major.ToString ();
+ AndroidApiLevel = v.ToString ();
} else {
AndroidApiLevel = GetMaxStableApiLevel ().ToString ();
}
diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs b/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs
index 6634fa4ac..13102b069 100644
--- a/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs
+++ b/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs
@@ -595,6 +595,20 @@ namespace Xamarin.Android.Tasks
return apiLevel;
}
+ public static bool TryParseApiLevel (string apiLevel, out Version version)
+ {
+ if (Version.TryParse (apiLevel, out var v)) {
+ version = v;
+ return true;
+ }
+ if (int.TryParse (apiLevel, out var major)) {
+ version = new Version (major, 0);
+ return true;
+ }
+ version = null;
+ return false;
+ }
+
#if MSBUILD
public static string GetAssemblyAbi (ITaskItem asmItem)
{
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment