Skip to content

Commit c0f6767

Browse files
[Microsoft.Android.Sdk] use net5.0-android $(TargetFramework)
After bumping to .NET 5.0.100-rc.2.20459.1, we can now use: <TargetFramework>net5.0-android</TargetFramework> On the first try, this failed with: error NETSDK1139: The target platform identifier android was not recognized. Our SDK needs to specify: <TargetPlatformSupported Condition=" '$(TargetPlatformIdentifier)' == 'Android' ">true</TargetPlatformSupported> After doing this, everything seemed to work as before. I updated tests so they will use `net5.0-android` going forward. ~~ @(SdkSupportedTargetPlatform) ~~ A second part of this change is the need to fill out `$(TargetPlatformVersion)`, `@(AndroidSdkSupportedTargetPlatform)`, and `@(SdkSupportedTargetPlatform)` similar to: https://github.com/dotnet/sdk/blob/c43785736edc8d4bc927df3b557c1609d028cd93/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.WindowsSdkSupportedTargetPlatforms.props Using this data, the dotnet/sdk will run the `GenerateTargetPlatformDefineConstants` MSBuild target: https://github.com/dotnet/sdk/blob/a0e17b2b5d2ec75c16e1083b1f926a258126c73a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.BeforeCommon.targets#L188-L198 This fills out `$(DefineConstants)` with `ANDROID;ANDROID21;...;ANDROID30`.
1 parent 3a067cc commit c0f6767

File tree

14 files changed

+123
-9
lines changed

14 files changed

+123
-9
lines changed

.gitignore

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@ logcat-*.txt
1919
apk-sizes-*.txt
2020
*.rawproto
2121
*.binlog
22-
src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.props
23-
src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.BundledVersions.props
22+
*.ProjectImports.zip
2423
*~
2524
external/monodroid/
2625
external/mono/

Configuration.props

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
<!-- Should correspond to the first value from `$(API_LEVELS)` in `build-tools/api-xml-adjuster/Makefile` -->
2121
<AndroidFirstFrameworkVersion Condition="'$(AndroidFirstFrameworkVersion)' == ''">v4.4</AndroidFirstFrameworkVersion>
2222
<AndroidFirstApiLevel Condition="'$(AndroidFirstApiLevel)' == ''">19</AndroidFirstApiLevel>
23+
<!-- The min API level supported by Microsoft.Android.Sdk, should refactor/remove when this value is the same as $(AndroidFirstApiLevel) -->
24+
<AndroidMinimumDotNetApiLevel Condition="'$(AndroidMinimumDotNetApiLevel)' == ''">21</AndroidMinimumDotNetApiLevel>
2325
<AndroidFirstPlatformId Condition="'$(AndroidFirstPlatformId)' == ''">$(AndroidFirstApiLevel)</AndroidFirstPlatformId>
2426
<_IsRunningNuGetRestore Condition="$(RestoreTaskAssemblyFile.EndsWith('NuGet.exe', StringComparison.InvariantCultureIgnoreCase))">True</_IsRunningNuGetRestore>
2527
<!-- *Latest* *stable* API level binding that we support; used when building src/Xamarin.Android.Build.Tasks -->

