Skip to content

Commit 3e18d5a

Browse files
[Xamarin.Android.Build.Tasks] remove the android\assets\shrunk directory
Context: dotnet#3753 Context: xamarin/monodroid#1053 There appears to be an issue with mono:2019-10 when the Xamarin.Forms integration project is built with AOT in `Release` mode. The issue somehow stems from two `Mono.Android.dll` existing: * `obj\Debug\android\assets\Mono.Android.dll` * `obj\Debug\android\assets\shrunk\Mono.Android.dll` Looking at how AOT is invoked, it seems like either `Mono.Android.dll` could be picked up by the parameters being passed in. We might be AOT'ing a user's `Foo.dll`, and both directories are in `$MONO_PATH` or passed via other arguments. How would we know which is picked up? The `shrunk` directory is used by the `<RemoveRegisterAttribute/>` MSBuild task that: * Runs after the linker & `<GenerateJavaStubs/>` * Removes all the `[RegisterAttribute]` from types, to further shrink `Mono.Android.dll`. It looks like we copy all `@(_ResolvedFrameworkAssemblies)` to the `shrunk` directory and fix up item groups. Why don't we just get rid of this `shrunk` directory and not copy anything? We can edit `Mono.Android.dll` in place, and incremental builds should be fine due to the use of stamp files. I also moved the flag file to: $(_AndroidStampDirectory)_RemoveRegisterAttribute.stamp To match our new MSBuild conventions. There is also usage of `@(_ShrunkFrameworkAssemblies)` that needs to be updated in monodroid.
1 parent 6dbf4d4 commit 3e18d5a

File tree

3 files changed

+11
-36
lines changed

3 files changed

+11
-36
lines changed

.external

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
xamarin/monodroid:master@1b907d680cc6561dcfaddc6f997d2f6ff5456644
1+
xamarin/monodroid:shrunkframeworkassemblies@326b7fc28ebfc0e630e3383ea5061a3337efe986
22
mono/mono:2019-08@8946e49a974ea8b75fe5b8b7e93ffd4571521a85

src/Xamarin.Android.Build.Tasks/Tasks/RemoveRegisterAttribute.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ public class RemoveRegisterAttribute : AndroidTask
1717
const string RegisterAttribute = "Android.Runtime.RegisterAttribute";
1818

1919
[Required]
20-
public ITaskItem[] ShrunkFrameworkAssemblies { get; set; }
20+
public ITaskItem[] FrameworkAssemblies { get; set; }
2121

2222
public bool Deterministic { get; set; }
2323

