Skip to content

Commit 7aed4e3

Browse files
[illink] consolidate & remove hardcoded assembly names (#9662)
Our codebase has various notions of "framework assembly", many of which are outdated and wrong! * `@(_SharedRuntimeAssemblies)` in `Xamarin.Android.Build.Tasks.targets`, which generates- * `src\Xamarin.Android.Build.Tasks\obj\$(Configuration)\Profile.g.cs` * `src\Xamarin.Android.Build.Tasks\Utilities\Profile.cs` * `src\Microsoft.Android.Sdk.ILLink\Profile.cs` The new and *correct* way to identify a "framework assembly" is to check either: * `%(FrameworkReferenceName)` is `Microsoft.Android` or starts with `Microsoft.NETCore.` * `%(NuGetPackageId)` starts with `Microsoft.NETCore.App.Runtime.` or `Microsoft.Android.Runtime.` I moved the new logic into `MonoAndroidHelper.IsFrameworkAssembly()` and `MonoAndroidHelper.IsFromAKnownRuntimePack()` (useful for `.jar` and other files). I deleted all other instances of `Profile.cs`, which simplifies how trimmer steps are shared between the `<LinkAssembliesNoShrink/>` MSBuild task and the trimmer (illink). In these places, we were likely just checking against a stale list of assemblies *anyway*, so I simply removed all these checks.
1 parent 3127c47 commit 7aed4e3

27 files changed

+69
-494
lines changed

src/Microsoft.Android.Sdk.ILLink/ApplyPreserveAttribute.cs

+3-4
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@
22
using System.Collections;
33
using System.Collections.Generic;
44
using System.Linq;
5-
5+
using Mono.Cecil;
66
using Mono.Linker;
77
using Mono.Linker.Steps;
8-
9-
using Mono.Cecil;
8+
using Xamarin.Android.Tasks;
109

1110
namespace Microsoft.Android.Sdk.ILLink
1211
{
@@ -25,7 +24,7 @@ public override SubStepTargets Targets {
2524

2625
public override bool IsActiveFor (AssemblyDefinition assembly)
2726
{
28-
return !Profile.IsSdkAssembly (assembly) && Annotations.GetAction (assembly) == AssemblyAction.Link;
27+
return !MonoAndroidHelper.IsFrameworkAssembly (assembly) && Annotations.GetAction (assembly) == AssemblyAction.Link;
2928
}
3029

3130
public override void ProcessType (TypeDefinition type)

src/Microsoft.Android.Sdk.ILLink/MarkJavaObjects.cs

+2-5
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
using Mono.Linker.Steps;
77
using Java.Interop.Tools.Cecil;
88
using Xamarin.Android.Tasks;
9-
using Profile = Microsoft.Android.Sdk.ILLink.Profile;
109

1110
namespace MonoDroid.Tuner {
1211

@@ -27,9 +26,7 @@ public override void Initialize (LinkContext context, MarkContext markContext)
2726

2827
bool IsActiveFor (AssemblyDefinition assembly)
2928
{
30-
if (Profile.IsSdkAssembly (assembly))
31-
return false;
32-
if (Profile.IsProductAssembly (assembly))
29+
if (MonoAndroidHelper.IsFrameworkAssembly (assembly))
3330
return false;
3431

3532
return assembly.MainModule.HasTypeReference ("System.Net.Http.HttpMessageHandler") ||
@@ -397,7 +394,7 @@ static bool IsImplementor (TypeDefinition type, IMetadataResolver cache)
397394

398395
static bool IsUserType (TypeDefinition type)
399396
{
400-
return !MonoAndroidHelper.IsFrameworkAssembly (type.Module.Assembly.Name.Name + ".dll");
397+
return !MonoAndroidHelper.IsFrameworkAssembly (type.Module.Assembly);
401398
}
402399

403400
void PreserveImplementor (TypeDefinition type)

src/Microsoft.Android.Sdk.ILLink/Microsoft.Android.Sdk.ILLink.csproj

-4
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111
<PackageReference Include="Microsoft.NET.ILLink" Version="$(MicrosoftNETILLinkTasksPackageVersion)" />
1212
<ProjectReference Include="..\Xamarin.Android.Build.Tasks\Xamarin.Android.Build.Tasks.csproj" ReferenceOutputAssembly="False" />
1313

14-
<Compile Include="..\Xamarin.Android.Build.Tasks\obj\$(Configuration)\Profile.g.cs" Link="Profile.g.cs" />
15-
1614
<!--Include shared linker sources-->
1715
<Compile Include="..\Xamarin.Android.Build.Tasks\Linker\MonoDroid.Tuner\AddKeepAlivesStep.cs" Link="MonoDroid.Tuner\AddKeepAlivesStep.cs" />
1816
<Compile Include="..\Xamarin.Android.Build.Tasks\Linker\MonoDroid.Tuner\AndroidLinkConfiguration.cs" Link="MonoDroid.Tuner\AndroidLinkConfiguration.cs" />
@@ -21,8 +19,6 @@
2119
<Compile Include="..\Xamarin.Android.Build.Tasks\Linker\MonoDroid.Tuner\FixLegacyResourceDesignerStep.cs" Link="MonoDroid.Tuner\FixLegacyResourceDesignerStep.cs" />
2220
<Compile Include="..\Xamarin.Android.Build.Tasks\Linker\MonoDroid.Tuner\LinkDesignerBase.cs" Link="MonoDroid.Tuner\LinkDesignerBase.cs" />
2321
<Compile Include="..\Xamarin.Android.Build.Tasks\Linker\MonoDroid.Tuner\RemoveResourceDesignerStep.cs" Link="MonoDroid.Tuner\RemoveResourceDesignerStep.cs" />
24-
<Compile Include="..\Xamarin.Android.Build.Tasks\Linker\MonoDroid.Tuner\MonoDroidProfile.cs" Link="MonoDroid.Tuner\MonoDroidProfile.cs" />
25-
<Compile Include="..\Xamarin.Android.Build.Tasks\Linker\Mobile.Tuner\MobileProfile.cs" Link="Mobile.Tuner\MobileProfile.cs" />
2622

2723
<!--Other .NET for Android / Java.Interop files-->
2824
<Compile Include="..\..\external\Java.Interop\src\Java.Interop.Tools.Cecil\Java.Interop.Tools.Cecil\CustomAttributeProviderRocks.cs" Link="Java.Interop\CustomAttributeProviderRocks.cs" />

src/Microsoft.Android.Sdk.ILLink/PreserveApplications.cs

+2-5
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
using System;
22
using System.Collections;
33
using System.Linq;
4-
4+
using Mono.Cecil;
55
using Mono.Linker;
66
using Mono.Linker.Steps;
7-
87
using Mono.Tuner;
9-
using Mobile.Tuner;
10-
11-
using Mono.Cecil;
8+
using Xamarin.Android.Tasks;
129

1310
namespace MonoDroid.Tuner {
1411

src/Microsoft.Android.Sdk.ILLink/PreserveExportedTypes.cs

+8-5
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@
22
using System.Collections;
33
using System.Collections.Generic;
44
using System.Linq;
5-
5+
using Microsoft.Android.Sdk.ILLink;
6+
using Mono.Cecil;
67
using Mono.Linker;
78
using Mono.Linker.Steps;
8-
9-
using Mono.Cecil;
10-
using Microsoft.Android.Sdk.ILLink;
9+
using Xamarin.Android.Tasks;
1110

1211
namespace Mono.Tuner {
1312

@@ -24,7 +23,11 @@ public override SubStepTargets Targets {
2423

2524
public override bool IsActiveFor (AssemblyDefinition assembly)
2625
{
27-
return !Profile.IsSdkAssembly (assembly);
26+
if (MonoAndroidHelper.IsFrameworkAssembly (assembly))
27+
return false;
28+
29+
return assembly.MainModule.HasTypeReference ("Java.Interop.ExportAttribute") ||
30+
assembly.MainModule.HasTypeReference ("Java.Interop.ExportFieldAttribute");
2831
}
2932

3033
public override void ProcessField (FieldDefinition field)

src/Microsoft.Android.Sdk.ILLink/PreserveJavaExceptions.cs

+2-5
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
using System;
22
using System.Collections;
33
using System.Linq;
4-
4+
using Mono.Cecil;
55
using Mono.Linker;
66
using Mono.Linker.Steps;
7-
87
using Mono.Tuner;
9-
using Mobile.Tuner;
10-
11-
using Mono.Cecil;
8+
using Xamarin.Android.Tasks;
129

1310
namespace MonoDroid.Tuner {
1411

src/Microsoft.Android.Sdk.ILLink/Profile.cs

-52
This file was deleted.

src/Microsoft.Android.Sdk.ILLink/SetupStep.cs

-20
This file was deleted.

src/Microsoft.Android.Sdk.ILLink/StripEmbeddedLibraries.cs

+2-6
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,13 @@ protected override void ProcessAssembly (AssemblyDefinition assembly)
1717
if (action == AssemblyAction.Skip || action == AssemblyAction.Delete)
1818
return;
1919

20-
var fileName = assembly.Name.Name + ".dll";
21-
if (MonoAndroidHelper.IsFrameworkAssembly (fileName) &&
22-
!MonoAndroidHelper.FrameworkEmbeddedJarLookupTargets.Contains (fileName) &&
23-
!MonoAndroidHelper.FrameworkEmbeddedNativeLibraryAssemblies.Contains (fileName))
20+
if (MonoAndroidHelper.IsFrameworkAssembly (assembly))
2421
return;
25-
2622
bool assembly_modified = false;
2723
foreach (var mod in assembly.Modules) {
2824
foreach (var r in mod.Resources.ToArray ()) {
2925
if (ShouldStripResource (r)) {
30-
Context.LogMessage ($" Stripped {r.Name} from {fileName}");
26+
Context.LogMessage ($" Stripped {r.Name} from {assembly.Name.Name}.dll");
3127
mod.Resources.Remove (r);
3228
assembly_modified = true;
3329
}

0 commit comments

Comments
 (0)