Documentation/guides/OneDotNet.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ The following instructions can be used for early preview testing.
206206
```xml
207207
<Project Sdk="Microsoft.Android.Sdk/10.0.100">
208208
<PropertyGroup>
209-
<TargetFramework>net5.0</TargetFramework>
209+
<TargetFramework>net5.0-android</TargetFramework>
210210
<RuntimeIdentifier>android.21-arm64</RuntimeIdentifier>
211211
<OutputType>Exe</OutputType>
212212
</PropertyGroup>
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
using System.IO;
2+
using System.Linq;
3+
using System.Xml;
4+
using Microsoft.Build.Framework;
5+
using Microsoft.Build.Utilities;
6+
7+
namespace Xamarin.Android.Tools.BootstrapTasks
8+
{
9+
/// <summary>
10+
/// Generates Microsoft.Android.Sdk.SupportedPlatforms.props
11+
/// Similar to: https://github.com/dotnet/sdk/blob/18ee4eac8b3abe6d554d2e0c39d8952da0f23ce5/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.WindowsSupportedTargetPlatforms.props
12+
/// </summary>
13+
public class GenerateSupportedPlatforms : Task
14+
{
15+
/// <summary>
16+
/// A list of AndroidApiInfo.xml files produced by Mono.Android.targets
17+
/// </summary>
18+
[Required]
19+
public string [] AndroidApiInfo { get; set; }
20+
21+
/// <summary>
22+
/// The output file to generate
23+
/// </summary>
24+
[Required]
25+
public string OutputFile { get; set; }
26+
27+
/// <summary>
28+
/// $(AndroidMinimumDotNetApiLevel) from Configuration.props
29+
/// </summary>
30+
[Required]
31+
public int MinimumApiLevel { get; set; }
32+
33+
public override bool Execute ()
34+
{
35+
if (AndroidApiInfo.Length == 0) {
36+
Log.LogError ("This task requires at least one AndroidApiInfo.xml file!");
37+
return false;
38+
}
39+
40+
var versions = new AndroidVersions (
41+
AndroidApiInfo.Select (d => Path.GetDirectoryName (d)));
42+
var settings = new XmlWriterSettings {
43+
OmitXmlDeclaration = true,
44+
Indent = true,
45+
};
46+
using (var writer = XmlWriter.Create (OutputFile, settings)) {
47+
48+
writer.WriteComment ($@"
49+
***********************************************************************************************
50+
{Path.GetFileName (OutputFile)}
51+
52+
Specifies the supported Android platform versions for this SDK.
53+
54+
***********************************************************************************************
55+
");
56+
writer.WriteStartElement ("Project");
57+
58+
writer.WriteStartElement ("PropertyGroup");
59+
writer.WriteStartElement ("TargetPlatformVersion");
60+
writer.WriteAttributeString ("Condition", " '$(TargetPlatformVersion)' == '' ");
61+
writer.WriteString (versions.MaxStableVersion.ApiLevel.ToString ());
62+
writer.WriteEndElement (); // </TargetPlatformVersion>
63+
writer.WriteEndElement (); // </PropertyGroup>
64+
65+
writer.WriteStartElement ("ItemGroup");
66+
foreach (AndroidVersion version in versions.InstalledBindingVersions
67+
.Where (v => v.ApiLevel >= MinimumApiLevel)
68+
.OrderBy (v => v.ApiLevel)) {
69+
writer.WriteStartElement ("AndroidSdkSupportedTargetPlatform");
70+
writer.WriteAttributeString ("Include", version.ApiLevel.ToString ());
71+
writer.WriteEndElement (); // </AndroidSdkSupportedTargetPlatform>
72+
}
73+
writer.WriteStartElement ("SdkSupportedTargetPlatform");
74+
writer.WriteAttributeString ("Condition", " '$(TargetPlatformIdentifier)' == 'Android' ");
75+
writer.WriteAttributeString ("Include", "@(AndroidSdkSupportedTargetPlatform)");
76+
77+
writer.WriteEndDocument (); // </Project>
78+
}
79+
80+
return !Log.HasLoggedErrors;
81+
}
82+
}
83+
}

build-tools/automation/azure-pipelines-oss.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ variables:
2727
PREPARE_FLAGS: PREPARE_CI=1 PREPARE_CI_PR=1
2828
DotNetCoreVersion: 3.1.201
2929
# Version number from: https://github.com/dotnet/installer#installers-and-binaries
30-
DotNetCorePreviewVersion: 5.0.100-preview.7.20307.3
30+
DotNetCorePreviewVersion: 5.0.100-rc.2.20459.1
3131

3232
stages:
3333
- stage: mac_stage

build-tools/automation/azure-pipelines.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ variables:
5252
NUnitConsoleVersion: 3.11.1
5353
DotNetCoreVersion: 3.1.201
5454
# Version number from: https://github.com/dotnet/installer#installers-and-binaries
55-
DotNetCorePreviewVersion: 5.0.100-preview.7.20307.3
55+
DotNetCorePreviewVersion: 5.0.100-rc.2.20459.1
5656
HostedMacMojave: Hosted Mac Internal Mojave
5757
HostedMac: Hosted Mac Internal
5858
HostedWinVS2019: Hosted Windows 2019 with VS2019

global.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
{
2+
"sdk": {
3+
"version": "3.1.201",
4+
"rollForward": "latestFeature"
5+
},
26
"msbuild-sdks": {
37
"Microsoft.Build.NoTargets": "2.0.1",
48
"Microsoft.DotNet.Build.Tasks.SharedFramework.Sdk": "5.0.0-beta.20120.1"
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
1+
/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.BundledVersions.props
2+
/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.SupportedPlatforms.props
13
/Xamarin.Android.Common.props
24
/Xamarin.Android.BuildInfo.txt

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,13 @@
1919
</PropertyGroup>
2020

2121
<Import Sdk="Microsoft.NET.Sdk" Project="Sdk.targets" />
22+
<PropertyGroup>
23+
<TargetPlatformSupported Condition=" '$(TargetPlatformIdentifier)' == 'Android' ">true</TargetPlatformSupported>
24+
</PropertyGroup>
2225

2326
<!-- Default item includes (globs and implicit references) -->
2427
<Import Project="Microsoft.Android.Sdk.DefaultItems.targets" />
28+
<Import Project="Microsoft.Android.Sdk.SupportedPlatforms.props" />
2529
<!-- Build ordering, should be imported before Xamarin.Android.Common.targets -->
2630
<Import Project="$(MSBuildThisFileDirectory)Microsoft.Android.Sdk.BuildOrder.targets" />
2731

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XASdkProject.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public static void SaveGlobalJson (string directory)
7373
public XASdkProject (string outputType = "Exe")
7474
{
7575
Sdk = $"Microsoft.Android.Sdk/{SdkVersion}";
76-
TargetFramework = "net5.0";
76+
TargetFramework = "net5.0-android";
7777

7878
TargetSdkVersion = AndroidSdkResolver.GetMaxInstalledPlatform ().ToString ();
7979
PackageName = PackageName ?? string.Format ("{0}.{0}", ProjectName);

0 commit comments

Comments
 (0)