From 238e0b1bf521e32d518c739a51aa826357b887b2 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Wed, 23 Oct 2024 08:37:38 -0500 Subject: [PATCH 1/2] [Xamarin.Android.Build.Tasks] fix $DOTNET_MODIFIABLE_ASSEMBLIES when FastDev is off Context: https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=10431207&view=ms.vss-test-web.build-test-results-tab&runId=114098346&resultId=100000&paneView=debug The `FastDeployEnvironmentFiles(false)` test fails on PRs from forks, because the "Fast Deployment" feature is not included in OSS builds. The problem appears to be related to target ordering: * `_GetGenerateJavaStubsInputs` : uses `@(AndroidEnvironment)` to set `@(_EnvironmentFiles)` * `_GetGenerateJavaStubs` : must have same `Inputs` as `_GeneratePackageManagerJava` * `_GeneratePackageManagerJava`: actually uses `@(_EnvironmentFiles)` * `_GenerateEnvironmentFiles` : creates a new `@(AndroidEnvironment)` file, that won't be used! But when using either a `Release` build or `Debug` build with `FastDev` enabled, everything works fine. To fix this, we can rework the target ordering: * `_GetGenerateJavaStubsInputs` depends on `_GenerateEnvironmentFiles` * Unfortunately, this is now a circular dependency that causes an MSBuild error. * `_GenerateEnvironmentFiles` no longer depends on `_ReadAndroidManifest` to break the cycle. I does not appear that `_ReadAndroidManifest` is needed, as no properties created there are used. --- .../Xamarin.Android.Common.targets | 4 ++-- .../Tests/InstallAndRunTests.cs | 10 +++++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets index 58616a3ddfc..329344f709c 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets @@ -1455,7 +1455,7 @@ because xbuild doesn't support framework reference assemblies. - + <_GenerateJavaStubsInputs Include="@(_AndroidMSBuildAllProjects)" /> <_GenerateJavaStubsInputs Include="$(_ResolvedUserAssembliesHashFile)" /> @@ -1616,7 +1616,7 @@ because xbuild doesn't support framework reference assemblies. - + <_GeneratedAndroidEnvironment Include="__XA_PACKAGE_NAMING_POLICY__=$(AndroidPackageNamingPolicy)" /> <_GeneratedAndroidEnvironment Include="mono.enable_assembly_preload=0" Condition=" '$(AndroidEnablePreloadAssemblies)' != 'True' " /> diff --git a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs index 502e06fde55..6579abe21aa 100644 --- a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs @@ -951,12 +951,20 @@ public void SupportDesugaringStaticInterfaceMethods () } [Test] - public void FastDeployEnvironmentFiles ([Values (false, true)] bool isRelease) + [TestCase (false, true)] + [TestCase (false, false)] + [TestCase (true, false)] + public void FastDeployEnvironmentFiles (bool isRelease, bool embedAssembliesIntoApk) { + if (embedAssembliesIntoApk) { + AssertCommercialBuild (); + } + var proj = new XamarinAndroidApplicationProject { ProjectName = nameof (FastDeployEnvironmentFiles), RootNamespace = nameof (FastDeployEnvironmentFiles), IsRelease = isRelease, + EmbedAssembliesIntoApk = embedAssembliesIntoApk, EnableDefaultItems = true, OtherBuildItems = { new BuildItem("AndroidEnvironment", "env.txt") { From 51b96cac7c46b8ab3c9c4ee58fa0ae81bbb8aded Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Wed, 23 Oct 2024 10:52:00 -0500 Subject: [PATCH 2/2] Ensure `_ReadAndroidManifest` runs --- .../targets/Microsoft.Android.Sdk.BuildOrder.targets | 2 +- src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.BuildOrder.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.BuildOrder.targets index c647dc91295..ee627e65d03 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.BuildOrder.targets +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.BuildOrder.targets @@ -72,7 +72,7 @@ properties that determine build ordering. _ConvertCustomView; $(_AfterConvertCustomView); $(AfterGenerateAndroidManifest); - _GenerateEnvironmentFiles; + _ReadAndroidManifest; _CompileJava; _CreateApplicationSharedLibraries; _CompileDex; diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets index 329344f709c..d34717d1ff5 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets @@ -1796,7 +1796,7 @@ because xbuild doesn't support framework reference assemblies. _ManifestMerger; _ConvertCustomView; $(_AfterConvertCustomView); - _GenerateEnvironmentFiles; + _ReadAndroidManifest; _GetLibraryImports; _CheckDuplicateJavaLibraries; UpdateAndroidAssets;