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