Skip to content

Commit aa0485f

Browse files
[Xamarin.Android.Build.Tasks] temporarily support .NET 8 in .NET 10 (#9777)
Context: dotnet/android-libraries#1084 (comment) Context: https://aka.ms/maui-support-policy dotnet/android-libraries needs to build with: <TargetFrameworks>net8.0-android;net10.0-android</TargetFrameworks> Typically each .NET release, we only support N-1 `$(TargetFrameworks)` and import `Eol.targets` to emit an error message on older versions. We can make some .NET workload changes to support .NET 8 in a .NET 10 SDK until .NET 8 goes out of support in May. I also updated some MSBuild tests to ensure .NET 8 projects build & run.
1 parent dbda951 commit aa0485f

File tree

6 files changed

+47
-7
lines changed

6 files changed

+47
-7
lines changed

build-tools/create-packs/Microsoft.NET.Sdk.Android.proj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,12 @@ about the various Microsoft.Android workloads.
3636
<ReplaceFileContents
3737
SourceFile="$(XamarinAndroidSourcePath)src\Xamarin.Android.Build.Tasks\Microsoft.NET.Sdk.Android\WorkloadManifest.in.json"
3838
DestinationFile="$(WorkloadManifestJsonPath)"
39-
Replacements="@WORKLOAD_VERSION@=$(WorkloadVersion);@NET_PREVIOUS_VERSION@=$(AndroidNetPreviousVersion)">
39+
Replacements="@WORKLOAD_VERSION@=$(WorkloadVersion);@NET_PREVIOUS_VERSION@=$(AndroidNetPreviousVersion);@NET8_PREVIOUS_VERSION@=$(AndroidNet8PreviousVersion)">
4040
</ReplaceFileContents>
4141
<ReplaceFileContents
4242
SourceFile="$(XamarinAndroidSourcePath)src\Xamarin.Android.Build.Tasks\Microsoft.NET.Sdk.Android\WorkloadManifest.in.targets"
4343
DestinationFile="$(WorkloadManifestTargetsPath)"
44-
Replacements="@NET_PREVIOUS_VERSION@=$(AndroidNetPreviousVersion)">
44+
Replacements="@NET_PREVIOUS_VERSION@=$(AndroidNetPreviousVersion);@NET8_PREVIOUS_VERSION@=$(AndroidNet8PreviousVersion)">
4545
</ReplaceFileContents>
4646

4747
<ItemGroup>

eng/Versions.props

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
<!-- Previous .NET Android version -->
1616
<MicrosoftAndroidSdkWindowsPackageVersion>35.0.24</MicrosoftAndroidSdkWindowsPackageVersion>
1717
<AndroidNetPreviousVersion>$(MicrosoftAndroidSdkWindowsPackageVersion)</AndroidNetPreviousVersion>
18+
<!-- To be removed before .NET 10 GA -->
19+
<AndroidNet8PreviousVersion>34.0.147</AndroidNet8PreviousVersion>
1820
</PropertyGroup>
1921
<PropertyGroup>
2022
<!-- Match the first three version numbers and append 00 -->

src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"packs": [
77
"Microsoft.Android.Sdk.net10",
88
"Microsoft.Android.Sdk.net9",
9+
"Microsoft.Android.Sdk.net8",
910
"Microsoft.Android.Ref.35",
1011
"Microsoft.Android.Runtime.Mono.35.android-arm",
1112
"Microsoft.Android.Runtime.Mono.35.android-arm64",
@@ -15,6 +16,8 @@
1516
],
1617
"platforms": [ "win-x64", "win-arm64", "linux-x64", "linux-arm64", "osx-x64", "osx-arm64" ],
1718
"extends" : [
19+
"microsoft-net-runtime-android-net8",
20+
"microsoft-net-runtime-android-aot-net8",
1821
"microsoft-net-runtime-android-net9",
1922
"microsoft-net-runtime-android-aot-net9",
2023
"microsoft-net-runtime-android",
@@ -61,6 +64,19 @@
6164
"linux-arm64": "Microsoft.Android.Sdk.Linux"
6265
}
6366
},
67+
"Microsoft.Android.Sdk.net8": {
68+
"kind": "sdk",
69+
"version": "@NET8_PREVIOUS_VERSION@",
70+
"alias-to": {
71+
"osx-x64": "Microsoft.Android.Sdk.Darwin",
72+
"osx-arm64": "Microsoft.Android.Sdk.Darwin",
73+
"win-x86": "Microsoft.Android.Sdk.Windows",
74+
"win-x64": "Microsoft.Android.Sdk.Windows",
75+
"win-arm64": "Microsoft.Android.Sdk.Windows",
76+
"linux-x64": "Microsoft.Android.Sdk.Linux",
77+
"linux-arm64": "Microsoft.Android.Sdk.Linux"
78+
}
79+
},
6480
"Microsoft.Android.Ref.35": {
6581
"kind": "framework",
6682
"version": "@WORKLOAD_VERSION@"

src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.targets

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
Condition=" $([MSBuild]::VersionEquals($(TargetFrameworkVersion), '10.0')) " />
55
<Import Project="Sdk.targets" Sdk="Microsoft.Android.Sdk.net9"
66
Condition=" $([MSBuild]::VersionEquals($(TargetFrameworkVersion), '9.0')) " />
7+
<Import Project="Sdk.targets" Sdk="Microsoft.Android.Sdk.net8"
8+
Condition=" $([MSBuild]::VersionEquals($(TargetFrameworkVersion), '8.0')) " />
79
<Import Project="Eol.targets" Sdk="Microsoft.Android.Sdk.net10"
8-
Condition=" $([MSBuild]::VersionLessThanOrEquals($(TargetFrameworkVersion), '8.0')) " />
10+
Condition=" $([MSBuild]::VersionLessThanOrEquals($(TargetFrameworkVersion), '7.0')) " />
911
</ImportGroup>
1012

1113
<ItemGroup Condition=" '$(TargetPlatformIdentifier)' == 'android' and $([MSBuild]::VersionEquals($(TargetFrameworkVersion), '9.0')) ">
@@ -16,7 +18,15 @@
1618
/>
1719
</ItemGroup>
1820

19-
<ItemGroup Condition=" '$(TargetFrameworkIdentifier)' == '.NETCoreApp' and $([MSBuild]::VersionGreaterThanOrEquals($(TargetFrameworkVersion), '9.0')) ">
21+
<ItemGroup Condition=" '$(TargetPlatformIdentifier)' == 'android' and $([MSBuild]::VersionEquals($(TargetFrameworkVersion), '8.0')) ">
22+
<KnownFrameworkReference
23+
Update="Microsoft.Android"
24+
LatestRuntimeFrameworkVersion="@NET8_PREVIOUS_VERSION@"
25+
TargetingPackVersion="@NET8_PREVIOUS_VERSION@"
26+
/>
27+
</ItemGroup>
28+
29+
<ItemGroup Condition=" '$(TargetFrameworkIdentifier)' == '.NETCoreApp' and $([MSBuild]::VersionGreaterThanOrEquals($(TargetFrameworkVersion), '8.0')) ">
2030
<SdkSupportedTargetPlatformIdentifier Include="android" DisplayName="Android" />
2131
</ItemGroup>
2232
</Project>

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ public void DotNetNew ([Values ("android", "androidlib", "android-bindinglib", "
4646
}
4747

4848
static readonly object[] DotNetPackTargetFrameworks = new object[] {
49+
new object[] {
50+
"net8.0",
51+
"android",
52+
34,
53+
},
4954
new object[] {
5055
"net9.0",
5156
"android",
@@ -145,6 +150,11 @@ public String Say (String quote) {
145150
}
146151

147152
static readonly object[] DotNetTargetFrameworks = new object[] {
153+
new object[] {
154+
"net8.0",
155+
"android",
156+
34,
157+
},
148158
new object[] {
149159
"net9.0",
150160
"android",
@@ -200,7 +210,7 @@ public void DotNetPublish ([Values (false, true)] bool isRelease, [ValueSource(n
200210
var apiLevel = (int)data[2];
201211

202212
//FIXME: will revisit this in a future PR
203-
if (dotnetVersion == "net9.0") {
213+
if (dotnetVersion != "net10.0") {
204214
Assert.Ignore ("error NETSDK1185: The Runtime Pack for FrameworkReference 'Microsoft.Android.Runtime.34.android-arm' was not available. This may be because DisableTransitiveFrameworkReferenceDownloads was set to true.");
205215
}
206216

tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -897,10 +897,12 @@ public void CheckResouceIsOverridden ()
897897

898898
[Test]
899899
[Category ("WearOS")]
900-
public void DotNetInstallAndRunPreviousSdk ([Values (false, true)] bool isRelease)
900+
public void DotNetInstallAndRunPreviousSdk (
901+
[Values (false, true)] bool isRelease,
902+
[Values ("net8.0-android", "net9.0-android")] string targetFramework)
901903
{
902904
var proj = new XamarinFormsAndroidApplicationProject () {
903-
TargetFramework = "net9.0-android",
905+
TargetFramework = targetFramework,
904906
IsRelease = isRelease,
905907
EnableDefaultItems = true,
906908
};

0 commit comments

Comments
 (0)