diff --git a/Documentation/workflow/HowToAddNewApiLevel.md b/Documentation/workflow/HowToAddNewApiLevel.md index 72764ffba8f..679120aed2c 100644 --- a/Documentation/workflow/HowToAddNewApiLevel.md +++ b/Documentation/workflow/HowToAddNewApiLevel.md @@ -111,17 +111,28 @@ For the new API level, you need: Then update the following files: - - Add new `AndroidPlatform` value to - [`/build-tools/xaprepare/xaprepare/ConfigAndData/BuildAndroidPlatforms.cs`](../../build-tools/xaprepare/xaprepare/ConfigAndData/BuildAndroidPlatforms.cs): - - ```csharp - new AndroidPlatform (apiName: "CANARY", apiLevel: new Version (36, 1), platformID: "CANARY", include: "v16.0", framework: "v16.1", stable: false), + - Add a new `` entry to + [`/src/Mono.Android/Mono.Android.Apis.projitems`](../../src/Mono.Android/Mono.Android.Apis.projitems): + ```xml + + CANARY + 36 + 36.1 + 36.1 + True + ``` - TODO: what should be done for the "mid-year" updates, as is the case for API-CANARY? + `Include` is the binding framework version (e.g. `v16.1`). `Level` is the + integer API level (`Major` of `VersionCodeFull`). `Id` is the platform ID + used to locate `android-$(Id)` directories under the Android SDK. `Stable` + should be `True`; every entry currently in the projitems uses `True`, + including preview codenames like CANARY. (Setting it to `False` would + exclude the entry from being picked as the default stable framework + version by some build-time selection logic.) - What are `include` and `framework` used for? + TODO: what should be done for the "mid-year" updates, as is the case for API-CANARY? - Add new level to [`/build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/AndroidToolchain.cs`](../../build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/AndroidToolchain.cs): diff --git a/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/GenerateSupportedPlatforms.cs b/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/GenerateSupportedPlatforms.cs index 80947479a24..72ec0abe662 100644 --- a/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/GenerateSupportedPlatforms.cs +++ b/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/GenerateSupportedPlatforms.cs @@ -17,7 +17,7 @@ namespace Xamarin.Android.Tools.BootstrapTasks public class GenerateSupportedPlatforms : Task { /// - /// @(AndroidApiInfo) from .\bin\Build$(Configuration)\Mono.Android.Apis.projitems + /// @(AndroidApiInfo) from src\Mono.Android\Mono.Android.Apis.projitems /// [Required] public ITaskItem [] AndroidApiInfo { get; set; } = []; diff --git a/build-tools/create-android-api/create-android-api.csproj b/build-tools/create-android-api/create-android-api.csproj index abdc341b18d..de85695be10 100644 --- a/build-tools/create-android-api/create-android-api.csproj +++ b/build-tools/create-android-api/create-android-api.csproj @@ -6,7 +6,7 @@ - + diff --git a/build-tools/installers/create-installers.targets b/build-tools/installers/create-installers.targets index 44504f25ef4..79ad2b47289 100644 --- a/build-tools/installers/create-installers.targets +++ b/build-tools/installers/create-installers.targets @@ -3,7 +3,7 @@ - + $(XAInstallPrefix)xbuild-frameworks\MonoAndroid\ diff --git a/build-tools/xaprepare/README.md b/build-tools/xaprepare/README.md index c34a67425bc..1e792f7ab88 100644 --- a/build-tools/xaprepare/README.md +++ b/build-tools/xaprepare/README.md @@ -101,9 +101,8 @@ The files mentioned above are found in the [ConfigAndData](xaprepare/ConfigAndDa helper methods used throughout the preparation utility code. **Be very careful** when modifying the names there as it may break the build! - [BuildAndroidPlatforms.cs](xaprepare/ConfigAndData/BuildAndroidPlatforms.cs) - Modified whenever a new Android platform is added, this file names all of the Android API levels along with platform/API - identifiers and .NET for Android framework names corresponding to specific API levels. The file also contains specification - of minimum NDK API levels used for all the Android device targets. + Contains the NDK release/revision constants and the minimum NDK API levels used for all the Android device targets. + The Android API level list itself lives in [`/src/Mono.Android/Mono.Android.Apis.projitems`](../../src/Mono.Android/Mono.Android.Apis.projitems). - [CommonLicenses.cs](xaprepare/ConfigAndData/CommonLicenses.cs) A file with constants containing paths to licenses commonly used by software .NET for Android uses. The licenses are used when generating Third Party Notices. diff --git a/build-tools/xaprepare/xaprepare/Application/AndroidPlatform.cs b/build-tools/xaprepare/xaprepare/Application/AndroidPlatform.cs deleted file mode 100644 index 6d395c53c16..00000000000 --- a/build-tools/xaprepare/xaprepare/Application/AndroidPlatform.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -namespace Xamarin.Android.Prepare -{ - class AndroidPlatform - { - public string? ApiName { get; } - public Version ApiLevel { get; } - public string PlatformID { get; } - public string Framework { get; } - public bool Stable { get; } - public bool Supported { get; } - public string? Include { get; } - - public AndroidPlatform (uint apiLevel, string platformID, string? framework = null, bool stable = true, string? apiName = null, string? include = null) - : this (new Version (checked ((int) apiLevel), 0), platformID, framework, stable, apiName, include) - { - - } - - public AndroidPlatform (Version apiLevel, string platformID, string? framework = null, bool stable = true, string? apiName = null, string? include = null) - { - if (String.IsNullOrEmpty (platformID)) - throw new ArgumentException ("must not be null or empty", nameof (platformID)); - - ApiName = apiName; - ApiLevel = apiLevel; - PlatformID = platformID; - Framework = framework ?? String.Empty; - Stable = stable; - Supported = !String.IsNullOrEmpty (framework); - Include = include; - } - } - - static class AndroidPlatformExtensions - { - public static void Add (this List list, uint apiLevel, string platformID, string framework, bool stable, string? apiName = null, string? include = null) - { - Add (list, new Version (checked ((int) apiLevel), 0), platformID, framework, stable, apiName, include); - } - - public static void Add (this List list, Version apiLevel, string platformID, string framework, bool stable, string? apiName = null, string? include = null) - { - if (list.Any (p => p.ApiLevel == apiLevel)) - throw new InvalidOperationException ($"Duplicate Android platform, API level {apiLevel}"); - - list.Add (new AndroidPlatform (apiLevel, platformID, framework, stable, apiName, include)); - } - } -} diff --git a/build-tools/xaprepare/xaprepare/Application/GeneratedMonoAndroidProjitemsFile.cs b/build-tools/xaprepare/xaprepare/Application/GeneratedMonoAndroidProjitemsFile.cs deleted file mode 100644 index 31ea06a420c..00000000000 --- a/build-tools/xaprepare/xaprepare/Application/GeneratedMonoAndroidProjitemsFile.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; - -namespace Xamarin.Android.Prepare -{ - class GeneratedMonoAndroidProjitemsFile : GeneratedFile - { - const string FileTop = @" - - - -"; - - const string OutputFileName = "Mono.Android.Apis.projitems"; - - const string FileBottom = @""; - - public GeneratedMonoAndroidProjitemsFile () - : base (Path.Combine (Configurables.Paths.BuildBinDir, OutputFileName)) - {} - - public override void Generate (Context context) - { - using (var fs = File.Open (OutputPath, FileMode.Create)) { - using (var sw = new StreamWriter (fs)) { - GenerateFile (sw); - } - } - } - - void GenerateFile (StreamWriter sw) - { - sw.Write (FileTop); - - sw.WriteLine (" "); - BuildAndroidPlatforms.AllPlatforms.ForEach (androidPlatform => WriteGroupApiInfo (sw, androidPlatform)); - sw.WriteLine (" "); - - sw.Write (FileBottom); - } - - void WriteGroupApiInfo (StreamWriter sw, AndroidPlatform androidPlatform) - { - if (string.IsNullOrWhiteSpace (androidPlatform.ApiName)) { - return; - } - - sw.WriteLine ($" "); - sw.WriteLine ($" {androidPlatform.ApiName}"); - sw.WriteLine ($" {androidPlatform.ApiLevel.Major}"); - sw.WriteLine ($" {androidPlatform.ApiLevel}"); - sw.WriteLine ($" {androidPlatform.PlatformID}"); - sw.WriteLine ($" {androidPlatform.Stable}"); - sw.WriteLine ($" "); - } - } -} \ No newline at end of file diff --git a/build-tools/xaprepare/xaprepare/ConfigAndData/BuildAndroidPlatforms.cs b/build-tools/xaprepare/xaprepare/ConfigAndData/BuildAndroidPlatforms.cs index d2dd2054524..7ead038f419 100644 --- a/build-tools/xaprepare/xaprepare/ConfigAndData/BuildAndroidPlatforms.cs +++ b/build-tools/xaprepare/xaprepare/ConfigAndData/BuildAndroidPlatforms.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; namespace Xamarin.Android.Prepare { @@ -10,47 +9,5 @@ class BuildAndroidPlatforms public static string NdkMinimumAPI => Context.Instance.Properties.GetRequiredValue (KnownProperties.AndroidMinimumDotNetApiLevel); public static string NdkMinimumAPILegacy32 => NdkMinimumAPI; - - public static readonly List AllPlatforms = new List { - new AndroidPlatform (apiName: "", apiLevel: 1, platformID: "1"), - new AndroidPlatform (apiName: "", apiLevel: 2, platformID: "2"), - new AndroidPlatform (apiName: "", apiLevel: 3, platformID: "3"), - new AndroidPlatform (apiName: "Donut", apiLevel: 4, platformID: "4", include: "v1.6"), - new AndroidPlatform (apiName: "Eclair", apiLevel: 5, platformID: "5", include: "v2.0"), - new AndroidPlatform (apiName: "Eclair", apiLevel: 6, platformID: "6", include: "v2.0.1"), - new AndroidPlatform (apiName: "Eclair", apiLevel: 7, platformID: "7", include: "v2.1"), - new AndroidPlatform (apiName: "Froyo", apiLevel: 8, platformID: "8", include: "v2.2"), - new AndroidPlatform (apiName: "", apiLevel: 9, platformID: "9"), - new AndroidPlatform (apiName: "Gingerbread", apiLevel: 10, platformID: "10", include: "v2.3"), - new AndroidPlatform (apiName: "Honeycomb", apiLevel: 11, platformID: "11", include: "v3.0"), - new AndroidPlatform (apiName: "Honeycomb", apiLevel: 12, platformID: "12", include: "v3.1"), - new AndroidPlatform (apiName: "Honeycomb", apiLevel: 13, platformID: "13", include: "v3.2"), - new AndroidPlatform (apiName: "Ice Cream Sandwich", apiLevel: 14, platformID: "14", include: "v4.0"), - new AndroidPlatform (apiName: "Ice Cream Sandwich", apiLevel: 15, platformID: "15", include: "v4.0.3"), - new AndroidPlatform (apiName: "Jelly Bean", apiLevel: 16, platformID: "16", include: "v4.1"), - new AndroidPlatform (apiName: "Jelly Bean", apiLevel: 17, platformID: "17", include: "v4.2"), - new AndroidPlatform (apiName: "Jelly Bean", apiLevel: 18, platformID: "18", include: "v4.3"), - new AndroidPlatform (apiName: "Kit Kat", apiLevel: 19, platformID: "19", include: "v4.4"), - new AndroidPlatform (apiName: "Kit Kat + Wear support", apiLevel: 20, platformID: "20", include: "v4.4.87"), - new AndroidPlatform (apiName: "Lollipop", apiLevel: 21, platformID: "21", include: "v5.0"), - new AndroidPlatform (apiName: "Lollipop", apiLevel: 22, platformID: "22", include: "v5.1"), - new AndroidPlatform (apiName: "Marshmallow", apiLevel: 23, platformID: "23", include: "v6.0"), - new AndroidPlatform (apiName: "Nougat", apiLevel: 24, platformID: "24", include: "v7.0"), - new AndroidPlatform (apiName: "Nougat", apiLevel: 25, platformID: "25", include: "v7.1"), - new AndroidPlatform (apiName: "Oreo", apiLevel: 26, platformID: "26", include: "v8.0"), - new AndroidPlatform (apiName: "Oreo", apiLevel: 27, platformID: "27", include: "v8.1"), - new AndroidPlatform (apiName: "Pie", apiLevel: 28, platformID: "28", include: "v9.0"), - new AndroidPlatform (apiName: "Q", apiLevel: 29, platformID: "29", include: "v10.0"), - new AndroidPlatform (apiName: "R", apiLevel: 30, platformID: "30", include: "v11.0"), - new AndroidPlatform (apiName: "S", apiLevel: 31, platformID: "31", include: "v12.0"), - new AndroidPlatform (apiName: "Sv2", apiLevel: 32, platformID: "32", include: "v12.1"), - new AndroidPlatform (apiName: "Tiramisu", apiLevel: 33, platformID: "33", include: "v13.0", framework: "v13.0"), - new AndroidPlatform (apiName: "UpsideDownCake", apiLevel: 34, platformID: "34", include: "v14.0", framework: "v14.0"), - new AndroidPlatform (apiName: "VanillaIceCream", apiLevel: 35, platformID: "35", include: "v15.0", framework: "v15.0"), - new AndroidPlatform (apiName: "Baklava", apiLevel: 36, platformID: "36", include: "v16.0", framework: "v16.0"), - new AndroidPlatform (apiName: "CANARY", apiLevel: new Version (36, 1), platformID: "36.1", include: "v16.1", framework: "v16.1", stable: true), - new AndroidPlatform (apiName: "CinnamonBun", apiLevel: new Version (37, 0), platformID: "37.0", include: "v17.0", framework: "v17.0", stable: true), - }; - } } diff --git a/build-tools/xaprepare/xaprepare/Steps/Step_GenerateFiles.cs b/build-tools/xaprepare/xaprepare/Steps/Step_GenerateFiles.cs index 255c181ee75..d3671362bc3 100644 --- a/build-tools/xaprepare/xaprepare/Steps/Step_GenerateFiles.cs +++ b/build-tools/xaprepare/xaprepare/Steps/Step_GenerateFiles.cs @@ -76,9 +76,7 @@ protected override async Task Execute (Context context) if (onlyRequired) return null; - var steps = new List { - new GeneratedMonoAndroidProjitemsFile (), - }; + var steps = new List (); AddOSSpecificSteps (context, steps); diff --git a/src/Mono.Android/Mono.Android.Apis.projitems b/src/Mono.Android/Mono.Android.Apis.projitems new file mode 100644 index 00000000000..140c84d053d --- /dev/null +++ b/src/Mono.Android/Mono.Android.Apis.projitems @@ -0,0 +1,244 @@ + + + + + + Donut + 4 + 4.0 + 4 + True + + + Eclair + 5 + 5.0 + 5 + True + + + Eclair + 6 + 6.0 + 6 + True + + + Eclair + 7 + 7.0 + 7 + True + + + Froyo + 8 + 8.0 + 8 + True + + + Gingerbread + 10 + 10.0 + 10 + True + + + Honeycomb + 11 + 11.0 + 11 + True + + + Honeycomb + 12 + 12.0 + 12 + True + + + Honeycomb + 13 + 13.0 + 13 + True + + + Ice Cream Sandwich + 14 + 14.0 + 14 + True + + + Ice Cream Sandwich + 15 + 15.0 + 15 + True + + + Jelly Bean + 16 + 16.0 + 16 + True + + + Jelly Bean + 17 + 17.0 + 17 + True + + + Jelly Bean + 18 + 18.0 + 18 + True + + + Kit Kat + 19 + 19.0 + 19 + True + + + Kit Kat + Wear support + 20 + 20.0 + 20 + True + + + Lollipop + 21 + 21.0 + 21 + True + + + Lollipop + 22 + 22.0 + 22 + True + + + Marshmallow + 23 + 23.0 + 23 + True + + + Nougat + 24 + 24.0 + 24 + True + + + Nougat + 25 + 25.0 + 25 + True + + + Oreo + 26 + 26.0 + 26 + True + + + Oreo + 27 + 27.0 + 27 + True + + + Pie + 28 + 28.0 + 28 + True + + + Q + 29 + 29.0 + 29 + True + + + R + 30 + 30.0 + 30 + True + + + S + 31 + 31.0 + 31 + True + + + Sv2 + 32 + 32.0 + 32 + True + + + Tiramisu + 33 + 33.0 + 33 + True + + + UpsideDownCake + 34 + 34.0 + 34 + True + + + VanillaIceCream + 35 + 35.0 + 35 + True + + + Baklava + 36 + 36.0 + 36 + True + + + CANARY + 36 + 36.1 + 36.1 + True + + + CinnamonBun + 37 + 37.0 + 37.0 + True + + + \ No newline at end of file diff --git a/src/Mono.Android/Mono.Android.targets b/src/Mono.Android/Mono.Android.targets index 6f2fab65325..5839eb08327 100644 --- a/src/Mono.Android/Mono.Android.targets +++ b/src/Mono.Android/Mono.Android.targets @@ -4,7 +4,7 @@ - + @@ -169,7 +169,7 @@ diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.targets index 2b15917423a..b2547a30810 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.targets @@ -163,7 +163,7 @@