Skip to content

Commit 5e65810

Browse files
Simplify: run _LinkAssembliesNoShrink only in the inner build
Remove _LinkAssembliesNoShrink from the outer build entirely: - Remove from _LinkAssemblies DependsOnTargets (outer build no longer invokes it) - Add Condition to only run when _ComputeFilesToPublishForRuntimeIdentifiers=true - Remove _LinkAssembliesNoShrinkInputs target (no longer needed) - Inline _AllResolvedAssemblies population into _AfterILLinkAdditionalSteps - Simplify _PrepareAssemblies: non-trimmed builds now use @(ResolvedAssemblies) directly (like trimmed builds) instead of mapping through MonoAndroidIntermediateAssemblyDir — the inner build already modified assemblies in-place before crossgen2 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 5e65839 commit 5e65810

File tree

2 files changed

+27
-55
lines changed

2 files changed

+27
-55
lines changed

src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.AssemblyResolution.targets

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -207,20 +207,18 @@ _ResolveAssemblies MSBuild target.
207207

208208
<Target Name="_PrepareAssemblies"
209209
DependsOnTargets="$(_PrepareAssembliesDependsOnTargets)">
210+
<ItemGroup>
211+
<_ResolvedAssemblies Include="@(ResolvedAssemblies)" />
212+
<_ResolvedUserAssemblies Include="@(ResolvedUserAssemblies)" />
213+
<_ResolvedFrameworkAssemblies Include="@(ResolvedFrameworkAssemblies)" />
214+
<_ResolvedSymbols Include="@(ResolvedSymbols)" />
215+
</ItemGroup>
210216
<ItemGroup Condition=" '$(PublishTrimmed)' != 'true' ">
211-
<_ResolvedAssemblies Include="@(ResolvedAssemblies->'$(MonoAndroidIntermediateAssemblyDir)%(DestinationSubPath)')" Condition=" '%(DestinationSubPath)' != '' " />
212-
<_ResolvedUserAssemblies Include="@(ResolvedUserAssemblies->'$(MonoAndroidIntermediateAssemblyDir)%(DestinationSubPath)')" Condition=" '%(DestinationSubPath)' != '' " />
213-
<_ResolvedFrameworkAssemblies Include="@(ResolvedFrameworkAssemblies->'$(MonoAndroidIntermediateAssemblyDir)%(DestinationSubPath)')" Condition=" '%(DestinationSubPath)' != '' " />
214-
<_ResolvedSymbols Include="@(ResolvedSymbols->'$(MonoAndroidIntermediateAssemblyDir)%(DestinationSubPath)')" Condition=" '%(DestinationSubPath)' != '' " />
215217
<_ShrunkAssemblies Include="@(_ResolvedAssemblies)" />
216218
<_ShrunkUserAssemblies Include="@(_ResolvedUserAssemblies)" />
217219
<_ShrunkFrameworkAssemblies Include="@(_ResolvedFrameworkAssemblies)" />
218220
</ItemGroup>
219221
<ItemGroup Condition=" '$(PublishTrimmed)' == 'true' ">
220-
<_ResolvedAssemblies Include="@(ResolvedAssemblies)" />
221-
<_ResolvedUserAssemblies Include="@(ResolvedUserAssemblies)" />
222-
<_ResolvedFrameworkAssemblies Include="@(ResolvedFrameworkAssemblies)" />
223-
<_ResolvedSymbols Include="@(ResolvedSymbols)" />
224222
<_ShrunkFrameworkAssemblies
225223
Include="@(_ShrunkAssemblies)"
226224
Condition=" '%(_ShrunkAssemblies.FrameworkAssembly)' == 'true' "

src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets

Lines changed: 21 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1419,47 +1419,23 @@ because xbuild doesn't support framework reference assemblies.
14191419
<Error Text="%24(AndroidGenerateJniMarshalMethods)=True is not supported at this time." />
14201420
</Target>
14211421

