Skip to content

Commit 77dff6e

Browse files
[Microsoft.Android.Sdk] use net5.0-android $(TargetFramework)
After bumping to .NET 5.0.100-rc.1.20411.10, we can now use: <TargetFramework>net5.0-android</TargetFramework> On the first try, this failed with: Microsoft.NET.TargetFrameworkInference.targets(113,5): 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. ~~ @(SupportedTargetPlatform) ~~ A second part of this change is the need to fill out `$(TargetPlatformVersion)`, `@(AndroidSupportedTargetPlatform)`, and `@(SupportedTargetPlatform)` similar to: https://github.com/dotnet/sdk/blob/18ee4eac8b3abe6d554d2e0c39d8952da0f23ce5/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.WindowsSupportedTargetPlatforms.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 adcad50 commit 77dff6e

File tree

10 files changed

+113
-6
lines changed

10 files changed

+113
-6
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+
Microsoft.Android.Sdk.SupportedPlatforms.props
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 ("AndroidSupportedTargetPlatform");
70+
writer.WriteAttributeString ("Include", version.ApiLevel.ToString ());
71+
writer.WriteEndElement (); // </AndroidSupportedTargetPlatform>
72+
}
73+
writer.WriteStartElement ("SupportedTargetPlatform");
74+
writer.WriteAttributeString ("Condition", " '$(TargetPlatformIdentifier)' == 'Android' ");
75+
writer.WriteAttributeString ("Include", "@(AndroidSupportedTargetPlatform)");
76+
77+
writer.WriteEndDocument (); // </Project>
78+
}
79+
80+
return !Log.HasLoggedErrors;
81+
}
82+
}
83+
}

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.1.20411.10
5656
HostedMacMojave: Hosted Mac Internal Mojave
5757
HostedMac: Hosted Mac Internal
5858
HostedWinVS2019: Hosted Windows 2019 with VS2019
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
@@ -48,7 +48,7 @@ static XASdkProject ()
4848
public XASdkProject (string outputType = "Exe")
4949
{
5050
Sdk = $"Microsoft.Android.Sdk/{SdkVersion}";
51-
TargetFramework = "net5.0";
51+
TargetFramework = "net5.0-android";
5252

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

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/DotNetXamarinProject.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ protected DotNetXamarinProject (string debugConfigurationName = "Debug", string
2626
SetProperty ("AssemblyName", () => AssemblyName ?? ProjectName);
2727

2828
if (Builder.UseDotNet) {
29-
SetProperty ("TargetFramework", "net5.0");
29+
SetProperty ("TargetFramework", "net5.0-android");
3030
SetProperty ("EnableDefaultItems", "false");
3131
SetProperty ("AppendTargetFrameworkToOutputPath", "false");
3232
SetProperty ("AppendRuntimeIdentifierToOutputPath", "false");

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8" ?>
22
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
33
<UsingTask AssemblyFile="$(BootstrapTasksAssembly)" TaskName="Xamarin.Android.Tools.BootstrapTasks.GenerateProfile" />
4+
<UsingTask AssemblyFile="$(BootstrapTasksAssembly)" TaskName="Xamarin.Android.Tools.BootstrapTasks.GenerateSupportedPlatforms" />
45
<UsingTask AssemblyFile="$(BootstrapTasksAssembly)" TaskName="Xamarin.Android.Tools.BootstrapTasks.UnzipDirectoryChildren" />
56
<UsingTask AssemblyFile="$(PrepTasksAssembly)" TaskName="Xamarin.Android.BuildTools.PrepTasks.ReplaceFileContents" />
67
<UsingTask AssemblyFile="$(PrepTasksAssembly)" TaskName="Xamarin.Android.BuildTools.PrepTasks.Which" />
@@ -13,6 +14,7 @@
1314
<BuildDependsOn>
1415
_CopyNDKTools;
1516
_GenerateXACommonProps;
17+
_GenerateSupportedPlatforms;
1618
$(BuildDependsOn);
1719
_CopyExtractedMultiDexJar;
1820
_BuildMonoScripts;
@@ -266,6 +268,21 @@
266268
Replacements="@PACKAGE_VERSION@=$(ProductVersion);@PACKAGE_VERSION_BUILD@=$(XAVersionCommitCount);@NDK_ARMEABI_V7_API@=$(AndroidNdkApiLevel_ArmV7a);@NDK_ARM64_V8A_API@=$(AndroidNdkApiLevel_ArmV8a);@NDK_X86_API@=$(AndroidNdkApiLevel_X86);@NDK_X86_64_API@=$(AndroidNdkApiLevel_X86_64);@BUNDLETOOL_VERSION@=$(XABundleToolVersion)">
267269
</ReplaceFileContents>
268270
</Target>
271+
<Target Name="_FindAndroidApiInfo">
272+
<ItemGroup>
273+
<_AndroidApiInfo Include="$(XAInstallPrefix)xbuild-frameworks\MonoAndroid\*\AndroidApiInfo.xml" />
274+
</ItemGroup>
275+
</Target>
276+
<Target Name="_GenerateSupportedPlatforms"
277+
DependsOnTargets="ResolveReferences;_FindAndroidApiInfo"
278+
Inputs="$(BootstrapTasksAssembly);$(MSBuildThisFile);@(_AndroidApiInfo)"
279+
Outputs="Microsoft.Android.Sdk\targets\Microsoft.Android.Sdk.SupportedPlatforms.props">
280+
<GenerateSupportedPlatforms
281+
AndroidApiInfo="@(_AndroidApiInfo)"
282+
MinimumApiLevel="$(AndroidMinimumDotNetApiLevel)"
283+
OutputFile="Microsoft.Android.Sdk\targets\Microsoft.Android.Sdk.SupportedPlatforms.props"
284+
/>
285+
</Target>
269286
<Target Name="_GenerateProfileClass"
270287
BeforeTargets="CoreCompile"
271288
Inputs="@(_SharedRuntimeAssemblies)"

0 commit comments

Comments
 (0)