diff --git a/build-tools/automation/yaml-templates/setup-test-environment.yaml b/build-tools/automation/yaml-templates/setup-test-environment.yaml
index d4fb2de63a0..594fc6e18a6 100644
--- a/build-tools/automation/yaml-templates/setup-test-environment.yaml
+++ b/build-tools/automation/yaml-templates/setup-test-environment.yaml
@@ -53,7 +53,7 @@ steps:
- template: run-xaprepare.yaml
parameters:
- arguments: --s=AndroidTestDependencies
+ arguments: --s=AndroidTestDependencies --android-sdk-platforms="19,21,26,32"
xaSourcePath: ${{ parameters.xaSourcePath }}
- task: DotNetCoreCLI@2
diff --git a/build-tools/xaprepare/xaprepare/Application/AndroidToolchainComponent.cs b/build-tools/xaprepare/xaprepare/Application/AndroidToolchainComponent.cs
index 93f956b0249..dbe751e6c8d 100644
--- a/build-tools/xaprepare/xaprepare/Application/AndroidToolchainComponent.cs
+++ b/build-tools/xaprepare/xaprepare/Application/AndroidToolchainComponent.cs
@@ -44,9 +44,13 @@ public void AddToInventory ()
class AndroidPlatformComponent : AndroidToolchainComponent
{
+ public string ApiLevel { get; }
+
public AndroidPlatformComponent (string name, string apiLevel, string pkgRevision)
: base (name, Path.Combine ("platforms", $"android-{apiLevel}"), pkgRevision: pkgRevision, buildToolName: $"android-sdk-{name}", buildToolVersion:$"{apiLevel}.{pkgRevision}")
- {}
+ {
+ ApiLevel = apiLevel;
+ }
}
[Flags]
diff --git a/build-tools/xaprepare/xaprepare/Application/Context.cs b/build-tools/xaprepare/xaprepare/Application/Context.cs
index 213c1d027aa..6eb15603b56 100644
--- a/build-tools/xaprepare/xaprepare/Application/Context.cs
+++ b/build-tools/xaprepare/xaprepare/Application/Context.cs
@@ -333,6 +333,11 @@ public string DebugFileExtension {
///
public RefreshableComponent ComponentsToRefresh { get; set; }
+ ///
+ /// Collection of Android SDK platform levels to be installed.
+ ///
+ public IEnumerable AndroidSdkPlatforms { get; set; } = Enumerable.Empty ();
+
///
/// Set by the --mono-archive-url flag
///
diff --git a/build-tools/xaprepare/xaprepare/Main.cs b/build-tools/xaprepare/xaprepare/Main.cs
index 4a745e9b308..d7065f4c945 100644
--- a/build-tools/xaprepare/xaprepare/Main.cs
+++ b/build-tools/xaprepare/xaprepare/Main.cs
@@ -34,6 +34,7 @@ sealed class ParsedOptions
public string? MonoArchiveCustomUrl { get; set; }
public bool EnableAll { get; set; }
public RefreshableComponent RefreshList { get; set; }
+ public IEnumerable AndroidSdkPlatforms { get; set; } = Enumerable.Empty ();
}
public static int Main (string[] args)
@@ -112,6 +113,7 @@ static async Task Run (string[] args)
{"ignore-max-mono-version=", $"Ignore the maximum supported Mono version restriction", v => parsedOptions.IgnoreMaxMonoVersion = ParseBoolean (v)},
{"ignore-min-mono-version=", $"Ignore the minimum supported Mono version restriction", v => parsedOptions.IgnoreMinMonoVersion = ParseBoolean (v)},
{"mono-archive-url=", "Use a specific URL for the mono archive.", v => parsedOptions.MonoArchiveCustomUrl = v?.Trim () },
+ {"android-sdk-platforms=", "Comma separated list of Android SDK platform levels to be installed. Defaults to all if no value is provided.", v => parsedOptions.AndroidSdkPlatforms = ParseAndroidSdkPlatformLevels (v?.Trim () ?? String.Empty) },
"",
{"h|help", "Show this help message", v => parsedOptions.ShowHelp = true },
};
@@ -148,6 +150,7 @@ static async Task Run (string[] args)
Context.Instance.MonoArchiveCustomUrl = parsedOptions.MonoArchiveCustomUrl ?? String.Empty;
Context.Instance.EnableAllTargets = parsedOptions.EnableAll;
Context.Instance.ComponentsToRefresh = parsedOptions.RefreshList;
+ Context.Instance.AndroidSdkPlatforms = parsedOptions.AndroidSdkPlatforms;
if (!String.IsNullOrEmpty (parsedOptions.Configuration))
Context.Instance.Configuration = parsedOptions.Configuration!;
@@ -340,5 +343,9 @@ RefreshableComponent ParseSingleComponent (string component) {
}
}
+ static IEnumerable ParseAndroidSdkPlatformLevels (string list)
+ {
+ return list.Split (',').Select (item => item.Trim ());
+ }
}
}
diff --git a/build-tools/xaprepare/xaprepare/Steps/Step_Android_SDK_NDK.cs b/build-tools/xaprepare/xaprepare/Steps/Step_Android_SDK_NDK.cs
index 9e2180f7d3c..e7318930be9 100644
--- a/build-tools/xaprepare/xaprepare/Steps/Step_Android_SDK_NDK.cs
+++ b/build-tools/xaprepare/xaprepare/Steps/Step_Android_SDK_NDK.cs
@@ -253,6 +253,14 @@ void Check (Context context, string packageCacheDir, string sdkRoot, AndroidTool
return;
}
+ // If only specific Android SDK platforms were requested, ignore ones that were not requested
+ if (component is AndroidPlatformComponent apc && context.AndroidSdkPlatforms.Any ()) {
+ if (!context.AndroidSdkPlatforms.Contains (apc.ApiLevel)) {
+ LogStatus ($"skipping, not requested", padLeft, Log.InfoColor);
+ return;
+ }
+ }
+
if (missing)
LogStatus (statusMissing, padLeft, ConsoleColor.Magenta);
else