1422-
<Target Name="_LinkAssembliesNoShrinkInputs">
1422+
<!--
1423+
Inner build only: runs assembly modifications (FixAbstractMethods, AddKeepAlives, etc.)
1424+
BEFORE crossgen2 creates R2R images. ResolvedAssemblies is empty in the inner build
1425+
because the Android-specific _ResolveAssemblies target only runs in the outer build,
1426+
so we gather assemblies from ResolvedFileToPublish instead.
1427+
1428+
Mark every DLL as HasMonoAndroidReference so FixAbstractMethodsStep inspects them;
1429+
the step's own MightNeedFix() guard (IsSubclassOf("Java.Lang.Object")) filters out
1430+
non-binding types.
1431+
-->
1432+
<Target Name="_LinkAssembliesNoShrink"
1433+
BeforeTargets="CreateReadyToRunImages"
1434+
Condition=" '$(PublishTrimmed)' != 'true' and '$(_ComputeFilesToPublishForRuntimeIdentifiers)' == 'true' ">
14231435
<ItemGroup>
1424-
<!-- We need this in its own item group so it isn't lost during a partial build -->
1425-
<_AllResolvedAssemblies Include="@(ResolvedAssemblies)" />
1426-
</ItemGroup>
1427-
1428-
<!--
1429-
Inner build (Publish pipeline): ResolvedAssemblies is empty because the Android-specific
1430-
_ResolveAssemblies target only runs in the outer build. Use ResolvedFileToPublish instead
1431-
so LinkAssembliesNoShrink can fix abstract methods etc. BEFORE crossgen2 creates R2R images.
1432-
Mark every DLL as HasMonoAndroidReference so FixAbstractMethodsStep inspects them; the step's
1433-
own MightNeedFix() guard (IsSubclassOf("Java.Lang.Object")) filters out non-binding types.
1434-
-->
1435-
<ItemGroup Condition=" '$(_ComputeFilesToPublishForRuntimeIdentifiers)' == 'true' ">
14361436
<_ResolvedFileToPublishDlls Include="@(ResolvedFileToPublish)" Condition=" '%(Extension)' == '.dll' ">
14371437
<HasMonoAndroidReference>True</HasMonoAndroidReference>
14381438
</_ResolvedFileToPublishDlls>
1439-
<_AllResolvedAssemblies Include="@(_ResolvedFileToPublishDlls)" />
1440-
</ItemGroup>
1441-
</Target>
1442-
1443-
<Target Name="_LinkAssembliesNoShrink"
1444-
DependsOnTargets="_LinkAssembliesNoShrinkInputs"
1445-
BeforeTargets="CreateReadyToRunImages"
1446-
Condition="'$(PublishTrimmed)' != 'true'"
1447-
Inputs="@(ResolvedAssemblies);@(_ResolvedFileToPublishDlls);$(_AndroidBuildPropertiesCache)"
1448-
Outputs="@(ResolvedAssemblies->'$(MonoAndroidIntermediateAssemblyDir)%(DestinationSubPath)')">
1449-
1450-
<!--
1451-
Inner build: SourceFiles = DestinationFiles = @(_ResolvedFileToPublishDlls) for in-place modification.
1452-
Outer build: SourceFiles = @(ResolvedAssemblies), DestinationFiles = intermediate dir copy.
1453-
-->
1454-
<ItemGroup Condition=" '$(_ComputeFilesToPublishForRuntimeIdentifiers)' == 'true' ">
1455-
<_LinkNoShrinkSource Include="@(_ResolvedFileToPublishDlls)" />
1456-
<_LinkNoShrinkDestination Include="@(_ResolvedFileToPublishDlls)" />
1457-
<_LinkNoShrinkUserAssemblies Include="@(_ResolvedFileToPublishDlls)" />
1458-
</ItemGroup>
1459-
<ItemGroup Condition=" '$(_ComputeFilesToPublishForRuntimeIdentifiers)' != 'true' ">
1460-
<_LinkNoShrinkSource Include="@(ResolvedAssemblies)" />
1461-
<_LinkNoShrinkDestination Include="@(ResolvedAssemblies->'$(MonoAndroidIntermediateAssemblyDir)%(DestinationSubPath)')" />
1462-
<_LinkNoShrinkUserAssemblies Include="@(ResolvedUserAssemblies)" />
14631439
</ItemGroup>
14641440

