Skip to content

Commit 6355de3

Browse files
[One .NET] fixes for IncrementalClean and FileWrites (#4905)
Context: https://github.com/xamarin/xamarin-android/blob/792d61d116cc0293bd457d1c418d1972829ec226/Documentation/guides/MSBuildBestPractices.md#filewrites-and-incrementalclean Running under `dotnet`, a test is failing with: GenerateJavaStubsAndAssembly(True) android\environment.armeabi-v7a.o is not in FileWrites! Expected: some item equal to "C:\A_work\1\s\bin\TestRelease\temp\GenerateJavaStubsAndAssemblyTrue\obj\Release\android\environment.armeabi-v7a.o" When I authored `Microsoft.Android.Sdk.BuildOrder.targets`, I didn't bring over the workaround to make `IncrementalClean` and `FileWrites` work appropriately: <CoreBuildDependsOn> $([MSBuild]::Unescape($(CoreBuildDependsOn.Replace('IncrementalClean;', '$(_BeforeIncrementalClean);IncrementalClean;')))) </CoreBuildDependsOn> It appears this is still needed in the new `dotnet` world order. I brought over the missing pieces from `Xamarin.Android.Legacy.targets`. We can eventually use a new `$(IncrementalCleanDependsOn)` instead: dotnet/msbuild#5499 We also need to specify the `armeabi-v7a` ABI in this test, because the default ABIs are different in .NET 5+. I added some helper methods to check `Builder.UseDotNet` to decide if `$(RuntimeIdentifier)` should be used instead of `$(AndroidSupportedAbis)`. I updated a couple tests that should use these helpers.
1 parent 792d61d commit 6355de3

File tree

5 files changed

+41
-8
lines changed

5 files changed

+41
-8
lines changed

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ projects, these properties are set in Xamarin.Android.Legacy.targets.
2727
_CopyPackage;
2828
_Sign;
2929
</BuildDependsOn>
30+
<_BeforeIncrementalClean>
31+
_PrepareAssemblies;
32+
_CompileDex;
33+
$(_AfterCompileDex);
34+
_AddFilesToFileWrites;
35+
</_BeforeIncrementalClean>
3036
</PropertyGroup>
3137

3238
<PropertyGroup Condition=" '$(AndroidApplication)' != 'True' ">
@@ -43,6 +49,9 @@ projects, these properties are set in Xamarin.Android.Legacy.targets.
4349
_ValidateAndroidPackageProperties;
4450
$(BuildDependsOn);
4551
</BuildDependsOn>
52+
<_BeforeIncrementalClean>
53+
_AddFilesToFileWrites;
54+
</_BeforeIncrementalClean>
4655
</PropertyGroup>
4756

4857
<!-- Targets that run unless we are running _ComputeFilesToPublishForRuntimeIdentifiers -->
@@ -64,6 +73,9 @@ projects, these properties are set in Xamarin.Android.Legacy.targets.
6473
</PropertyGroup>
6574

6675
<PropertyGroup>
76+
<CoreBuildDependsOn>
77+
$([MSBuild]::Unescape($(CoreBuildDependsOn.Replace('IncrementalClean;', '$(_BeforeIncrementalClean);IncrementalClean;'))))
78+
</CoreBuildDependsOn>
6779
<CompileDependsOn>
6880
_SetupDesignTimeBuildForCompile;
6981
_AddAndroidDefines;

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1954,9 +1954,7 @@ public void BuildApplicationWithJavaSource (bool isRelease, bool expectedResult)
19541954
[TestCaseSource (nameof (RuntimeChecks))]
19551955
public void CheckWhichRuntimeIsIncluded (string supportedAbi, bool debugSymbols, string debugType, bool? optimize, bool? embedAssemblies, string expectedRuntime) {
19561956
var proj = new XamarinAndroidApplicationProject ();
1957-
if (Builder.UseDotNet) {
1958-
proj.SetRuntimeIdentifier (supportedAbi);
1959-
}
1957+
proj.SetAndroidSupportedAbis (supportedAbi);
19601958
proj.SetProperty (proj.ActiveConfigurationProperties, "DebugSymbols", debugSymbols);
19611959
proj.SetProperty (proj.ActiveConfigurationProperties, "DebugType", debugType);
19621960
if (optimize.HasValue)

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/EnvironmentContentTests.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,7 @@ public void BuildApplicationWithMonoEnvironment ([Values ("", "Normal", "Offline
3939
string linkSkip = "FormsViewGroup";
4040
app.SetProperty ("AndroidLinkSkip", linkSkip);
4141
app.SetProperty ("_AndroidSequencePointsMode", sequencePointsMode);
42-
if (Builder.UseDotNet) {
43-
app.SetRuntimeIdentifiers (supportedAbis.Split (';'));
44-
} else {
45-
app.SetProperty (app.ReleaseProperties, KnownProperties.AndroidSupportedAbis, supportedAbis);
46-
}
42+
app.SetAndroidSupportedAbis (supportedAbis);
4743
using (var libb = CreateDllBuilder (Path.Combine ("temp", TestName, lib.ProjectName)))
4844
using (var appb = CreateApkBuilder (Path.Combine ("temp", TestName, app.ProjectName))) {
4945
Assert.IsTrue (libb.Build (lib), "Library build should have succeeded.");

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -774,6 +774,7 @@ public void CasingOnJavaLangObject ()
774774
}
775775

776776
[Test]
777+
[Category ("dotnet")]
777778
public void GenerateJavaStubsAndAssembly ([Values (true, false)] bool isRelease)
778779
{
779780
var targets = new [] {
@@ -785,6 +786,7 @@ public void GenerateJavaStubsAndAssembly ([Values (true, false)] bool isRelease)
785786
var proj = new XamarinAndroidApplicationProject {
786787
IsRelease = isRelease,
787788
};
789+
proj.SetAndroidSupportedAbis ("armeabi-v7a");
788790
proj.OtherBuildItems.Add (new AndroidItem.AndroidEnvironment ("Foo.txt") {
789791
TextContent = () => "Foo=Bar",
790792
});

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Utilities/ProjectExtensions.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,31 @@ namespace Xamarin.ProjectTools
44
{
55
public static class ProjectExtensions
66
{
7+
/// <summary>
8+
/// Sets $(AndroidSupportedAbis) or $(RuntimeIdentifiers) depending if running under dotnet
9+
/// </summary>
10+
public static void SetAndroidSupportedAbis (this IShortFormProject project, params string [] abis)
11+
{
12+
if (Builder.UseDotNet || project is XASdkProject) {
13+
project.SetRuntimeIdentifiers (abis);
14+
} else {
15+
project.SetAndroidSupportedAbis (string.Join (";", abis));
16+
}
17+
}
18+
19+
/// <summary>
20+
/// Sets $(AndroidSupportedAbis) or $(RuntimeIdentifiers) depending if running under dotnet
21+
/// </summary>
22+
/// <param name="abis">A semi-colon-delimited list of ABIs</param>
23+
public static void SetAndroidSupportedAbis (this IShortFormProject project, string abis)
24+
{
25+
if (Builder.UseDotNet || project is XASdkProject) {
26+
project.SetRuntimeIdentifiers (abis.Split (';'));
27+
} else {
28+
project.SetProperty (KnownProperties.AndroidSupportedAbis, abis);
29+
}
30+
}
31+
732
public static void SetRuntimeIdentifier (this IShortFormProject project, string androidAbi)
833
{
934
if (androidAbi == "armeabi-v7a") {

0 commit comments

Comments
 (0)