diff --git a/Documentation/guides/building-apps/build-properties.md b/Documentation/guides/building-apps/build-properties.md index 513a3b2f68d..ee48b5653fe 100644 --- a/Documentation/guides/building-apps/build-properties.md +++ b/Documentation/guides/building-apps/build-properties.md @@ -1110,6 +1110,14 @@ or use `-p:AndroidCreateProguardMappingFile=False` on the command line. This property was added in Xamarin.Android 11.2. +## AndroidD8IgnoreWarnings + +Specifies `--map-diagnostics warning info` to be passed to `d8`. The +default value is `True`, but can be set to `False` to enforce more +strict behavior. See the [D8 and R8 source code][r8-source] for details. + +Added in .NET 8. + ## AndroidR8IgnoreWarnings Specifies @@ -1118,8 +1126,13 @@ to continue with dex compilation even if certain warnings are encountered. The default value is `True`, but can be set to `False` to enforce more strict behavior. See the [ProGuard manual](https://www.guardsquare.com/manual/configuration/usage) for details. +Starting in .NET 8, specifies `--map-diagnostics warning info`. See +the [D8 and R8 source code][r8-source] for details. + Added in Xamarin.Android 10.3. +[r8-source]: https://r8.googlesource.com/r8/+/refs/tags/3.3.75/src/main/java/com/android/tools/r8/BaseCompilerCommandParser.java#246 + ## AndroidR8JarPath The path to `r8.jar` for use with the diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/D8.cs b/src/Xamarin.Android.Build.Tasks/Tasks/D8.cs index 5c3123c9a40..4a77f4fd3b5 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/D8.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/D8.cs @@ -2,7 +2,6 @@ using Microsoft.Build.Utilities; using System.Collections.Generic; using System.IO; -using System.Text.RegularExpressions; using Xamarin.Android.Tools; using Microsoft.Android.Build.Tasks; @@ -39,6 +38,7 @@ public class D8 : JavaToolTask public ITaskItem [] JavaLibrariesToEmbed { get; set; } public ITaskItem [] AlternativeJarLibrariesToEmbed { get; set; } public ITaskItem [] JavaLibrariesToReference { get; set; } + public ITaskItem [] MapDiagnostics { get; set; } public string ExtraArguments { get; set; } @@ -110,22 +110,19 @@ protected virtual CommandLineBuilder GetCommandLineBuilder () foreach (var jar in injars) cmd.AppendFileNameIfNotNull (jar); - return cmd; - } - - /// - /// r8 tends to print: - /// Warning: Resource 'META-INF/MANIFEST.MF' already exists. - /// - static readonly Regex resourceWarning = new Regex ("Warning: Resource.+already exists", RegexOptions.IgnoreCase | RegexOptions.Compiled); - - protected override void LogEventsFromTextOutput (string singleLine, MessageImportance messageImportance) - { - if (resourceWarning.IsMatch (singleLine)) { - Log.LogMessage (messageImportance, singleLine); - } else { - base.LogEventsFromTextOutput (singleLine, messageImportance); + if (MapDiagnostics != null) { + foreach (var diagnostic in MapDiagnostics) { + var from = diagnostic.ItemSpec; + var to = diagnostic.GetMetadata ("To"); + if (string.IsNullOrEmpty (from) || string.IsNullOrEmpty (to)) + continue; + cmd.AppendSwitch ("--map-diagnostics"); + cmd.AppendSwitch (from); + cmd.AppendSwitch (to); + } } + + return cmd; } } } diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets index 9b0386cc2b4..af4d1456749 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets @@ -261,6 +261,7 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved. True True False + True True True diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.D8.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.D8.targets index 5c56d4a8448..71567524167 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.D8.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.D8.targets @@ -48,6 +48,11 @@ Copyright (C) 2018 Xamarin. All rights reserved. Condition=" '$(AndroidLinkTool)' != '' " /> + + <_AndroidD8MapDiagnostics Condition=" '$(AndroidD8IgnoreWarnings)' == 'true' " Include="warning" To="info" /> + <_AndroidR8MapDiagnostics Condition=" '$(AndroidR8IgnoreWarnings)' == 'true' " Include="warning" To="info" /> + +