14651441
<LinkAssembliesNoShrink
@@ -1469,28 +1445,26 @@ because xbuild doesn't support framework reference assemblies.
14691445
EnableMarshalMethods="$(_AndroidUseMarshalMethods)"
14701446
ErrorOnCustomJavaObject="$(AndroidErrorOnCustomJavaObject)"
14711447
PackageNamingPolicy="$(AndroidPackageNamingPolicy)"
1472-
ResolvedAssemblies="@(_AllResolvedAssemblies)"
1473-
ResolvedUserAssemblies="@(_LinkNoShrinkUserAssemblies)"
1474-
SourceFiles="@(_LinkNoShrinkSource)"
1475-
DestinationFiles="@(_LinkNoShrinkDestination)"
1448+
ResolvedAssemblies="@(_ResolvedFileToPublishDlls)"
1449+
ResolvedUserAssemblies="@(_ResolvedFileToPublishDlls)"
1450+
SourceFiles="@(_ResolvedFileToPublishDlls)"
1451+
DestinationFiles="@(_ResolvedFileToPublishDlls)"
14761452
TargetName="$(TargetName)"
14771453
AddKeepAlives="$(AndroidAddKeepAlives)"
14781454
UseDesignerAssembly="$(AndroidUseDesignerAssembly)"
14791455
Deterministic="$(Deterministic)"
14801456
ReadSymbols="$(_AndroidLinkAssembliesReadSymbols)">
14811457
</LinkAssembliesNoShrink>
1482-
1483-
<ItemGroup Condition=" '$(_ComputeFilesToPublishForRuntimeIdentifiers)' != 'true' ">
1484-
<FileWrites Include="$(MonoAndroidIntermediateAssemblyDir)**" />
1485-
</ItemGroup>
14861458
</Target>
14871459

14881460
<!-- Runs additional steps after ILLink runs (_LinkAssemblies) -->
14891461
<Target Name="_AfterILLinkAdditionalSteps"
1490-
DependsOnTargets="_LinkAssembliesNoShrinkInputs"
14911462
Condition="'$(PublishTrimmed)' == 'true'"
14921463
Inputs="$(_AndroidLinkFlag)"
14931464
Outputs="$(_AdditionalPostLinkerStepsFlag)">
1465+
<ItemGroup>
1466+
<_AllResolvedAssemblies Include="@(ResolvedAssemblies)" />
1467+
</ItemGroup>
14941468
<AssemblyModifierPipeline
14951469
ApplicationJavaClass="$(AndroidApplicationJavaClass)"
14961470
CodeGenerationTarget="$(_AndroidJcwCodegenTarget)"
@@ -2912,7 +2886,7 @@ because xbuild doesn't support framework reference assemblies.
29122886
</Target>
29132887

29142888
<Target Name="_LinkAssemblies"
2915-
DependsOnTargets="_ResolveAssemblies;_CreatePackageWorkspace;$(_BeforeLinkAssemblies);_GenerateJniMarshalMethods;_LinkAssembliesNoShrink"
2889+
DependsOnTargets="_ResolveAssemblies;_CreatePackageWorkspace;$(_BeforeLinkAssemblies);_GenerateJniMarshalMethods"
29162890
/>
29172891

29182892
<!-- TypeMap imports must be last so their target overrides (e.g. _RemoveRegisterAttribute) take precedence -->

0 commit comments

Comments
 (0)