2424
public override bool RunTask ()
2525
{
2626
// Find Mono.Android.dll
27-
var mono_android = ShrunkFrameworkAssemblies.First (f => Path.GetFileNameWithoutExtension (f.ItemSpec) == "Mono.Android").ItemSpec;
27+
var mono_android = FrameworkAssemblies.First (f => Path.GetFileNameWithoutExtension (f.ItemSpec) == "Mono.Android").ItemSpec;
2828
var writerParameters = new WriterParameters {
2929
DeterministicMvid = Deterministic,
3030
};

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

Lines changed: 8 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1158,7 +1158,6 @@ because xbuild doesn't support framework reference assemblies.
11581158
<_AndroidLinkFlag>$(IntermediateOutputPath)link.flag</_AndroidLinkFlag>
11591159
<_AndroidApkPerAbiFlagFile>$(IntermediateOutputPath)android\bin\apk_per_abi.flag</_AndroidApkPerAbiFlagFile>
11601160
<_AndroidDebugKeyStoreFlag>$(IntermediateOutputPath)android_debug_keystore.flag</_AndroidDebugKeyStoreFlag>
1161-
<_RemoveRegisterFlag>$(MonoAndroidIntermediateAssemblyDir)shrunk\shrunk.flag</_RemoveRegisterFlag>
11621161
<_AcwMapFile>$(IntermediateOutputPath)acw-map.txt</_AcwMapFile>
11631162
<_CustomViewMapFile>$(IntermediateOutputPath)customview-map.txt</_CustomViewMapFile>
11641163
<_AndroidTypeMappingJavaToManaged>$(IntermediateOutputPath)android\typemap.jm</_AndroidTypeMappingJavaToManaged>
@@ -2041,18 +2040,6 @@ because xbuild doesn't support framework reference assemblies.
20412040
<Output TaskParameter="Include" ItemName="_ResolvedFrameworkAssemblies" />
20422041
</CreateItem>
20432042

2044-
<CreateItem
2045-
Include="@(_ResolvedFrameworkAssemblies)"
2046-
Condition="'$(AndroidLinkMode)' == 'None' OR '$(AndroidUseSharedRuntime)' == 'true'">
2047-
<Output TaskParameter="Include" ItemName="_ShrunkFrameworkAssemblies" />
2048-
</CreateItem>
2049-
2050-
<CreateItem
2051-
Include="@(_ResolvedFrameworkAssemblies->'$(MonoAndroidIntermediateAssemblyDir)shrunk\%(Filename)%(Extension)')"
2052-
Condition="'$(AndroidLinkMode)' != 'None' AND '$(AndroidUseSharedRuntime)' != 'true'">
2053-
<Output TaskParameter="Include" ItemName="_ShrunkFrameworkAssemblies" />
2054-
</CreateItem>
2055-
20562043
<CreateItem
20572044
Include="@(_ResolvedUserAssemblies)"
20582045
Condition="'%(_ResolvedUserAssemblies.TargetFrameworkIdentifier)' == 'MonoAndroid' Or '%(_ResolvedUserAssemblies.HasMonoAndroidReference)' == 'True'">
@@ -2516,27 +2503,16 @@ because xbuild doesn't support framework reference assemblies.
25162503
<Target Name="_RemoveRegisterAttribute"
25172504
DependsOnTargets="_PrepareAssemblies"
25182505
Inputs="$(_AndroidLinkFlag)"
2519-
Outputs="$(_RemoveRegisterFlag)"
2506+
Outputs="$(_AndroidStampDirectory)_RemoveRegisterAttribute.stamp"
25202507
Condition="'$(AndroidLinkMode)' != 'None' AND '$(AndroidUseSharedRuntime)' != 'true'">
2521-
2522-
<!-- Make a copy of every assembly into assets\shrunk -->
2523-
<Copy
2524-
SourceFiles="@(_ResolvedFrameworkAssemblies)"
2525-
DestinationFiles="@(_ShrunkFrameworkAssemblies)"
2526-
SkipUnchangedFiles="true" />
2527-
2528-
<CopyIfChanged
2529-
SourceFiles="@(_ResolvedFrameworkAssemblies->'%(Identity).config')"
2530-
DestinationFiles="@(_ShrunkFrameworkAssemblies->'%(Identity).config')" />
25312508

25322509
<!-- Shrink Mono.Android.dll by removing attribute only needed for GenerateJavaStubs -->
25332510
<RemoveRegisterAttribute
25342511
Condition="'$(AndroidLinkMode)' != 'None' AND '$(AndroidUseSharedRuntime)' != 'true'"
25352512
Deterministic="$(Deterministic)"
2536-
ShrunkFrameworkAssemblies="@(_ShrunkFrameworkAssemblies)" />
2513+
FrameworkAssemblies="@(_ResolvedFrameworkAssemblies)" />
25372514

2538-
<MakeDir Directories="$(MonoAndroidIntermediateAssemblyDir)shrunk" />
2539-
<Touch Files="$(_RemoveRegisterFlag)" AlwaysCreate="true" />
2515+
<Touch Files="$(_AndroidStampDirectory)_RemoveRegisterAttribute.stamp" AlwaysCreate="true" />
25402516
</Target>
25412517

25422518
<Target Name="_ResolveSatellitePaths"
@@ -2678,8 +2654,7 @@ because xbuild doesn't support framework reference assemblies.
26782654
<_BuildApkEmbedInputs>
26792655
$(MSBuildAllProjects)
26802656
;$(_PackagedResources)
2681-
;@(_ResolvedUserAssemblies)
2682-
;@(_ShrunkFrameworkAssemblies)
2657+
;@(_ResolvedAssemblies)
26832658
;@(AndroidNativeLibrary)
26842659
;@(_DexFile)
26852660
;$(_AndroidBuildPropertiesCache)
@@ -2717,7 +2692,7 @@ because xbuild doesn't support framework reference assemblies.
27172692
AndroidSequencePointsMode="$(_SequencePointsMode)"
27182693
AotAdditionalArguments="$(AndroidAotAdditionalArguments)"
27192694
ExtraAotOptions="$(AndroidExtraAotOptions)"
2720-
ResolvedAssemblies="@(_ResolvedUserAssemblies);@(_ShrunkFrameworkAssemblies)"
2695+
ResolvedAssemblies="@(_ResolvedAssemblies)"
27212696
AotOutputDirectory="$(_AndroidAotBinDirectory)"
27222697
IntermediateAssemblyDir="$(MonoAndroidIntermediateAssemblyDir)"
27232698
LinkMode="$(AndroidLinkMode)"
@@ -2742,7 +2717,7 @@ because xbuild doesn't support framework reference assemblies.
27422717
Condition="'$(BundleAssemblies)' == 'True'"
27432718
KeepTemp="$(AndroidMakeBundleKeepTemporaryFiles)"
27442719
AndroidNdkDirectory="$(_AndroidNdkDirectory)"
2745-
Assemblies="@(_ResolvedUserAssemblies);@(_AndroidResolvedSatellitePaths);@(_ShrunkFrameworkAssemblies)"
2720+
Assemblies="@(_ResolvedAssemblies);@(_AndroidResolvedSatellitePaths)"
27462721
IncludePath="$(MonoAndroidIncludeDirectory)"
27472722
SupportedAbis="@(_BuildTargetAbis)"
27482723
TempOutputPath="$(IntermediateOutputPath)"
@@ -2760,7 +2735,7 @@ because xbuild doesn't support framework reference assemblies.
27602735
BundleNativeLibraries="$(_BundleResultNativeLibraries)"
27612736
EmbedAssemblies="$(EmbedAssembliesIntoApk)"
27622737
ResolvedUserAssemblies="@(_ResolvedUserAssemblies);@(_AndroidResolvedSatellitePaths)"
2763-
ResolvedFrameworkAssemblies="@(_ShrunkFrameworkAssemblies)"
2738+
ResolvedFrameworkAssemblies="@(_ResolvedFrameworkAssemblies)"
27642739
NativeLibraries="@(AndroidNativeLibrary)"
27652740
ApplicationSharedLibraries="@(_ApplicationSharedLibrary)"
27662741
AdditionalNativeLibraryReferences="@(_AdditionalNativeLibraryReferences)"
@@ -2789,7 +2764,7 @@ because xbuild doesn't support framework reference assemblies.
27892764
BundleNativeLibraries="$(_BundleResultNativeLibraries)"
27902765
EmbedAssemblies="$(EmbedAssembliesIntoApk)"
27912766
ResolvedUserAssemblies="@(_ResolvedUserAssemblies);@(_AndroidResolvedSatellitePaths)"
2792-
ResolvedFrameworkAssemblies="@(_ShrunkFrameworkAssemblies)"
2767+
ResolvedFrameworkAssemblies="@(_ResolvedFrameworkAssemblies)"
27932768
NativeLibraries="@(AndroidNativeLibrary)"
27942769
ApplicationSharedLibraries="@(_ApplicationSharedLibrary)"
27952770
AdditionalNativeLibraryReferences="@(_AdditionalNativeLibraryReferences)"

0 commit comments

Comments
 (0)