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" />
+
+