diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/ProcessAssemblies.cs b/src/Xamarin.Android.Build.Tasks/Tasks/ProcessAssemblies.cs index 59b1fcb5ea3..a5b7cfcf36d 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/ProcessAssemblies.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/ProcessAssemblies.cs @@ -65,16 +65,20 @@ public override bool RunTask () // Set ShrunkAssemblies for _RemoveRegisterAttribute and // This should match the Condition on the _RemoveRegisterAttribute target - if (PublishTrimmed && !AndroidIncludeDebugSymbols) { - var shrunkAssemblies = new List (OutputAssemblies.Length); - foreach (var assembly in OutputAssemblies) { - var dir = Path.GetDirectoryName (assembly.ItemSpec); - var file = Path.GetFileName (assembly.ItemSpec); - shrunkAssemblies.Add (new TaskItem (assembly) { - ItemSpec = Path.Combine (dir, "shrunk", file), - }); + if (PublishTrimmed) { + if (!AndroidIncludeDebugSymbols) { + var shrunkAssemblies = new List (OutputAssemblies.Length); + foreach (var assembly in OutputAssemblies) { + var dir = Path.GetDirectoryName (assembly.ItemSpec); + var file = Path.GetFileName (assembly.ItemSpec); + shrunkAssemblies.Add (new TaskItem (assembly) { + ItemSpec = Path.Combine (dir, "shrunk", file), + }); + } + ShrunkAssemblies = shrunkAssemblies.ToArray (); + } else { + ShrunkAssemblies = OutputAssemblies; } - ShrunkAssemblies = shrunkAssemblies.ToArray (); } if (InputJavaLibraries != null) { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs index 170261f1a59..f9394a98ca1 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs @@ -56,6 +56,31 @@ public void CheckR8InfoMessagesToNotBreakTheBuild () } } + [Test] + public void CheckDebugModeWithTrimming () + { + bool usesAssemblyStores = false; + var proj = new XamarinAndroidApplicationProject { + ProjectName = "MyApp", + IsRelease = false, + EmbedAssembliesIntoApk = true, + }; + proj.SetProperty ("PublishTrimmed", "true"); + proj.SetProperty ("AndroidUseAssemblyStore", usesAssemblyStores.ToString ()); + + using var b = CreateApkBuilder (); + Assert.IsTrue (b.Build (proj), "build should have succeeded."); + + var apk = Path.Combine (Root, b.ProjectDirectory, + proj.OutputPath, $"{proj.PackageName}-Signed.apk"); + var helper = new ArchiveAssemblyHelper (apk, usesAssemblyStores); + helper.Contains (["Mono.Android.dll", $"{proj.ProjectName}.dll"], out _, out var missingFiles, out _, [AndroidTargetArch.Arm64, AndroidTargetArch.X86_64]); + + Assert.IsTrue (missingFiles == null || missingFiles.Count == 0, + string.Format ("The following Expected files are missing. {0}", + string.Join (Environment.NewLine, missingFiles))); + } + [Test] [NonParallelizable] // Commonly fails NuGet restore public void CheckIncludedAssemblies ([Values (false, true)] bool usesAssemblyStores)