From de9189ffa62b6d65b16f29bb07a46c17c810270d Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Wed, 14 Jan 2026 11:14:52 -0800 Subject: [PATCH] Migrate StripEmbeddedLibraries from ILLink step to AssemblyModifierPipeline --- .../StripEmbeddedLibrariesStep.cs} | 30 ++++++++++--------- .../Microsoft.Android.Sdk.ILLink.targets | 1 - .../Tasks/AssemblyModifierPipeline.cs | 4 +++ .../Xamarin.Android.Build.Tasks.csproj | 1 + 4 files changed, 21 insertions(+), 15 deletions(-) rename src/{Microsoft.Android.Sdk.ILLink/StripEmbeddedLibraries.cs => Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/StripEmbeddedLibrariesStep.cs} (60%) diff --git a/src/Microsoft.Android.Sdk.ILLink/StripEmbeddedLibraries.cs b/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/StripEmbeddedLibrariesStep.cs similarity index 60% rename from src/Microsoft.Android.Sdk.ILLink/StripEmbeddedLibraries.cs rename to src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/StripEmbeddedLibrariesStep.cs index 041bead3f92..16d867d4a41 100644 --- a/src/Microsoft.Android.Sdk.ILLink/StripEmbeddedLibraries.cs +++ b/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/StripEmbeddedLibrariesStep.cs @@ -1,36 +1,38 @@ -using Mono.Cecil; -using Mono.Linker; -using Mono.Linker.Steps; using System; using System.Linq; +using Microsoft.Android.Build.Tasks; +using Microsoft.Build.Utilities; +using Mono.Cecil; using Xamarin.Android.Tasks; namespace MonoDroid.Tuner { - public class StripEmbeddedLibraries : BaseStep + public class StripEmbeddedLibrariesStep : IAssemblyModifierPipelineStep { - protected override void ProcessAssembly (AssemblyDefinition assembly) + public TaskLoggingHelper Log { get; } + + public StripEmbeddedLibrariesStep (TaskLoggingHelper log) { - if (!Annotations.HasAction (assembly)) - return; - var action = Annotations.GetAction (assembly); - if (action == AssemblyAction.Skip || action == AssemblyAction.Delete) - return; + Log = log; + } - if (MonoAndroidHelper.IsFrameworkAssembly (assembly)) + public void ProcessAssembly (AssemblyDefinition assembly, StepContext context) + { + if (context.IsFrameworkAssembly) return; + bool assembly_modified = false; foreach (var mod in assembly.Modules) { foreach (var r in mod.Resources.ToArray ()) { if (ShouldStripResource (r)) { - Context.LogMessage ($" Stripped {r.Name} from {assembly.Name.Name}.dll"); + Log.LogDebugMessage ($" Stripped {r.Name} from {assembly.Name.Name}.dll"); mod.Resources.Remove (r); assembly_modified = true; } } } - if (assembly_modified && action == AssemblyAction.Copy) { - Annotations.SetAction (assembly, AssemblyAction.Save); + if (assembly_modified) { + context.IsAssemblyModified = true; } } diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.ILLink.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.ILLink.targets index c0c7ff7de09..1d46da787a6 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.ILLink.targets +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.ILLink.targets @@ -71,7 +71,6 @@ This file contains the .NET 5-specific targets to customize ILLink Type="MonoDroid.Tuner.AddKeepAlivesStep" /> - <_TrimmerCustomSteps Include="$(_AndroidLinkerCustomStepAssembly)" AfterStep="CleanStep" Type="MonoDroid.Tuner.StripEmbeddedLibraries" /> <_TrimmerCustomSteps Condition=" '$(AndroidLinkResources)' == 'true' " Include="$(_AndroidLinkerCustomStepAssembly)" diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/AssemblyModifierPipeline.cs b/src/Xamarin.Android.Build.Tasks/Tasks/AssemblyModifierPipeline.cs index 08a558de918..df35f011c30 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/AssemblyModifierPipeline.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/AssemblyModifierPipeline.cs @@ -140,6 +140,10 @@ protected virtual void BuildPipeline (AssemblyPipeline pipeline, MSBuildLinkCont findJavaObjectsStep.Initialize (context); pipeline.Steps.Add (findJavaObjectsStep); + // StripEmbeddedLibrariesStep + var stripEmbeddedLibrariesStep = new StripEmbeddedLibrariesStep (Log); + pipeline.Steps.Add (stripEmbeddedLibrariesStep); + // SaveChangedAssemblyStep var writerParameters = new WriterParameters { DeterministicMvid = Deterministic, diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.csproj b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.csproj index 79f6e450ae3..b0262d3197b 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.csproj +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.csproj @@ -55,6 +55,7 @@ +