From 639869a93cd41ff96f5dcfb66b72951b14b2d2c8 Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Tue, 4 Oct 2022 11:10:55 +0100 Subject: [PATCH] [Xamarin.Android.Build.Tasks] Avoid XA5207 for design-time builds Fixes #7405 Raising a XA5207 Error during a design time build is causing some problems for the auto sdk installer. The design time build is run for all frameworks. So you end up in a position when you have the Windows framework selected in the IDE and the auto sdk installer will try to install an Android framework. Its very confusing for the user. So lets not raise this Error during a design time build. --- .../Tasks/GetJavaPlatformJar.cs | 7 ++++--- .../Tests/Xamarin.Android.Build.Tests/BuildTest.cs | 2 ++ .../Utilities/MonoAndroidHelper.cs | 10 ++++++---- .../Xamarin.Android.Tooling.targets | 4 +++- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/GetJavaPlatformJar.cs b/src/Xamarin.Android.Build.Tasks/Tasks/GetJavaPlatformJar.cs index 5586e0c2ec9..2757d54b138 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/GetJavaPlatformJar.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/GetJavaPlatformJar.cs @@ -23,6 +23,8 @@ public class GetJavaPlatformJar : AndroidTask public string AndroidManifest { get; set; } + public bool DesignTimeBuild { get; set; } + [Output] public string JavaPlatformJarPath { get; set; } @@ -84,12 +86,11 @@ public override bool RunTask () } platform = GetTargetSdkVersion (platform, target_sdk); - JavaPlatformJarPath = MonoAndroidHelper.TryGetAndroidJarPath (Log, platform); + JavaPlatformJarPath = MonoAndroidHelper.TryGetAndroidJarPath (Log, platform, designTimeBuild: DesignTimeBuild); + TargetSdkVersion = MonoAndroidHelper.SupportedVersions.GetApiLevelFromId (platform).ToString (); if (JavaPlatformJarPath == null) return !Log.HasLoggedErrors; - TargetSdkVersion = MonoAndroidHelper.SupportedVersions.GetApiLevelFromId (platform).ToString (); - return !Log.HasLoggedErrors; } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs index f2d51942134..3e777babfde 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs @@ -1365,6 +1365,8 @@ public void IfAndroidJarDoesNotExistThrowXA5207 () if (!Builder.UseDotNet) proj.TargetFrameworkVersion = builder.LatestTargetFrameworkVersion (); builder.ThrowOnBuildFailure = false; + Assert.IsTrue (builder.DesignTimeBuild (proj), "DesignTime build should succeed."); + Assert.IsFalse (builder.LastBuildOutput.ContainsText ("error XA5207:"), "XA5207 should not have been raised."); builder.Target = "AndroidPrepareForBuild"; Assert.IsFalse (builder.Build (proj, parameters: new string [] { $"AndroidSdkBuildToolsVersion=24.0.1", diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs b/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs index e28d3e5d6d6..73485dffb91 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs @@ -443,13 +443,15 @@ public static IEnumerable Executables (string executable) yield return executable; } - public static string TryGetAndroidJarPath (TaskLoggingHelper log, string platform) + public static string TryGetAndroidJarPath (TaskLoggingHelper log, string platform, bool designTimeBuild = false) { var platformPath = MonoAndroidHelper.AndroidSdk.TryGetPlatformDirectoryFromApiLevel (platform, MonoAndroidHelper.SupportedVersions); if (platformPath == null) { - var expectedPath = MonoAndroidHelper.AndroidSdk.GetPlatformDirectoryFromId (platform); - var sdkManagerMenuPath = OS.IsWindows ? Properties.Resources.XA5207_SDK_Manager_Windows : Properties.Resources.XA5207_SDK_Manager_macOS; - log.LogCodedError ("XA5207", Properties.Resources.XA5207, platform, Path.Combine (expectedPath, "android.jar"), sdkManagerMenuPath); + if (!designTimeBuild) { + var expectedPath = MonoAndroidHelper.AndroidSdk.GetPlatformDirectoryFromId (platform); + var sdkManagerMenuPath = OS.IsWindows ? Properties.Resources.XA5207_SDK_Manager_Windows : Properties.Resources.XA5207_SDK_Manager_macOS; + log.LogCodedError ("XA5207", Properties.Resources.XA5207, platform, Path.Combine (expectedPath, "android.jar"), sdkManagerMenuPath); + } return null; } return Path.Combine (platformPath, "android.jar"); diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Tooling.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Tooling.targets index 6b35cf16088..73af03e487f 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Tooling.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Tooling.targets @@ -99,7 +99,9 @@ projects. + AndroidManifest="$(_AndroidManifestAbs)" + DesignTimeBuild="$(DesignTimeBuild)" + >