Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -207,20 +207,18 @@ _ResolveAssemblies MSBuild target.

<Target Name="_PrepareAssemblies"
DependsOnTargets="$(_PrepareAssembliesDependsOnTargets)">
<ItemGroup>
<_ResolvedAssemblies Include="@(ResolvedAssemblies)" />
<_ResolvedUserAssemblies Include="@(ResolvedUserAssemblies)" />
<_ResolvedFrameworkAssemblies Include="@(ResolvedFrameworkAssemblies)" />
<_ResolvedSymbols Include="@(ResolvedSymbols)" />
</ItemGroup>
<ItemGroup Condition=" '$(PublishTrimmed)' != 'true' ">
<_ResolvedAssemblies Include="@(ResolvedAssemblies->'$(MonoAndroidIntermediateAssemblyDir)%(DestinationSubPath)')" Condition=" '%(DestinationSubPath)' != '' " />
<_ResolvedUserAssemblies Include="@(ResolvedUserAssemblies->'$(MonoAndroidIntermediateAssemblyDir)%(DestinationSubPath)')" Condition=" '%(DestinationSubPath)' != '' " />
<_ResolvedFrameworkAssemblies Include="@(ResolvedFrameworkAssemblies->'$(MonoAndroidIntermediateAssemblyDir)%(DestinationSubPath)')" Condition=" '%(DestinationSubPath)' != '' " />
<_ResolvedSymbols Include="@(ResolvedSymbols->'$(MonoAndroidIntermediateAssemblyDir)%(DestinationSubPath)')" Condition=" '%(DestinationSubPath)' != '' " />
<_ShrunkAssemblies Include="@(_ResolvedAssemblies)" />
<_ShrunkUserAssemblies Include="@(_ResolvedUserAssemblies)" />
<_ShrunkFrameworkAssemblies Include="@(_ResolvedFrameworkAssemblies)" />
</ItemGroup>
<ItemGroup Condition=" '$(PublishTrimmed)' == 'true' ">
<_ResolvedAssemblies Include="@(ResolvedAssemblies)" />
<_ResolvedUserAssemblies Include="@(ResolvedUserAssemblies)" />
<_ResolvedFrameworkAssemblies Include="@(ResolvedFrameworkAssemblies)" />
<_ResolvedSymbols Include="@(ResolvedSymbols)" />
<_ShrunkFrameworkAssemblies
Include="@(_ShrunkAssemblies)"
Condition=" '%(_ShrunkAssemblies.FrameworkAssembly)' == 'true' "
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2178,21 +2178,6 @@ public void CheckLintResourceFileReferencesAreFixed ([Values] AndroidRuntime run
// TODO: [TestCase (false, AndroidRuntime.NativeAOT)]
public void SimilarAndroidXAssemblyNames (bool publishTrimmed, AndroidRuntime runtime)
{
if (!publishTrimmed && runtime == AndroidRuntime.CoreCLR) {
// This currently fails with the following exception:
//
// error XALNS7015: System.NotSupportedException: Writing mixed-mode assemblies is not supported
// at Mono.Cecil.ModuleWriter.Write(ModuleDefinition module, Disposable`1 stream, WriterParameters parameters)
// at Mono.Cecil.ModuleWriter.WriteModule(ModuleDefinition module, Disposable`1 stream, WriterParameters parameters)
// at Mono.Cecil.ModuleDefinition.Write(String fileName, WriterParameters parameters)
// at Mono.Cecil.AssemblyDefinition.Write(String fileName, WriterParameters parameters)
// at Xamarin.Android.Tasks.SaveChangedAssemblyStep.ProcessAssembly(AssemblyDefinition assembly, StepContext context) in src/Xamarin.Android.Build.Tasks/Tasks/AssemblyModifierPipeline.cs:line 197
// at Xamarin.Android.Tasks.AssemblyPipeline.Run(AssemblyDefinition assembly, StepContext context) in src/Xamarin.Android.Build.Tasks/Utilities/AssemblyPipeline.cs:line 26
// at Xamarin.Android.Tasks.AssemblyModifierPipeline.RunPipeline(AssemblyPipeline pipeline, ITaskItem source, ITaskItem destination) in src/Xamarin.Android.Build.Tasks/Tasks/AssemblyModifierPipeline.cs:line 175
Assert.Ignore ("CoreCLR: fails because of a Mono.Cecil lack of support");
return;
}

bool aotAssemblies = runtime == AndroidRuntime.MonoVM && publishTrimmed;
var proj = new XamarinAndroidApplicationProject {
IsRelease = true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -469,22 +469,6 @@ public void AndroidAddKeepAlives (bool isRelease, bool setAndroidAddKeepAlivesTr
return;
}

if (runtime == AndroidRuntime.CoreCLR && isRelease && !setAndroidAddKeepAlivesTrue && setLinkModeNone && shouldAddKeepAlives) {
// This currently fails with the following exception:
//
// error XALNS7015: System.NotSupportedException: Writing mixed-mode assemblies is not supported
// at Mono.Cecil.ModuleWriter.Write(ModuleDefinition module, Disposable`1 stream, WriterParameters parameters)
// at Mono.Cecil.ModuleWriter.WriteModule(ModuleDefinition module, Disposable`1 stream, WriterParameters parameters)
// at Mono.Cecil.ModuleDefinition.Write(String fileName, WriterParameters parameters)
// at Mono.Cecil.AssemblyDefinition.Write(String fileName, WriterParameters parameters)
// at Xamarin.Android.Tasks.SaveChangedAssemblyStep.ProcessAssembly(AssemblyDefinition assembly, StepContext context) in src/Xamarin.Android.Build.Tasks/Tasks/AssemblyModifierPipeline.cs:line 197
// at Xamarin.Android.Tasks.AssemblyPipeline.Run(AssemblyDefinition assembly, StepContext context) in src/Xamarin.Android.Build.Tasks/Utilities/AssemblyPipeline.cs:line 26
// at Xamarin.Android.Tasks.AssemblyModifierPipeline.RunPipeline(AssemblyPipeline pipeline, ITaskItem source, ITaskItem destination) in src/Xamarin.Android.Build.Tasks/Tasks/AssemblyModifierPipeline.cs:line 175
// at Xamarin.Android.Tasks.AssemblyModifierPipeline.RunTask() in src/Xamarin.Android.Build.Tasks/Tasks/AssemblyModifierPipeline.cs:line 123
Assert.Ignore ("CoreCLR: fails because of a Mono.Cecil lack of support");
return;
};

var proj = new XamarinAndroidApplicationProject {
IsRelease = isRelease,
OtherBuildItems = {
Expand Down
43 changes: 24 additions & 19 deletions src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets
Original file line number Diff line number Diff line change
Expand Up @@ -1419,47 +1419,52 @@ because xbuild doesn't support framework reference assemblies.
<Error Text="%24(AndroidGenerateJniMarshalMethods)=True is not supported at this time." />
</Target>

<Target Name="_LinkAssembliesNoShrinkInputs">
<!--
Inner build only: runs assembly modifications (FixAbstractMethods, AddKeepAlives, etc.)
BEFORE crossgen2 creates R2R images. ResolvedAssemblies is empty in the inner build
because the Android-specific _ResolveAssemblies target only runs in the outer build,
so we gather assemblies from ResolvedFileToPublish instead.

Mark every DLL as HasMonoAndroidReference so FixAbstractMethodsStep inspects them;
the step's own MightNeedFix() guard (IsSubclassOf("Java.Lang.Object")) filters out
non-binding types.
-->
<Target Name="_LinkAssembliesNoShrink"
BeforeTargets="CreateReadyToRunImages"
Condition=" '$(PublishTrimmed)' != 'true' and '$(_ComputeFilesToPublishForRuntimeIdentifiers)' == 'true' ">
<ItemGroup>
<!-- We need this in its own item group so it isn't lost during a partial build -->
<_AllResolvedAssemblies Include="@(ResolvedAssemblies)" />
<_ResolvedFileToPublishDlls Include="@(ResolvedFileToPublish)" Condition=" '%(Extension)' == '.dll' ">
<HasMonoAndroidReference>True</HasMonoAndroidReference>
</_ResolvedFileToPublishDlls>
</ItemGroup>
</Target>

<Target Name="_LinkAssembliesNoShrink"
DependsOnTargets="_LinkAssembliesNoShrinkInputs"
Condition="'$(PublishTrimmed)' != 'true'"
Inputs="@(ResolvedAssemblies);$(_AndroidBuildPropertiesCache)"
Outputs="@(ResolvedAssemblies->'$(MonoAndroidIntermediateAssemblyDir)%(DestinationSubPath)')">
<LinkAssembliesNoShrink
ApplicationJavaClass="$(AndroidApplicationJavaClass)"
CodeGenerationTarget="$(AndroidCodegenTarget)"
Debug="$(AndroidIncludeDebugSymbols)"
EnableMarshalMethods="$(_AndroidUseMarshalMethods)"
ErrorOnCustomJavaObject="$(AndroidErrorOnCustomJavaObject)"
PackageNamingPolicy="$(AndroidPackageNamingPolicy)"
ResolvedAssemblies="@(_AllResolvedAssemblies)"
ResolvedUserAssemblies="@(ResolvedUserAssemblies)"
SourceFiles="@(ResolvedAssemblies)"
DestinationFiles="@(ResolvedAssemblies->'$(MonoAndroidIntermediateAssemblyDir)%(DestinationSubPath)')"
ResolvedAssemblies="@(_ResolvedFileToPublishDlls)"
ResolvedUserAssemblies="@(_ResolvedFileToPublishDlls)"
SourceFiles="@(_ResolvedFileToPublishDlls)"
DestinationFiles="@(_ResolvedFileToPublishDlls)"
TargetName="$(TargetName)"
AddKeepAlives="$(AndroidAddKeepAlives)"
UseDesignerAssembly="$(AndroidUseDesignerAssembly)"
Deterministic="$(Deterministic)"
ReadSymbols="$(_AndroidLinkAssembliesReadSymbols)">
</LinkAssembliesNoShrink>

<ItemGroup>
<FileWrites Include="$(MonoAndroidIntermediateAssemblyDir)**" />
</ItemGroup>
</Target>

<!-- Runs additional steps after ILLink runs (_LinkAssemblies) -->
<Target Name="_AfterILLinkAdditionalSteps"
DependsOnTargets="_LinkAssembliesNoShrinkInputs"
Condition="'$(PublishTrimmed)' == 'true'"
Inputs="$(_AndroidLinkFlag)"
Outputs="$(_AdditionalPostLinkerStepsFlag)">
<ItemGroup>
<_AllResolvedAssemblies Include="@(ResolvedAssemblies)" />
</ItemGroup>
<AssemblyModifierPipeline
ApplicationJavaClass="$(AndroidApplicationJavaClass)"
CodeGenerationTarget="$(_AndroidJcwCodegenTarget)"
Expand Down Expand Up @@ -2881,7 +2886,7 @@ because xbuild doesn't support framework reference assemblies.
</Target>

<Target Name="_LinkAssemblies"
DependsOnTargets="_ResolveAssemblies;_CreatePackageWorkspace;$(_BeforeLinkAssemblies);_GenerateJniMarshalMethods;_LinkAssembliesNoShrink"
DependsOnTargets="_ResolveAssemblies;_CreatePackageWorkspace;$(_BeforeLinkAssemblies);_GenerateJniMarshalMethods"
/>

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