diff --git a/Configuration.Override.props.in b/Configuration.Override.props.in
index f7575b085a2..f25a5738995 100644
--- a/Configuration.Override.props.in
+++ b/Configuration.Override.props.in
@@ -6,11 +6,11 @@
kept consistent with each other, lest Bad Things Happen™
-->
- 31
+ 32
- v12.0
+ v12.1
- 31
+ 32
+ 31
21
$(AndroidFirstApiLevel)
- 31
+ 32
$(AndroidLatestStableApiLevel)
- v12.0
+ v12.1
32
- Sv2
- v12.0.99
+ 32
+ v12.1
$(AndroidLatestStableApiLevel)
$(AndroidLatestStablePlatformId)
@@ -118,16 +120,24 @@
arm64-v8a;x86_64
$(AllSupported32BitTargetAndroidAbis);$(AllSupported64BitTargetAndroidAbis)
- f6d24b187cc6bd534c6c37604205171784ac5621.
- 91936d4ee3ccc839f0addd53c9ebf087b1e39251.
+ 5219cc671e844de73762e969ace287c29d2e14cd.
+ 210b77e4bc623bd4cdda4dae790048f227972bd2.
$(XABuildToolsPackagePrefixMacOS)
$(XABuildToolsPackagePrefixWindows)
- 30.0.3
- 30.0.3
+ 32
+ 32.0.0
+
+ f6d24b187cc6bd534c6c37604205171784ac5621.
+ 91936d4ee3ccc839f0addd53c9ebf087b1e39251.
+
+ $(XABuildTools30PackagePrefixMacOS)
+ $(XABuildTools30PackagePrefixWindows)
+ 30.0.3
+ 30.0.3
e8b2b4cbe47c728c1e54c5f524440b52d4e1a33c.
31.0.3
False
diff --git a/Documentation/workflow/HowToAddNewApiLevel.md b/Documentation/workflow/HowToAddNewApiLevel.md
index d8fdd239207..07665812f19 100644
--- a/Documentation/workflow/HowToAddNewApiLevel.md
+++ b/Documentation/workflow/HowToAddNewApiLevel.md
@@ -54,13 +54,174 @@ acceptable "breaks":
When Google announces that the APIs are frozen, additional work such as enumification is needed.
----- Somewhat outdated docs below, update when we do this year's stabilization ----
+There have been many, many attempts to "automate" the enumification process in the past, to varying
+degrees of success. The main problem is that no automated process is going to be perfect, so
+they all rely on a human verifying and modifying the results.
+
+However this verification process is long and tedious. Doing it correctly requires almost as much
+effort as doing the full process manually. Thus it generally isn't done correctly and many errors
+slip in, leaving our users with bad bindings that are hard to fix in the future without breaking API.
+
+Currently we have taken the opposite approach and do the process completely manually, but we
+have invested in tooling to make the process as easy as possible.
+
+This tooling is BindingStudio:
+https://github.com/jpobst/BindingStudio
+
+It's a Winforms app, so it only runs on Windows. It's ugly as sin, and has very poor UX. However,
+it prompts you with the exact decisions you need to make, and handles as much dirty work as possible,
+allowing enumification to be done in a few days.
+
+### Extract constants from API
+
+Using BindingStudio:
+
+- Update `CURRENT_API_LEVEL` in MainForm.cs
+- Choose `Tools` -> `Add API Level Constants`
+ - Fill in existing `map.csv`: `xamarin-android/src/Mono.Android/map.csv`
+ - Fill in new `api.xml`: ex: `xamarin-android/src/Mono.Android/obj/Debug/net6.0/android-32/mcw/api.xml`
+- Choose `File` -> `Save`
+
+This adds all the new possible constants from the API level to `map.csv`. They will be
+marked with a `?` indicating no determination has been made if they should be enumified or not.
+
+Example:
+```
+?,32,android/media/Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_MULTICHANNEL,1,,,,
+?,32,android/media/Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE,0,,,,
+?,32,android/media/Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_OTHER,-1,,,,
+```
+
+### Creating enums
+
+Using BindingStudio:
+
+- Choose `File` -> `Open Constant Map`
+- Choose existing `map.csv`: `xamarin-android/src/Mono.Android/map.csv`
+
+The left tree view will be populated with every type that has possible constants that require
+a decision. Clicking a tree node will show the grid of all constants in the type. The ones
+that need to be handled are the ones with `Action` = `None`. (The others are shown because
+sometimes the correct action is to add a new constant to an existing enum.)
+
+Select the row(s) containing the constants you want to act on. (Use Control and Shift to select
+multiple rows.) There are 3 possible options for constants:
+
+1) Ignore
+
+If the constant(s) should not be part of an enum (like `Math.PI`), click the `Ignore` toolbar
+button to leave them as constants.
+
+2) Add to existing enum
+
+If the constant(s) should be added to an existing enum:
+- Click the `Add to existing enum` toolbar button.
+- The dialog will show all other enums in this type
+- Choose the existing enum to add the new constant(s) to
+- After accepting the dialog, you may need to click the grid to cause it to refresh
+- The constant(s) will be marked as `Enumify` with the `EnumFullType` you specified
+- The enum member names may need to be tweaked by changing the `EnumMember` column
+
+3) Create a new enum
+
+If the constant(s) should be added to a brand new enum:
+- Click the `Create Enum` toolbar button
+- In the dialog, a suggested enum namespace and name will be pre-populated. This may need to be
+ tweaked as needed.
+ - Mark `Is Flags` if this should be a `[Flags]` enum type.
+- After accepting the dialog, you may need to click the grid to cause it to refresh
+- The constant(s) will be marked as `Enumify` with the `EnumFullType` you specified
+- The enum member names may need to be tweaked by changing the `EnumMember` column
+
+Once decisions have been made for all new constants in a type, use the left tree view to move
+to the next type. You should periodically save your progress with `File` -> `Save` in case
+BindingStudio crashes.
+
+The left tree view can be updated by saving and reopening the `map.csv` file.
+
+### Extract methods that possibly need enums
-5) enumification
+Using BindingStudio:
-See `build-tools/enumification-helpers/README`. Usually it takes many days to complete...
+- Update the file paths in `MainForm.FindAPILevelMethodsToolStripMenuItem_Click`
+- Run BindingStudio and choose `Tools` -> `Find API Level Methods`
-Enumification work can be delayed and only the final API has to be enumified.
+This will create a file of every method in the new API level that takes an `int` as a parameter
+or returns an `int` as a return value. Each method will be marked with a `?` in the file
+to indicate a decision needs to be made to ignore it or map it to an enum.
+
+Example:
+```
+?,32,android/media,AudioAttributes,getSpatializationBehavior,return,
+?,32,android/media,AudioAttributes$Builder,setSpatializationBehavior,sb,
+```
+
+### Mapping methods
+
+Using BindingStudio:
+
+- Choose `File` -> `Open Constant Map`
+ - Choose existing `map.csv`: `xamarin-android/src/Mono.Android/map.csv`
+- Choose `File` -> `Open Method Map`
+ - Choose the new `.csv` created in the previous step
+
+The left tree will populate with every method that possibly should be enumified and
+needs a decision to be made. Clicking a method shows the Android documentation for
+the method to help make the decision, as well as an area to input the decision.
+
+Note a method may show up multiple times, once for each parameter or return type
+(Parameter Name = "return") that is an int. Each one may require a different action.
+
+There are 3 possible options for a method parameter/return type:
+
+1) Unknown
+
+You don't how to handle this method currently, so leaving it in the initial state
+of "Unknown" will leave it alone until a decision can be made.
+
+2) Ignore
+
+The method parameter/return type should remain an `int` and not be converted to an enum.
+
+Ex:
+```
+int Add (int value1, int value2) { ... }
+```
+
+Click the "Ignore" radio button and then the "Save" button.
+
+3) Enumify
+
+The method parameter/return type should be changed to an enum.
+
+Ex:
+```
+void AudioAttributesBuilder.SetSpatializationBehavior (int sb) { ... }
+```
+
+- Choose the "Enumify" radio option
+- Use the DropDown in the middle to select the enum to use
+ - When selected, the members of that enum will be shown in the box below the enum
+- Alternatively, search for a enum by enum member name using the Search box in the right
+ - If desired enum is found, clicking it will populate dropdown
+- Click "Save"
+
+Use `File` -> `Save` to save your work often!
+
+### Finishing the method map
+
+The official `methodmap.csv` uses a slightly different format than the one used for enumification.
+
+Using BindingStudio:
+- Ensure the "new api level method map" CSV file is loaded.
+- Choose `Tools` -> `Export Final Method Map`
+- Choose a temporary file name
+- Open the temporary file, copy the contents to the bottom of the official:
+ - xamarin-android/src/Mono.Android/methodmap.csv
+
+Congrats! Enumification is complete!
+
+---- Somewhat outdated docs below, update when we do this year's stabilization ----
6) new AndroidManifest.xml elements and attributes
diff --git a/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/CheckApiCompatibility.cs b/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/CheckApiCompatibility.cs
index 263f6ba221f..8f8fc19b3b6 100644
--- a/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/CheckApiCompatibility.cs
+++ b/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/CheckApiCompatibility.cs
@@ -29,7 +29,7 @@ public sealed class CheckApiCompatibility : Task
{ "v10.0", "v9.0" },
{ "v11.0", "v10.0" },
{ "v12.0", "v11.0" },
- { "v12.0.99", "v12.0" },
+ { "v12.1", "v12.0" },
};
static readonly string assemblyToValidate = "Mono.Android.dll";
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 f6a91bfd706..9d3d6d0e0ae 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
@@ -31,9 +31,15 @@ public class GenerateSupportedPlatforms : Task
[Required]
public int MinimumApiLevel { get; set; }
+ ///
+ /// Default value for $(TargetPlatformVersion), defaults to MaxStableVersion.ApiLevel
+ ///
+ public int TargetApiLevel { get; set; }
+
public override bool Execute ()
{
var versions = new AndroidVersions (AndroidApiInfo.Select (ToVersion));
+ int targetApiLevel = TargetApiLevel > 0 ? TargetApiLevel : versions.MaxStableVersion.ApiLevel;
var settings = new XmlWriterSettings {
OmitXmlDeclaration = true,
Indent = true,
@@ -56,7 +62,7 @@ public override bool Execute ()
writer.WriteEndElement (); //
writer.WriteStartElement ("TargetPlatformVersion");
writer.WriteAttributeString ("Condition", " '$(TargetPlatformVersion)' == '' ");
- writer.WriteString (versions.MaxStableVersion.ApiLevel.ToString ("0.0", CultureInfo.InvariantCulture));
+ writer.WriteString (targetApiLevel.ToString ("0.0", CultureInfo.InvariantCulture));
writer.WriteEndElement (); //
writer.WriteStartElement ("AndroidMinimumSupportedApiLevel");
writer.WriteAttributeString ("Condition", " '$(AndroidMinimumSupportedApiLevel)' == '' ");
diff --git a/build-tools/api-merge/merge-configuration.xml b/build-tools/api-merge/merge-configuration.xml
index d79b02c90cb..6cc9ce1595d 100644
--- a/build-tools/api-merge/merge-configuration.xml
+++ b/build-tools/api-merge/merge-configuration.xml
@@ -20,7 +20,7 @@
-
+
@@ -36,6 +36,6 @@
-
+
\ No newline at end of file
diff --git a/build-tools/api-xml-adjuster/Makefile b/build-tools/api-xml-adjuster/Makefile
index d319d763dad..9a75ef399c1 100644
--- a/build-tools/api-xml-adjuster/Makefile
+++ b/build-tools/api-xml-adjuster/Makefile
@@ -17,7 +17,7 @@ API_XML_TOOL = $(BUILDBIN)/api-xml-adjuster.exe
RUNTIME = mono --debug
RUN_CLASS_PARSE = $(RUNTIME) $(CLASS_PARSE)
RUN_API_XML_TOOL = $(RUNTIME) $(API_XML_TOOL)
-API_LEVELS = 10 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Sv2
+API_LEVELS = 10 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
XML_OUTPUT_DIR = .
diff --git a/build-tools/create-packs/Directory.Build.targets b/build-tools/create-packs/Directory.Build.targets
index c3e1d2bf301..8d2afd0f773 100644
--- a/build-tools/create-packs/Directory.Build.targets
+++ b/build-tools/create-packs/Directory.Build.targets
@@ -120,6 +120,8 @@
<_NuGetSources Include="$(OutputPath.TrimEnd('\'))" />
<_PreviewPacks Condition=" '$(AndroidLatestStableApiLevel)' != '$(AndroidLatestUnstableApiLevel)' " Include="$(XamarinAndroidSourcePath)bin\Build$(Configuration)\nuget-unsigned\Microsoft.Android.Ref.$(AndroidLatestUnstableApiLevel).*.nupkg" />
<_InstallArguments Include="android-aot" />
+
+ <_InstallArguments Include="android-32" />
<_InstallArguments Include="android-$(AndroidLatestUnstableApiLevel)" Condition=" '@(_PreviewPacks->Count())' != '0' " />
<_InstallArguments Include="--skip-manifest-update" />
<_InstallArguments Include="--verbosity diag" />
diff --git a/build-tools/create-packs/Microsoft.Android.Sdk.proj b/build-tools/create-packs/Microsoft.Android.Sdk.proj
index a6dd0380df2..b1c541d17dd 100644
--- a/build-tools/create-packs/Microsoft.Android.Sdk.proj
+++ b/build-tools/create-packs/Microsoft.Android.Sdk.proj
@@ -120,18 +120,23 @@ WARNING: DO NOT MODIFY this file unless you are knowledgeable about MSBuild and
$(AndroidPackVersionLong)
$(AndroidPackVersionLong)
- <_AndroidRuntimePackId Condition=" '%24(TargetPlatformVersion)' != '$(AndroidLatestUnstableApiLevel).0' ">$(AndroidLatestStableApiLevel)
- <_AndroidRuntimePackId Condition=" '%24(TargetPlatformVersion)' == '$(AndroidLatestUnstableApiLevel).0' ">$(AndroidLatestUnstableApiLevel)
+
+
+ <_AndroidRuntimePackId>31
+ <_AndroidRuntimePackVersion>31.0.101-preview.11.117
+
+
+ <_AndroidRuntimePackId Condition=" '%24(_AndroidRuntimePackId)' == '' ">$(AndroidLatestStableApiLevel)
+ <_AndroidRuntimePackVersion Condition=" '%24(_AndroidRuntimePackVersion)' == '' ">**FromWorkload**
ArchAPILevels = new Dictionary (StringComparer.Ordinal) {
diff --git a/build-tools/xaprepare/xaprepare/Application/KnownProperties.cs b/build-tools/xaprepare/xaprepare/Application/KnownProperties.cs
index 71fa97df191..4cdce72dd67 100644
--- a/build-tools/xaprepare/xaprepare/Application/KnownProperties.cs
+++ b/build-tools/xaprepare/xaprepare/Application/KnownProperties.cs
@@ -5,6 +5,7 @@ static class KnownProperties
public const string AndroidCmakeUrlPrefix = "AndroidCmakeUrlPrefix";
public const string AndroidCmakeVersion = "AndroidCmakeVersion";
public const string AndroidCmakeVersionPath = "AndroidCmakeVersionPath";
+ public const string AndroidDefaultTargetDotnetApiLevel = "AndroidDefaultTargetDotnetApiLevel";
public const string AndroidLatestStableApiLevel = "AndroidLatestStableApiLevel";
public const string AndroidLatestStableFrameworkVersion = "AndroidLatestStableFrameworkVersion";
public const string AndroidMxeFullPath = "AndroidMxeFullPath";
@@ -56,6 +57,12 @@ static class KnownProperties
public const string XABuildToolsPackagePrefixWindows = "XABuildToolsPackagePrefixWindows";
public const string XABuildToolsPackagePrefixLinux = "XABuildToolsPackagePrefixLinux";
public const string XABuildToolsPackagePrefix = "XABuildToolsPackagePrefix";
+ public const string XABuildTools30Folder = "XABuildTools30Folder";
+ public const string XABuildTools30Version = "XABuildTools30Version";
+ public const string XABuildTools30PackagePrefixMacOS = "XABuildTools30PackagePrefixMacOS";
+ public const string XABuildTools30PackagePrefixWindows = "XABuildTools30PackagePrefixWindows";
+ public const string XABuildTools30PackagePrefixLinux = "XABuildTools30PackagePrefixLinux";
+ public const string XABuildTools30PackagePrefix = "XABuildTools30PackagePrefix";
public const string XABinRelativeInstallPrefix = "XABinRelativeInstallPrefix";
public const string XAInstallPrefix = "XAInstallPrefix";
public const string XAPlatformToolsVersion = "XAPlatformToolsVersion";
diff --git a/build-tools/xaprepare/xaprepare/Application/Properties.Defaults.cs.in b/build-tools/xaprepare/xaprepare/Application/Properties.Defaults.cs.in
index f00e282ea4a..1da4657579d 100644
--- a/build-tools/xaprepare/xaprepare/Application/Properties.Defaults.cs.in
+++ b/build-tools/xaprepare/xaprepare/Application/Properties.Defaults.cs.in
@@ -9,6 +9,7 @@ namespace Xamarin.Android.Prepare
properties.Add (KnownProperties.AndroidCmakeUrlPrefix, StripQuotes ("@AndroidCmakeUrlPrefix@"));
properties.Add (KnownProperties.AndroidCmakeVersion, StripQuotes ("@AndroidCmakeVersion@"));
properties.Add (KnownProperties.AndroidCmakeVersionPath, StripQuotes (@"@AndroidCmakeVersionPath@"));
+ properties.Add (KnownProperties.AndroidDefaultTargetDotnetApiLevel, StripQuotes ("@AndroidDefaultTargetDotnetApiLevel@"));
properties.Add (KnownProperties.AndroidLatestStableApiLevel, StripQuotes ("@AndroidLatestStableApiLevel@"));
properties.Add (KnownProperties.AndroidLatestStableFrameworkVersion, StripQuotes ("@AndroidLatestStableFrameworkVersion@"));
properties.Add (KnownProperties.AndroidMxeFullPath, StripQuotes (@"@AndroidMxeFullPath@"));
@@ -60,6 +61,12 @@ namespace Xamarin.Android.Prepare
properties.Add (KnownProperties.XABuildToolsPackagePrefixWindows, StripQuotes ("@XABuildToolsPackagePrefixWindows@"));
properties.Add (KnownProperties.XABuildToolsPackagePrefixLinux, StripQuotes ("@XABuildToolsPackagePrefixLinux@"));
properties.Add (KnownProperties.XABuildToolsPackagePrefix, StripQuotes ("@XABuildToolsPackagePrefix@"));
+ properties.Add (KnownProperties.XABuildTools30Folder, StripQuotes (@"@XABuildTools30Folder@"));
+ properties.Add (KnownProperties.XABuildTools30Version, StripQuotes ("@XABuildTools30Version@"));
+ properties.Add (KnownProperties.XABuildTools30PackagePrefixMacOS, StripQuotes ("@XABuildTools30PackagePrefixMacOS@"));
+ properties.Add (KnownProperties.XABuildTools30PackagePrefixWindows, StripQuotes ("@XABuildTools30PackagePrefixWindows@"));
+ properties.Add (KnownProperties.XABuildTools30PackagePrefixLinux, StripQuotes ("@XABuildTools30PackagePrefixLinux@"));
+ properties.Add (KnownProperties.XABuildTools30PackagePrefix, StripQuotes ("@XABuildTools30PackagePrefix@"));
properties.Add (KnownProperties.XABinRelativeInstallPrefix, StripQuotes (@"@XABinRelativeInstallPrefix@"));
properties.Add (KnownProperties.XAInstallPrefix, StripQuotes (@"@XAInstallPrefix@"));
properties.Add (KnownProperties.XAPlatformToolsVersion, StripQuotes ("@XAPlatformToolsVersion@"));
diff --git a/build-tools/xaprepare/xaprepare/ConfigAndData/BuildAndroidPlatforms.cs b/build-tools/xaprepare/xaprepare/ConfigAndData/BuildAndroidPlatforms.cs
index 47a8edf7276..b388d81e2ed 100644
--- a/build-tools/xaprepare/xaprepare/ConfigAndData/BuildAndroidPlatforms.cs
+++ b/build-tools/xaprepare/xaprepare/ConfigAndData/BuildAndroidPlatforms.cs
@@ -40,7 +40,7 @@ class BuildAndroidPlatforms
new AndroidPlatform (apiName: "Q", apiLevel: 29, platformID: "29", include: "v10.0", framework: "v10.0"),
new AndroidPlatform (apiName: "R", apiLevel: 30, platformID: "30", include: "v11.0", framework: "v11.0"),
new AndroidPlatform (apiName: "S", apiLevel: 31, platformID: "31", include: "v12.0", framework: "v12.0"),
- new AndroidPlatform (apiName: "Sv2", apiLevel: 32, platformID: "Sv2", include: "v12.0.99",framework: "v12.0.99", stable: false),
+ new AndroidPlatform (apiName: "Sv2", apiLevel: 32, platformID: "32", include: "v12.1", framework: "v12.1"),
};
// These are here until we can drop "legacy" targets and use only .NET6+
diff --git a/build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/AndroidToolchain.cs b/build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/AndroidToolchain.cs
index 31b2a3eded5..66293dd0e01 100644
--- a/build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/AndroidToolchain.cs
+++ b/build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/AndroidToolchain.cs
@@ -23,8 +23,11 @@ public AndroidToolchain ()
string EmulatorVersion = GetRequiredProperty (KnownProperties.EmulatorVersion);
string EmulatorPkgRevision = GetRequiredProperty (KnownProperties.EmulatorPkgRevision);
string XABuildToolsFolder = GetRequiredProperty (KnownProperties.XABuildToolsFolder);
- string XABuildToolsVersion = GetRequiredProperty (KnownProperties.XABuildToolsVersion);
- string XABuildToolsPackagePrefix = Context.Instance.Properties [KnownProperties.XABuildToolsPackagePrefix] ?? String.Empty;
+ string XABuildToolsVersion = GetRequiredProperty (KnownProperties.XABuildToolsVersion);
+ string XABuildToolsPackagePrefix = Context.Instance.Properties [KnownProperties.XABuildToolsPackagePrefix] ?? String.Empty;
+ string XABuildTools30Folder = GetRequiredProperty (KnownProperties.XABuildTools30Folder);
+ string XABuildTools30Version = GetRequiredProperty (KnownProperties.XABuildTools30Version);
+ string XABuildTools30PackagePrefix = Context.Instance.Properties [KnownProperties.XABuildTools30PackagePrefix] ?? String.Empty;
string XAPlatformToolsVersion = GetRequiredProperty (KnownProperties.XAPlatformToolsVersion);
string XAPlatformToolsPackagePrefix = Context.Instance.Properties [KnownProperties.XAPlatformToolsPackagePrefix] ?? String.Empty;
@@ -63,7 +66,7 @@ public AndroidToolchain ()
new AndroidPlatformComponent ("platform-29_r01", apiLevel: "29", pkgRevision: "1"),
new AndroidPlatformComponent ("platform-30_r01", apiLevel: "30", pkgRevision: "1"),
new AndroidPlatformComponent ("platform-31_r01", apiLevel: "31", pkgRevision: "1"),
- new AndroidPlatformComponent ("platform-Sv2_r01", apiLevel: "Sv2", pkgRevision: "1"),
+ new AndroidPlatformComponent ("platform-32_r01", apiLevel: "32", pkgRevision: "1"),
new AndroidToolchainComponent ("sources-31_r01", destDir: Path.Combine ("platforms", $"android-31", "src"), pkgRevision: "1", dependencyType: AndroidToolchainComponentType.BuildDependency),
@@ -72,6 +75,7 @@ public AndroidToolchain ()
new AndroidToolchainComponent ($"x86_64-29_r07-{osTag}", destDir: Path.Combine ("system-images", "android-29", "default", "x86_64"), relativeUrl: new Uri ("sys-img/android/", UriKind.Relative), pkgRevision: "7", dependencyType: AndroidToolchainComponentType.EmulatorDependency),
new AndroidToolchainComponent ($"android-ndk-r{AndroidNdkVersion}-{osTag}", destDir: AndroidNdkDirectory, pkgRevision: AndroidPkgRevision),
new AndroidToolchainComponent ($"{XABuildToolsPackagePrefix}build-tools_r{XABuildToolsVersion}-{altOsTag}", destDir: Path.Combine ("build-tools", XABuildToolsFolder), isMultiVersion: true),
+ new AndroidToolchainComponent ($"{XABuildTools30PackagePrefix}build-tools_r{XABuildTools30Version}-{altOsTag}", destDir: Path.Combine ("build-tools", XABuildTools30Folder), isMultiVersion: true),
new AndroidToolchainComponent ($"commandlinetools-{cltOsTag}-{CommandLineToolsVersion}",
destDir: Path.Combine ("cmdline-tools", CommandLineToolsFolder), isMultiVersion: true),
new AndroidToolchainComponent ($"{XAPlatformToolsPackagePrefix}platform-tools_r{XAPlatformToolsVersion}-{osTag}", destDir: "platform-tools", pkgRevision: XAPlatformToolsVersion),
diff --git a/build-tools/xaprepare/xaprepare/Steps/Step_GenerateFiles.cs b/build-tools/xaprepare/xaprepare/Steps/Step_GenerateFiles.cs
index c27d610e1f2..88d629fa225 100644
--- a/build-tools/xaprepare/xaprepare/Steps/Step_GenerateFiles.cs
+++ b/build-tools/xaprepare/xaprepare/Steps/Step_GenerateFiles.cs
@@ -166,6 +166,7 @@ GeneratedFile Get_XABuildConfig_cs (Context context)
{ "@NDK_X86_API@", BuildAndroidPlatforms.NdkMinimumAPI [AbiNames.TargetJit.AndroidX86].ToString () },
{ "@NDK_X86_64_API@", BuildAndroidPlatforms.NdkMinimumAPI [AbiNames.TargetJit.AndroidX86_64].ToString () },
{ "@XA_SUPPORTED_ABIS@", context.Properties.GetRequiredValue (KnownProperties.AndroidSupportedTargetJitAbis).Replace (':', ';') },
+ { "@ANDROID_DEFAULT_TARGET_DOTNET_API_LEVEL@", context.Properties.GetRequiredValue (KnownProperties.AndroidDefaultTargetDotnetApiLevel) },
{ "@ANDROID_LATEST_STABLE_API_LEVEL@", context.Properties.GetRequiredValue (KnownProperties.AndroidLatestStableApiLevel) },
};
diff --git a/build-tools/xaprepare/xaprepare/Steps/Step_Get_Android_BuildTools.cs b/build-tools/xaprepare/xaprepare/Steps/Step_Get_Android_BuildTools.cs
index ee0cff61fb5..ffebbf4e2cb 100644
--- a/build-tools/xaprepare/xaprepare/Steps/Step_Get_Android_BuildTools.cs
+++ b/build-tools/xaprepare/xaprepare/Steps/Step_Get_Android_BuildTools.cs
@@ -21,6 +21,17 @@ public Step_Get_Android_BuildTools ()
packages.Add ((package: $"build-tools_r{XABuildToolsVersion}-macosx.zip", prefix: XABuildToolsPackagePrefixMacOS));
packages.Add ((package: $"build-tools_r{XABuildToolsVersion}-windows.zip", prefix: XABuildToolsPackagePrefixWindows));
packages.Add ((package: $"build-tools_r{XABuildToolsVersion}-linux.zip", prefix: XABuildToolsPackagePrefixLinux));
+
+ // build-tools 30, for DX tests
+ string XABuildTools30Version = Context.Instance.Properties [KnownProperties.XABuildTools30Version] ?? String.Empty;
+ string XABuildTools30PackagePrefixMacOS = Context.Instance.Properties [KnownProperties.XABuildTools30PackagePrefixMacOS] ?? string.Empty;
+ string XABuildTools30PackagePrefixWindows = Context.Instance.Properties [KnownProperties.XABuildTools30PackagePrefixWindows] ?? string.Empty;
+ string XABuildTools30PackagePrefixLinux = Context.Instance.Properties [KnownProperties.XABuildTools30PackagePrefixLinux] ?? string.Empty;
+ if (!string.IsNullOrEmpty (XABuildTools30Version)) {
+ packages.Add ((package: $"build-tools_r{XABuildTools30Version}-macosx.zip", prefix: XABuildTools30PackagePrefixMacOS));
+ packages.Add ((package: $"build-tools_r{XABuildTools30Version}-windows.zip", prefix: XABuildTools30PackagePrefixWindows));
+ packages.Add ((package: $"build-tools_r{XABuildTools30Version}-linux.zip", prefix: XABuildTools30PackagePrefixLinux));
+ }
}
protected override async Task Execute (Context context)
diff --git a/build-tools/xaprepare/xaprepare/xaprepare.targets b/build-tools/xaprepare/xaprepare/xaprepare.targets
index 1921c976a9f..60d7bcae915 100644
--- a/build-tools/xaprepare/xaprepare/xaprepare.targets
+++ b/build-tools/xaprepare/xaprepare/xaprepare.targets
@@ -43,6 +43,7 @@
+
@@ -93,6 +94,12 @@
+
+
+
+
+
+
diff --git a/src/Mono.Android/Profiles/api-Sv2.params.txt b/src/Mono.Android/Profiles/api-32.params.txt
similarity index 99%
rename from src/Mono.Android/Profiles/api-Sv2.params.txt
rename to src/Mono.Android/Profiles/api-32.params.txt
index 02708bec630..725b0bf661d 100644
--- a/src/Mono.Android/Profiles/api-Sv2.params.txt
+++ b/src/Mono.Android/Profiles/api-32.params.txt
@@ -6856,6 +6856,9 @@ package android.hardware.camera2.params
copyElements(int[] destination, int offset)
equals(java.lang.Object obj)
getElement(int column, int row)
+ class DeviceStateSensorOrientationMap
+ equals(java.lang.Object obj)
+ getSensorOrientation(long deviceState)
class ExtensionSessionConfiguration
#ctor(int extension, java.util.List outputs, java.util.concurrent.Executor executor, android.hardware.camera2.CameraExtensionSession.StateCallback listener)
class InputConfiguration
@@ -18985,12 +18988,12 @@ package android.view
interface ActionProvider.VisibilityListener
onActionProviderVisibilityChanged(boolean isVisible)
interface AttachedSurfaceControl
- addOnSurfaceTransformHintChangedListener(android.view.AttachedSurfaceControl.OnSurfaceTransformHintChangedListener listener)
+ addOnBufferTransformHintChangedListener(android.view.AttachedSurfaceControl.OnBufferTransformHintChangedListener listener)
applyTransactionOnDraw(android.view.SurfaceControl.Transaction t)
buildReparentTransaction(android.view.SurfaceControl child)
- removeOnSurfaceTransformHintChangedListener(android.view.AttachedSurfaceControl.OnSurfaceTransformHintChangedListener listener)
- interface AttachedSurfaceControl.OnSurfaceTransformHintChangedListener
- onSurfaceTransformHintChanged(int hint)
+ removeOnBufferTransformHintChangedListener(android.view.AttachedSurfaceControl.OnBufferTransformHintChangedListener listener)
+ interface AttachedSurfaceControl.OnBufferTransformHintChangedListener
+ onBufferTransformHintChanged(int hint)
class Choreographer
postFrameCallback(android.view.Choreographer.FrameCallback callback)
postFrameCallbackDelayed(android.view.Choreographer.FrameCallback callback, long delayMillis)
diff --git a/src/Mono.Android/map.csv b/src/Mono.Android/map.csv
index cb80905c0b0..33872554b8f 100644
--- a/src/Mono.Android/map.csv
+++ b/src/Mono.Android/map.csv
@@ -3418,6 +3418,8 @@ A,0,,0,Android.Media.AudioFlags,None,,
E,21,android/media/AudioAttributes.FLAG_AUDIBILITY_ENFORCED,1,Android.Media.AudioFlags,AudibilityEnforced,keep,
E,21,android/media/AudioAttributes.FLAG_HW_AV_SYNC,16,Android.Media.AudioFlags,HwAvSync,keep,
E,24,android/media/AudioAttributes.FLAG_LOW_LATENCY,256,Android.Media.AudioFlags,LowLatency,keep,
+E,32,android/media/AudioAttributes.SPATIALIZATION_BEHAVIOR_AUTO,0,Android.Media.AudioSpatializationBehavior,Auto,remove,
+E,32,android/media/AudioAttributes.SPATIALIZATION_BEHAVIOR_NEVER,1,Android.Media.AudioSpatializationBehavior,Never,remove,
E,21,android/media/AudioAttributes.USAGE_ALARM,4,Android.Media.AudioUsageKind,Alarm,keep,
E,21,android/media/AudioAttributes.USAGE_ASSISTANCE_ACCESSIBILITY,11,Android.Media.AudioUsageKind,AssistanceAccessibility,keep,
E,21,android/media/AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE,12,Android.Media.AudioUsageKind,AssistanceNavigationGuidance,keep,
@@ -3490,24 +3492,45 @@ E,10,android/media/AudioFormat.CHANNEL_IN_Z_AXIS,8192,Android.Media.ChannelIn,ZA
I,0,android/media/AudioFormat.CHANNEL_INVALID,0,,,,
A,0,,0,Android.Media.ChannelOut,None,,
E,10,android/media/AudioFormat.CHANNEL_OUT_5POINT1,252,Android.Media.ChannelOut,FivePointOne,keep,
-E,10,android/media/AudioFormat.CHANNEL_OUT_7POINT1,1020,Android.Media.ChannelOut,SevenPointOne,keep,
+E,32,android/media/AudioFormat.CHANNEL_OUT_5POINT1POINT2,3145980,Android.Media.ChannelOut,FivePointOnePointTwo,remove,
+E,32,android/media/AudioFormat.CHANNEL_OUT_5POINT1POINT4,737532,Android.Media.ChannelOut,FivePointOnePointFour,remove,
+E,10,android/media/AudioFormat.CHANNEL_OUT_7POINT1,1020,Android.Media.ChannelOut,SevenPointOne,remove,
E,23,android/media/AudioFormat.CHANNEL_OUT_7POINT1_SURROUND,6396,Android.Media.ChannelOut,C7point1Surround,keep,
+E,32,android/media/AudioFormat.CHANNEL_OUT_7POINT1POINT2,3152124,Android.Media.ChannelOut,SevenPointOnePointTwo,remove,
+E,32,android/media/AudioFormat.CHANNEL_OUT_7POINT1POINT4,743676,Android.Media.ChannelOut,SevenPointOnePointFour,remove,
+E,32,android/media/AudioFormat.CHANNEL_OUT_9POINT1POINT4,202070268,Android.Media.ChannelOut,NinePointOnePointFour,remove,
+E,32,android/media/AudioFormat.CHANNEL_OUT_9POINT1POINT6,205215996,Android.Media.ChannelOut,NinePointOnePointSix,remove,
E,10,android/media/AudioFormat.CHANNEL_OUT_BACK_CENTER,1024,Android.Media.ChannelOut,BackCenter,keep,
E,10,android/media/AudioFormat.CHANNEL_OUT_BACK_LEFT,64,Android.Media.ChannelOut,BackLeft,keep,
E,10,android/media/AudioFormat.CHANNEL_OUT_BACK_RIGHT,128,Android.Media.ChannelOut,BackRight,keep,
+E,32,android/media/AudioFormat.CHANNEL_OUT_BOTTOM_FRONT_CENTER,8388608,Android.Media.ChannelOut,BottomFrontCenter,remove,
+E,32,android/media/AudioFormat.CHANNEL_OUT_BOTTOM_FRONT_LEFT,4194304,Android.Media.ChannelOut,BottomFrontLeft,remove,
+E,32,android/media/AudioFormat.CHANNEL_OUT_BOTTOM_FRONT_RIGHT,16777216,Android.Media.ChannelOut,BottomFrontRight,remove,
E,10,android/media/AudioFormat.CHANNEL_OUT_DEFAULT,1,Android.Media.ChannelOut,Default,keep,
E,10,android/media/AudioFormat.CHANNEL_OUT_FRONT_CENTER,16,Android.Media.ChannelOut,FrontCenter,keep,
E,10,android/media/AudioFormat.CHANNEL_OUT_FRONT_LEFT,4,Android.Media.ChannelOut,FrontLeft,keep,
E,10,android/media/AudioFormat.CHANNEL_OUT_FRONT_LEFT_OF_CENTER,256,Android.Media.ChannelOut,FrontLeftOfCenter,keep,
E,10,android/media/AudioFormat.CHANNEL_OUT_FRONT_RIGHT,8,Android.Media.ChannelOut,FrontRight,keep,
E,10,android/media/AudioFormat.CHANNEL_OUT_FRONT_RIGHT_OF_CENTER,512,Android.Media.ChannelOut,FrontRightOfCenter,keep,
+E,32,android/media/AudioFormat.CHANNEL_OUT_FRONT_WIDE_LEFT,67108864,Android.Media.ChannelOut,FrontWideLeft,remove,
+E,32,android/media/AudioFormat.CHANNEL_OUT_FRONT_WIDE_RIGHT,134217728,Android.Media.ChannelOut,FrontWideRight,remove,
E,10,android/media/AudioFormat.CHANNEL_OUT_LOW_FREQUENCY,32,Android.Media.ChannelOut,LowFrequency,keep,
+E,32,android/media/AudioFormat.CHANNEL_OUT_LOW_FREQUENCY_2,33554432,Android.Media.ChannelOut,LowFrequency2,remove,
E,10,android/media/AudioFormat.CHANNEL_OUT_MONO,4,Android.Media.ChannelOut,Mono,keep,
E,10,android/media/AudioFormat.CHANNEL_OUT_QUAD,204,Android.Media.ChannelOut,Quad,keep,
E,21,android/media/AudioFormat.CHANNEL_OUT_SIDE_LEFT,2048,Android.Media.ChannelOut,SideLeft,keep,
E,21,android/media/AudioFormat.CHANNEL_OUT_SIDE_RIGHT,4096,Android.Media.ChannelOut,SideRight,keep,
E,10,android/media/AudioFormat.CHANNEL_OUT_STEREO,12,Android.Media.ChannelOut,Stereo,keep,
E,10,android/media/AudioFormat.CHANNEL_OUT_SURROUND,1052,Android.Media.ChannelOut,Surround,keep,
+E,32,android/media/AudioFormat.CHANNEL_OUT_TOP_BACK_CENTER,262144,Android.Media.ChannelOut,OutTopBackCenter,remove,
+E,32,android/media/AudioFormat.CHANNEL_OUT_TOP_BACK_LEFT,131072,Android.Media.ChannelOut,OutTopBackLeft,remove,
+E,32,android/media/AudioFormat.CHANNEL_OUT_TOP_BACK_RIGHT,524288,Android.Media.ChannelOut,OutTopBackRight,remove,
+E,32,android/media/AudioFormat.CHANNEL_OUT_TOP_CENTER,8192,Android.Media.ChannelOut,OutTopCenter,remove,
+E,32,android/media/AudioFormat.CHANNEL_OUT_TOP_FRONT_CENTER,32768,Android.Media.ChannelOut,OutTopFrontCenter,remove,
+E,32,android/media/AudioFormat.CHANNEL_OUT_TOP_FRONT_LEFT,16384,Android.Media.ChannelOut,OutTopFrontLeft,remove,
+E,32,android/media/AudioFormat.CHANNEL_OUT_TOP_FRONT_RIGHT,65536,Android.Media.ChannelOut,OutTopFrontRight,remove,
+E,32,android/media/AudioFormat.CHANNEL_OUT_TOP_SIDE_LEFT,1048576,Android.Media.ChannelOut,OutTopSideLeft,remove,
+E,32,android/media/AudioFormat.CHANNEL_OUT_TOP_SIDE_RIGHT,2097152,Android.Media.ChannelOut,OutTopSideRight,remove,
E,28,android/media/AudioFormat.ENCODING_AAC_ELD,15,Android.Media.Encoding,AacEld,keep,
E,28,android/media/AudioFormat.ENCODING_AAC_HE_V1,11,Android.Media.Encoding,AacHeV1,keep,
E,28,android/media/AudioFormat.ENCODING_AAC_HE_V2,12,Android.Media.Encoding,AacHeV2,keep,
@@ -4545,6 +4568,9 @@ I,29,android/media/Session2Command$Result.RESULT_INFO_SKIPPED,1,,,,
I,29,android/media/Session2Command$Result.RESULT_SUCCESS,0,,,,
E,29,android/media/Session2Token.TYPE_SESSION,0,Android.Media.MediaSessionType,Session,remove,
E,29,android/media/Session2Token.TYPE_SESSION_SERVICE,1,Android.Media.MediaSessionType,SessionService,remove,
+E,32,android/media/Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_MULTICHANNEL,1,Android.Media.SpatializerImmersiveLevel,Multichannel,remove,
+E,32,android/media/Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE,0,Android.Media.SpatializerImmersiveLevel,None,remove,
+E,32,android/media/Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_OTHER,-1,Android.Media.SpatializerImmersiveLevel,Other,remove,
E,23,android/media/SyncParams.AUDIO_ADJUST_MODE_DEFAULT,0,Android.Media.AudioAdjustMode,Default,keep,
E,23,android/media/SyncParams.AUDIO_ADJUST_MODE_RESAMPLE,2,Android.Media.AudioAdjustMode,Resample,keep,
E,23,android/media/SyncParams.AUDIO_ADJUST_MODE_STRETCH,1,Android.Media.AudioAdjustMode,Stretch,keep,
@@ -7310,6 +7336,7 @@ E,28,android/os/Build$VERSION_CODES.P,28,Android.OS.BuildVersionCodes,P,remove,
E,29,android/os/Build$VERSION_CODES.Q,29,Android.OS.BuildVersionCodes,Q,remove,
E,30,android/os/Build$VERSION_CODES.R,30,Android.OS.BuildVersionCodes,R,remove,
E,31,android/os/Build$VERSION_CODES.S,31,Android.OS.BuildVersionCodes,S,remove,
+E,32,android/os/Build$VERSION_CODES.S_V2,32,Android.OS.BuildVersionCodes,SV2,remove,
A,0,,0,Android.OS.DebugShow,Default,remove,
E,10,android/os/Debug.SHOW_CLASSLOADER,2,Android.OS.DebugShow,Classloader,remove,
E,10,android/os/Debug.SHOW_FULL_DETAIL,1,Android.OS.DebugShow,FullDetail,remove,
@@ -8907,6 +8934,7 @@ I,25,android/R$attr.shortcutId,16844072,,,,
I,25,android/R$attr.shortcutLongLabel,16844074,,,,
I,25,android/R$attr.shortcutShortLabel,16844073,,,,
I,0,android/R$attr.shouldDisableView,16843246,,,,
+I,32,android/R$attr.shouldUseDefaultUnfoldTransition,16844364,,,,
I,15,android/R$attr.showAsAction,16843481,,,,
I,0,android/R$attr.showDefault,16843258,,,,
I,15,android/R$attr.showDividers,16843561,,,,
@@ -9598,6 +9626,9 @@ I,0,android/R$drawable.title_bar_tall,17301670,,,,
I,0,android/R$drawable.toast_frame,17301654,,,,
I,0,android/R$drawable.zoom_plate,17301655,,,,
I,23,android/R$id.accessibilityActionContextClick,16908348,,,,
+I,32,android/R$id.accessibilityActionDragCancel,16908375,,,,
+I,32,android/R$id.accessibilityActionDragDrop,16908374,,,,
+I,32,android/R$id.accessibilityActionDragStart,16908373,,,,
I,28,android/R$id.accessibilityActionHideTooltip,16908357,,,,
I,30,android/R$id.accessibilityActionImeEnter,16908372,,,,
I,26,android/R$id.accessibilityActionMoveWindow,16908354,,,,
@@ -12577,6 +12608,9 @@ E,10,android/util/TypedValue.TYPE_NULL,0,Android.Util.DataType,Null,keep,
E,10,android/util/TypedValue.TYPE_REFERENCE,1,Android.Util.DataType,Reference,keep,
E,10,android/util/TypedValue.TYPE_STRING,3,Android.Util.DataType,String,keep,
E,19,android/view/accessibility/AccessibilityEvent.CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION,4,Android.Views.Accessibility.ContentChangeTypes,ContentDescription,remove,
+E,32,android/view/accessibility/AccessibilityEvent.CONTENT_CHANGE_TYPE_DRAG_CANCELLED,512,Android.Views.Accessibility.ContentChangeTypes,DragCancelled,remove,
+E,32,android/view/accessibility/AccessibilityEvent.CONTENT_CHANGE_TYPE_DRAG_DROPPED,256,Android.Views.Accessibility.ContentChangeTypes,DragDropped,remove,
+E,32,android/view/accessibility/AccessibilityEvent.CONTENT_CHANGE_TYPE_DRAG_STARTED,128,Android.Views.Accessibility.ContentChangeTypes,DragStarted,remove,
E,28,android/view/accessibility/AccessibilityEvent.CONTENT_CHANGE_TYPE_PANE_APPEARED,16,Android.Views.Accessibility.ContentChangeTypes,PaneAppeared,remove,
E,28,android/view/accessibility/AccessibilityEvent.CONTENT_CHANGE_TYPE_PANE_DISAPPEARED,32,Android.Views.Accessibility.ContentChangeTypes,PaneDisappeared,remove,
E,28,android/view/accessibility/AccessibilityEvent.CONTENT_CHANGE_TYPE_PANE_TITLE,8,Android.Views.Accessibility.ContentChangeTypes,PaneTitle,remove,
@@ -13371,6 +13405,12 @@ I,0,android/view/Surface.SURFACE_BLUR_FREEZE,16,,,,
I,0,android/view/Surface.SURFACE_DITHER,4,,,,
I,0,android/view/Surface.SURFACE_FROZEN,2,,,,
I,0,android/view/Surface.SURFACE_HIDDEN,1,,,,
+E,32,android/view/SurfaceControl.BUFFER_TRANSFORM_IDENTITY,0,Android.Views.BufferTransform,Identity,remove,
+E,32,android/view/SurfaceControl.BUFFER_TRANSFORM_MIRROR_HORIZONTAL,1,Android.Views.BufferTransform,MirrorHorizontal,remove,
+E,32,android/view/SurfaceControl.BUFFER_TRANSFORM_MIRROR_VERTICAL,2,Android.Views.BufferTransform,MirrorVertical,remove,
+E,32,android/view/SurfaceControl.BUFFER_TRANSFORM_ROTATE_180,3,Android.Views.BufferTransform,Rotate180,remove,
+E,32,android/view/SurfaceControl.BUFFER_TRANSFORM_ROTATE_270,7,Android.Views.BufferTransform,Rotate270,remove,
+E,32,android/view/SurfaceControl.BUFFER_TRANSFORM_ROTATE_90,4,Android.Views.BufferTransform,Rotate90,remove,
E,28,android/view/textclassifier/SelectionEvent.ACTION_ABANDON,107,Android.Views.TextClassifiers.SelectionAction,Abandon,remove,
E,28,android/view/textclassifier/SelectionEvent.ACTION_COPY,101,Android.Views.TextClassifiers.SelectionAction,Copy,remove,
E,28,android/view/textclassifier/SelectionEvent.ACTION_CUT,103,Android.Views.TextClassifiers.SelectionAction,Cut,remove,
@@ -13459,6 +13499,7 @@ E,26,android/view/View.AUTOFILL_TYPE_LIST,3,Android.Views.AutofillType,List,remo
E,26,android/view/View.AUTOFILL_TYPE_NONE,0,Android.Views.AutofillType,None,remove,
E,26,android/view/View.AUTOFILL_TYPE_TEXT,1,Android.Views.AutofillType,Text,remove,
E,26,android/view/View.AUTOFILL_TYPE_TOGGLE,2,Android.Views.AutofillType,Toggle,remove,
+E,32,android/view/View.DRAG_FLAG_ACCESSIBILITY_ACTION,1024,Android.Views.DragFlags,AccessibilityAction,remove,
E,24,android/view/View.DRAG_FLAG_GLOBAL,256,Android.Views.DragFlags,Global,remove,
E,24,android/view/View.DRAG_FLAG_GLOBAL_PERSISTABLE_URI_PERMISSION,64,Android.Views.DragFlags,GlobalPersistableUriPermission,remove,
E,24,android/view/View.DRAG_FLAG_GLOBAL_PREFIX_URI_PERMISSION,128,Android.Views.DragFlags,GlobalPrefixUriPermission,remove,
diff --git a/src/Mono.Android/methodmap.csv b/src/Mono.Android/methodmap.csv
index dfd16940d0a..ae018e72ec8 100644
--- a/src/Mono.Android/methodmap.csv
+++ b/src/Mono.Android/methodmap.csv
@@ -3237,3 +3237,10 @@
31,android/widget,RemoteViews,setViewLayoutWidth,units,Android.Util.ComplexUnitType
31,android/widget,RemoteViews,setViewOutlinePreferredRadius,units,Android.Util.ComplexUnitType
31,android/widget,RemoteViews$RemoteCollectionItems,writeToParcel,flags,Android.OS.ParcelableWriteFlags
+
+32,android/media,AudioAttributes,getSpatializationBehavior,return,Android.Media.AudioSpatializationBehavior
+32,android/media,AudioAttributes$Builder,setSpatializationBehavior,sb,Android.Media.AudioSpatializationBehavior
+32,android/media,Spatializer,getImmersiveAudioLevel,return,Android.Media.SpatializerImmersiveLevel
+32,android/service/voice,VisibleActivityInfo,writeToParcel,flags,Android.OS.ParcelableWriteFlags
+32,android/view,I:AttachedSurfaceControl,getBufferTransformHint,return,Android.Views.BufferTransform
+32,android/view,I:AttachedSurfaceControl$OnBufferTransformHintChangedListener,onBufferTransformHintChanged,p0,Android.Views.BufferTransform
diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.targets
index d0e154d6c20..f914dba459a 100644
--- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.targets
+++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.targets
@@ -22,8 +22,8 @@
/>
-
+
diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.json b/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.json
index 6df0aa36022..638dda446ef 100644
--- a/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.json
+++ b/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.json
@@ -16,7 +16,7 @@
"extends" : [ "microsoft-net-runtime-android" ]
},
"android-32": {
- "description": "Preview support for Android API-32.",
+ "description": "Support for Android API-32.",
"packs": [
"Microsoft.Android.Ref.32",
"Microsoft.Android.Runtime.32.android-arm",
@@ -47,23 +47,23 @@
},
"Microsoft.Android.Ref.31": {
"kind": "framework",
- "version": "@WORKLOAD_VERSION@"
+ "version": "31.0.101-preview.11.117"
},
"Microsoft.Android.Runtime.31.android-arm": {
"kind": "framework",
- "version": "@WORKLOAD_VERSION@"
+ "version": "31.0.101-preview.11.117"
},
"Microsoft.Android.Runtime.31.android-arm64": {
"kind": "framework",
- "version": "@WORKLOAD_VERSION@"
+ "version": "31.0.101-preview.11.117"
},
"Microsoft.Android.Runtime.31.android-x86": {
"kind": "framework",
- "version": "@WORKLOAD_VERSION@"
+ "version": "31.0.101-preview.11.117"
},
"Microsoft.Android.Runtime.31.android-x64": {
"kind": "framework",
- "version": "@WORKLOAD_VERSION@"
+ "version": "31.0.101-preview.11.117"
},
"Microsoft.Android.Ref.32": {
"kind": "framework",
diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidDependenciesTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidDependenciesTests.cs
index 90080bcaad5..86e7b78d6e4 100644
--- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidDependenciesTests.cs
+++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidDependenciesTests.cs
@@ -4,6 +4,7 @@
using System.Linq;
using System.Xml.Linq;
using NUnit.Framework;
+using Xamarin.Android.Tools;
using Xamarin.ProjectTools;
namespace Xamarin.Android.Build.Tests
@@ -95,7 +96,7 @@ public void GetDependencyWhenBuildToolsAreMissingTest ()
builder.Target = "GetAndroidDependencies";
Assert.True (builder.Build (proj, parameters: parameters),
string.Format ("First Build should have succeeded"));
- int apiLevel = Builder.UseDotNet ? AndroidSdkResolver.GetMaxInstalledPlatform () : 26;
+ int apiLevel = Builder.UseDotNet ? XABuildConfig.AndroidDefaultTargetDotnetApiLevel : 26;
StringAssertEx.Contains ($"platforms/android-{apiLevel}", builder.LastBuildOutput, $"platforms/android-{apiLevel} should be a dependency.");
StringAssertEx.Contains ($"build-tools/{buildToolsVersion}", builder.LastBuildOutput, $"build-tools/{buildToolsVersion} should be a dependency.");
StringAssertEx.Contains ("platform-tools", builder.LastBuildOutput, "platform-tools should be a dependency.");
@@ -131,7 +132,7 @@ public void GetDependencyWhenSDKIsMissingTest ([Values (true, false)] bool creat
builder.Target = "GetAndroidDependencies";
Assert.True (builder.Build (proj, parameters: parameters),
string.Format ("First Build should have succeeded"));
- int apiLevel = Builder.UseDotNet ? AndroidSdkResolver.GetMaxInstalledPlatform () : 26;
+ int apiLevel = Builder.UseDotNet ? XABuildConfig.AndroidDefaultTargetDotnetApiLevel : 26;
StringAssertEx.Contains ($"platforms/android-{apiLevel}", builder.LastBuildOutput, $"platforms/android-{apiLevel} should be a dependency.");
StringAssertEx.Contains ($"build-tools/{buildToolsVersion}", builder.LastBuildOutput, $"build-tools/{buildToolsVersion} should be a dependency.");
StringAssertEx.Contains ("platform-tools", builder.LastBuildOutput, "platform-tools should be a dependency.");
diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs
index 1d7903f0054..4e6b636f5d5 100644
--- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs
+++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs
@@ -6,6 +6,7 @@
using Mono.Cecil;
using NUnit.Framework;
using Xamarin.Android.Tasks;
+using Xamarin.Android.Tools;
using Xamarin.ProjectTools;
using Xamarin.Tools.Zip;
using Microsoft.Android.Build.Tasks;
@@ -614,7 +615,8 @@ public void DotNetBuild (string runtimeIdentifiers, bool isRelease, bool aot, bo
XNamespace ns = "http://schemas.android.com/apk/res/android";
var uses_sdk = manifest.Root.Element ("uses-sdk");
Assert.AreEqual ("21", uses_sdk.Attribute (ns + "minSdkVersion").Value);
- Assert.AreEqual ("31", uses_sdk.Attribute (ns + "targetSdkVersion").Value);
+ Assert.AreEqual (XABuildConfig.AndroidDefaultTargetDotnetApiLevel.ToString(),
+ uses_sdk.Attribute (ns + "targetSdkVersion").Value);
bool expectEmbeddedAssembies = !(CommercialBuildAvailable && !isRelease);
var apkPath = Path.Combine (outputPath, $"{proj.PackageName}-Signed.apk");
@@ -636,12 +638,11 @@ public void DotNetBuild (string runtimeIdentifiers, bool isRelease, bool aot, bo
}
- ///
- /// NOTE: we cannot use SupportedOSPlatformVersion=31 yet, due to d8 2.2.64 emitting a warning for `--min-api 31`:
- /// D8 An API level of 31 is not supported by this compiler. Please use an API level of 30 or earlier
- ///
+ // TODO:
+ // Causes warning: D8 : warning : An API level of 32 is not supported by this compiler. Please use an API level of 31 or earlier
+ // Add a 32 parameter here when we get a newer version of r8.
[Test]
- public void SupportedOSPlatformVersion ([Values (21, 30)] int minSdkVersion)
+ public void SupportedOSPlatformVersion ([Values (21, 31)] int minSdkVersion)
{
var proj = new XASdkProject {
SupportedOSPlatformVersion = minSdkVersion.ToString (),
@@ -756,8 +757,8 @@ public void XamarinLegacySdk ()
};
using var b = new Builder ();
- var dotnetTargetFramework = "net6.0-android31.0";
- var legacyTargetFrameworkVersion = "11.0";
+ var dotnetTargetFramework = "net6.0-android32.0";
+ var legacyTargetFrameworkVersion = "12.1";
var legacyTargetFramework = $"monoandroid{legacyTargetFrameworkVersion}";
proj.SetProperty ("TargetFramework", value: "");
proj.SetProperty ("TargetFrameworks", value: $"{dotnetTargetFramework};{legacyTargetFramework}");
@@ -778,7 +779,9 @@ public void MauiTargetFramework ([Values ("net6.0-android", "net6.0-android31",
var library = new XASdkProject (outputType: "Library") {
TargetFramework = targetFramework,
};
- bool preview = targetFramework.Contains("32");
+ // Re-enable when we have unstable API 33
+ // bool preview = targetFramework.Contains("33");
+ bool preview = false;
if (preview) {
library.SetProperty ("EnablePreviewFeatures", "true");
}
diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/Versions.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/Versions.cs
index e0e8cfbc961..22195069e83 100644
--- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/Versions.cs
+++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/Versions.cs
@@ -4,6 +4,7 @@ namespace Xamarin.ProjectTools
{
public static class Versions
{
+ public const string Android12L = "v12.1";
public const string Android12 = "v12.0";
public const string Android11 = "v11.0";
///
diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidApplicationProject.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidApplicationProject.cs
index 2d1be00bb30..2ec7157ca1f 100644
--- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidApplicationProject.cs
+++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidApplicationProject.cs
@@ -2,10 +2,11 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
+using System.Runtime.CompilerServices;
using System.Text;
using System.Xml;
using Microsoft.Build.Construction;
-using System.Runtime.CompilerServices;
+using Xamarin.Android.Tools;
namespace Xamarin.ProjectTools
{
@@ -68,7 +69,11 @@ public XamarinAndroidApplicationProject (string debugConfigurationName = "Debug"
}
AndroidManifest = default_android_manifest;
- TargetSdkVersion = AndroidSdkResolver.GetMaxInstalledPlatform ().ToString ();
+ if (Builder.UseDotNet) {
+ TargetSdkVersion = XABuildConfig.AndroidDefaultTargetDotnetApiLevel.ToString ();
+ } else {
+ TargetSdkVersion = AndroidSdkResolver.GetMaxInstalledPlatform ().ToString ();
+ }
LayoutMain = default_layout_main;
StringsXml = default_strings_xml;
PackageName = $"com.xamarin.{(packageName ?? ProjectName).ToLower ()}";
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 064581382d5..a0fb7f51a6e 100644
--- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.targets
+++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.targets
@@ -223,6 +223,7 @@
Outputs="Microsoft.Android.Sdk\targets\Microsoft.Android.Sdk.SupportedPlatforms.targets">
diff --git a/tests/Mono.Android-Tests/Java.Interop-Tests/Java.Interop-Tests.csproj b/tests/Mono.Android-Tests/Java.Interop-Tests/Java.Interop-Tests.csproj
index a3e6744d4b0..84fbd2ae182 100644
--- a/tests/Mono.Android-Tests/Java.Interop-Tests/Java.Interop-Tests.csproj
+++ b/tests/Mono.Android-Tests/Java.Interop-Tests/Java.Interop-Tests.csproj
@@ -15,12 +15,14 @@
512
Resources\Resource.designer.cs
Off
- v12.0
true
true
..\..\..\product.snk
+
+ $(AndroidLatestStableFrameworkVersion)
+
$(AndroidFrameworkVersion)
true
diff --git a/tests/Mono.Android-Tests/Mono.Android-Test.Library/Mono.Android-Test.Library.csproj b/tests/Mono.Android-Tests/Mono.Android-Test.Library/Mono.Android-Test.Library.csproj
index f99d663076a..67b615ee266 100644
--- a/tests/Mono.Android-Tests/Mono.Android-Test.Library/Mono.Android-Test.Library.csproj
+++ b/tests/Mono.Android-Tests/Mono.Android-Test.Library/Mono.Android-Test.Library.csproj
@@ -15,9 +15,11 @@
512
Resources\Resource.designer.cs
Off
- v12.0
+
+ $(AndroidLatestStableFrameworkVersion)
+
true
portable
diff --git a/tests/Mono.Android-Tests/Mono.Android-Tests.csproj b/tests/Mono.Android-Tests/Mono.Android-Tests.csproj
index ae5db0b6864..fa98bee26a7 100644
--- a/tests/Mono.Android-Tests/Mono.Android-Tests.csproj
+++ b/tests/Mono.Android-Tests/Mono.Android-Tests.csproj
@@ -21,7 +21,6 @@
All
true
..\..\product.snk
- v12.0
d8
<_SkipJniAddNativeMethodRegistrationAttributeScan>True
true
@@ -33,6 +32,9 @@
+
+ $(AndroidLatestStableFrameworkVersion)
+
true
false
diff --git a/tests/api-compatibility/acceptable-breakages-v12.0.99.txt b/tests/api-compatibility/acceptable-breakages-v12.1.txt
similarity index 100%
rename from tests/api-compatibility/acceptable-breakages-v12.0.99.txt
rename to tests/api-compatibility/acceptable-breakages-v12.1.txt
diff --git a/tests/api-compatibility/acceptable-breakages-vReference-net6.0.txt b/tests/api-compatibility/acceptable-breakages-vReference-net6.0.txt
index 180e4840083..c934a8264b2 100644
--- a/tests/api-compatibility/acceptable-breakages-vReference-net6.0.txt
+++ b/tests/api-compatibility/acceptable-breakages-vReference-net6.0.txt
@@ -1,10 +1,4 @@
Compat issues with assembly Mono.Android:
-CannotRemoveAttribute : Attribute 'Android.Runtime.RegisterAttribute' exists on 'Android.Bluetooth.BluetoothDevice.ConnectGatt(Android.Content.Context, System.Boolean, Android.Bluetooth.BluetoothGattCallback, Android.Bluetooth.BluetoothTransports, Android.Bluetooth.LE.ScanSettingsPhy)' in the contract but not the implementation.
-CannotRemoveAttribute : Attribute 'Android.Runtime.RegisterAttribute' exists on 'Android.Bluetooth.BluetoothDevice.ConnectGatt(Android.Content.Context, System.Boolean, Android.Bluetooth.BluetoothGattCallback, Android.Bluetooth.BluetoothTransports, Android.Bluetooth.LE.ScanSettingsPhy, Android.OS.Handler)' in the contract but not the implementation.
-CannotRemoveAttribute : Attribute 'Android.Runtime.RegisterAttribute' exists on 'Android.Bluetooth.LE.AdvertisingSetParameters.Builder.SetPrimaryPhy(Android.Bluetooth.LE.ScanSettingsPhy)' in the contract but not the implementation.
-CannotRemoveAttribute : Attribute 'Android.Runtime.RegisterAttribute' exists on 'Android.Bluetooth.LE.AdvertisingSetParameters.Builder.SetSecondaryPhy(Android.Bluetooth.LE.ScanSettingsPhy)' in the contract but not the implementation.
-CannotChangeAttribute : Attribute 'System.AttributeUsageAttribute' on 'Android.Runtime.IntDefAttribute' changed from '[AttributeUsageAttribute(2272, AllowMultiple=true)]' in the contract to '[AttributeUsageAttribute(2528, AllowMultiple=true)]' in the implementation.
-CannotChangeAttribute : Attribute 'System.AttributeUsageAttribute' on 'Android.Runtime.StringDefAttribute' changed from '[AttributeUsageAttribute(2272, AllowMultiple=true)]' in the contract to '[AttributeUsageAttribute(2528, AllowMultiple=true)]' in the implementation.
CannotSealType : Type 'Java.Interop.JavaTypeParametersAttribute' is actually (has the sealed modifier) sealed in the implementation but not sealed in the contract.
MembersMustExist : Member 'public void Java.Interop.JavaTypeParametersAttribute.TypeParameters.set(System.String[])' does not exist in the implementation but it does exist in the contract.
CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Android.Graphics.Paint.Color.set(Android.Graphics.Color)' changed from '[RegisterAttribute("setColor", "(I)V", "GetSetColor_IHandler", ApiSince=29)]' in the contract to '[RegisterAttribute("setColor", "(I)V", "GetSetColor_IHandler")]' in the implementation.
diff --git a/tests/api-compatibility/acceptable-breakages-vReference.txt b/tests/api-compatibility/acceptable-breakages-vReference.txt
index a019f3f9e69..0dfe0f0033c 100644
--- a/tests/api-compatibility/acceptable-breakages-vReference.txt
+++ b/tests/api-compatibility/acceptable-breakages-vReference.txt
@@ -1,8 +1,2 @@
Compat issues with assembly Mono.Android:
-CannotRemoveAttribute : Attribute 'Android.Runtime.RegisterAttribute' exists on 'Android.Bluetooth.BluetoothDevice.ConnectGatt(Android.Content.Context, System.Boolean, Android.Bluetooth.BluetoothGattCallback, Android.Bluetooth.BluetoothTransports, Android.Bluetooth.LE.ScanSettingsPhy)' in the contract but not the implementation.
-CannotRemoveAttribute : Attribute 'Android.Runtime.RegisterAttribute' exists on 'Android.Bluetooth.BluetoothDevice.ConnectGatt(Android.Content.Context, System.Boolean, Android.Bluetooth.BluetoothGattCallback, Android.Bluetooth.BluetoothTransports, Android.Bluetooth.LE.ScanSettingsPhy, Android.OS.Handler)' in the contract but not the implementation.
-CannotRemoveAttribute : Attribute 'Android.Runtime.RegisterAttribute' exists on 'Android.Bluetooth.LE.AdvertisingSetParameters.Builder.SetPrimaryPhy(Android.Bluetooth.LE.ScanSettingsPhy)' in the contract but not the implementation.
-CannotRemoveAttribute : Attribute 'Android.Runtime.RegisterAttribute' exists on 'Android.Bluetooth.LE.AdvertisingSetParameters.Builder.SetSecondaryPhy(Android.Bluetooth.LE.ScanSettingsPhy)' in the contract but not the implementation.
-CannotChangeAttribute : Attribute 'System.AttributeUsageAttribute' on 'Android.Runtime.IntDefAttribute' changed from '[AttributeUsageAttribute(2272, AllowMultiple=true)]' in the contract to '[AttributeUsageAttribute(2528, AllowMultiple=true)]' in the implementation.
-CannotChangeAttribute : Attribute 'System.AttributeUsageAttribute' on 'Android.Runtime.StringDefAttribute' changed from '[AttributeUsageAttribute(2272, AllowMultiple=true)]' in the contract to '[AttributeUsageAttribute(2528, AllowMultiple=true)]' in the implementation.
CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Android.Graphics.Paint.Color.set(Android.Graphics.Color)' changed from '[RegisterAttribute("setColor", "(I)V", "GetSetColor_IHandler", ApiSince=29)]' in the contract to '[RegisterAttribute("setColor", "(I)V", "GetSetColor_IHandler")]' in the implementation.
diff --git a/tests/api-compatibility/reference/Mono.Android.zip b/tests/api-compatibility/reference/Mono.Android.zip
index 358bc70590a..5f0d4077764 100644
Binary files a/tests/api-compatibility/reference/Mono.Android.zip and b/tests/api-compatibility/reference/Mono.Android.zip differ