From 4723893609cfb4d03bb79de8b0be8bd5a40b9c45 Mon Sep 17 00:00:00 2001 From: Jonathan Pryor Date: Fri, 14 Aug 2026 15:37:36 -0400 Subject: [PATCH 1/3] [Mono.Android] Enumify, stabilize API-37.1 Context: http://github.com/jpobst/BindingStudio Context: https://github.com/dotnet/android/pull/10005 Use jpobst/BindingStudio to enumify API-37.1. Note: current dotnet/java-interop emits an "extra" `,` on `map.csv` output, which would make for a "noisy" diff (every line changed!). The diff size is reduced by removing trailing commas: tr -d '\r' < src/Mono.Android/map.csv > src/Mono.Android/new-map.csv sed 's/,$//' < src/Mono.Android/new-map.csv > src/Mono.Android/map.csv This keeps the diff to a reasonable size. Sanity check: during enumification, this should have no matches: git grep '\.[A-Z][a-z]\.' src/Mono.Android/map.csv Two-letter namespace parts should be all upper-case. TODO (lol): update `map.csv` to current BindingStudio output after this is merged. --- Configuration.props | 9 +- Documentation/workflow/HowToAddNewApiLevel.md | 10 +- .../CheckApiCompatibility.cs | 3 +- .../manifest-attribute-codegen/README.md | 37 + .../manifest-definition.xml | 1173 +++++++++-------- .../manifest-attribute-codegen/metadata.xml | 20 +- .../Mono.Android.Runtime.csproj | 7 +- src/Mono.Android/Mono.Android.Apis.projitems | 2 +- src/Mono.Android/map.csv | 108 ++ src/Mono.Android/methodmap.csv | 16 + 10 files changed, 801 insertions(+), 584 deletions(-) diff --git a/Configuration.props b/Configuration.props index 16c7932f302..c6f829d80d2 100644 --- a/Configuration.props +++ b/Configuration.props @@ -24,12 +24,11 @@ 37 37.0 v17.0 - + + 37.1 - 37.1 - 37.1 + $(AndroidLatestStableApiLevel2) + $(AndroidLatestStableApiLevel2) v17.1 $(AndroidLatestStableApiLevel) diff --git a/Documentation/workflow/HowToAddNewApiLevel.md b/Documentation/workflow/HowToAddNewApiLevel.md index ee49a7bc772..1303b1f2b4f 100644 --- a/Documentation/workflow/HowToAddNewApiLevel.md +++ b/Documentation/workflow/HowToAddNewApiLevel.md @@ -547,7 +547,15 @@ the `csv` variable within `MainForm.FindAPILevelMethodsToolStripMenuItem_Click`. Once this process is complete, use `Tools` -> `Export Final Method Map`, and create a *new* `.csv` file, e.g. `new-methodmap.csv`. -Copy the contents of `new-methodmap.csv` and *append* to `src/Mono.Android/methodmap.csv`. +Note: `new-methodmap.csv` will likely use JNI syntax for package names, e.g. `android/widget`. +`methodmap.csv` ***must*** use *Java* syntax for package names, e.g. `android.widget`. +Use **sed**(1) to fix package names and nested class names: + +```sh +sed 's,/,.,g;s/\$/./g' < src/Mono.Android/new-methodmap.csv > src/Mono.Android/new-methodmap2.csv +``` + +Copy the contents of `new-methodmap2.csv` and *append* to `src/Mono.Android/methodmap.csv`. There may be redundant duplicate entries within `methodmap.csv`. Use the **uniq**(1) Unix app to remove duplicate entries. 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 44e726086be..0d2cb04598c 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 @@ -80,7 +80,8 @@ public override bool Execute () // Check to see if Api has a previous Api defined. if (!api_versions.TryGetValue (ApiLevel, out string previousApiLevel)) { - LogError ($"Please add ApiLevel:{ApiLevel} to the list of supported apis."); + LogError ($"Please add ApiLevel:{ApiLevel} to the list of supported apis. Supported APIs include: " + + string.Join (", ", api_versions.Keys.OrderBy (k => k)) + "."); return !Log.HasLoggedErrors; } diff --git a/build-tools/manifest-attribute-codegen/README.md b/build-tools/manifest-attribute-codegen/README.md index e17ff3a81a9..167cd806276 100644 --- a/build-tools/manifest-attribute-codegen/README.md +++ b/build-tools/manifest-attribute-codegen/README.md @@ -47,12 +47,14 @@ These represent valid instances of entries and attributes respectively that can For example, consider the following valid `AndroidManifest.xml` entry: ```xml + ``` This is partially declared within the Android SDK `attrs_manifest.xml` as: ```xml + @@ -64,6 +66,7 @@ The `` element is represented in `metadata.xml` via both a and an `` entry: ```xml + ``` @@ -146,3 +149,37 @@ Optional metadata (note that if any metadata is set, `visible` is assumed to be - **obsolete** - A string describing the reason for this member being `[Obsolete ("reason")]` - **readonly** - Whether to generate the property with a `private set`; defaults to `false` - **manualMap** - Whether to exclude the property from the `mapping` field used by `Xamarin.Android.Build.Tasks`; defaults to `false` + +# Examples + +Running the `GenerateManifestAttributes` target emits a message such as: + +``` +warning - Element: application.backupAgentProcess +``` + +The first question: is this *documented*? View the +[Google documentation for ``](https://developer.android.com/guide/topics/manifest/application-element), +which -- at this writing on 2026-Aug-17 -- is ***not*** documented. +Consequently, we should ignore it, by updating `metadata.xml` to contain: + +```xml + +``` + +Running the `GenerateManifestAttributes` target emits a message such as: + +``` +warning - Type: +``` + +Similar but different to the `Element: application.backupAgentProcess` message: +a *Type* is an XML element, not an attribute on an XML element. As such, we would look at the +[App manifest overview](https://developer.android.com/guide/topics/manifest/manifest-intro) +documentation to see if *type* is mentioned in the left-hand sidebar to see if the element +is documented. At this writing on 2026-Aug-17, ***no*** `` element is +documented, and thus the Type (element) should be hidden by updating `metadata.xml` to contain: + +```xml + +``` diff --git a/build-tools/manifest-attribute-codegen/manifest-definition.xml b/build-tools/manifest-attribute-codegen/manifest-definition.xml index 7e0cab91711..144ec459b04 100644 --- a/build-tools/manifest-attribute-codegen/manifest-definition.xml +++ b/build-tools/manifest-attribute-codegen/manifest-definition.xml @@ -1,391 +1,510 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + manifest - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + manifest + + + + + attribution + - + manifest - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + + manifest + + + + + + + + + + + + + + + manifest - - - - - - - - - - - - - - - + + + + + + + + + manifest + + + + + + + + + + + + + + + manifest - - - - - - - - + + + + + + + manifest - - - - - - - - + + + + + + + + + manifest - - - - - + + + + + + + - + manifest - - - - + - + manifest - - - - - + + queries + + + + queries + + + queries + + + + application + + + + + application + + + + + + + application + + + + + + application + + + + + application + + + + application - - + + + - + + uses-static-library + + + + application + + + + + + + manifest - - - - - - - - - - - + + + + + + + + + + + manifest - + - + manifest - + + + + application + + + processes + + + + + + + - + + processes + + + + processes + + + application - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - + provider - - - - - + + + + + - + provider - - - - - - - - - - + + + + + + + + + + application - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - + application - - - - - - - - - - - - - - + + + + + + + + application + + + + + + + + + + + + + + + - + application - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + application - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + application activity receiver @@ -394,44 +513,59 @@ permission permission-group instrumentation - - - + + + - + + application + activity + receiver + provider + service + + + + + activity receiver service - - - - - - - - - - + + + + + + + + + + intent-filter - + - + intent-filter - - - - - - - - - - - - - - - + + + + intent-filter + uri-relative-filter-group + + + + + + + + + + + + + + + @@ -443,230 +577,104 @@ - + intent-filter - + - + manifest - - - - - - - - - - - - + + + + + + + + + + + + compatible-screens - - - - - - - - - - - - - intent - + + - - intent - - + + supports-input + - + manifest - - + + - + manifest - - - - supports-input - + + + + + + + + + + + + + + + + + + + intent + - - - + + intent + + - - + + + - - + + - - manifest - - - - - - - - - - + manifest - + - + activity - - - - - - - - - - - manifest - - - - application - - - - - - application - - - - - + + + + + + + + manifest - + - - uses-static-library - - - - application - - - - - - - - application - - - - + manifest - - - - - - attribution - - - - - - - - manifest - - - queries - - - - queries - - - queries - - - - application - - - processes - - - - - - - - - processes - - - - processes - - - - - - - - - - application - - - - - application - activity - receiver - provider - service - - - - - - application - - + - + application - - - - + + - - application - - - - - - - + manifest - + install-constraints - - - - intent-filter - + permission @@ -683,4 +691,31 @@ manifest + + permission + + + + + uses-permission + + + + + + manifest + + + allow-component-access + + + + + application + + + + + + diff --git a/build-tools/manifest-attribute-codegen/metadata.xml b/build-tools/manifest-attribute-codegen/metadata.xml index 7adf65ae0e6..ba9ed3d3a8d 100644 --- a/build-tools/manifest-attribute-codegen/metadata.xml +++ b/build-tools/manifest-attribute-codegen/metadata.xml @@ -25,6 +25,8 @@ + + @@ -38,6 +40,7 @@ + @@ -45,6 +48,7 @@ + @@ -74,6 +78,7 @@ + @@ -144,7 +149,7 @@ - + @@ -206,6 +211,7 @@ + @@ -220,7 +226,6 @@ - @@ -232,6 +237,8 @@ + + @@ -280,8 +287,6 @@ - - @@ -306,7 +311,9 @@ + + @@ -366,6 +373,7 @@ + @@ -388,6 +396,7 @@ + @@ -411,6 +420,8 @@ + + @@ -443,6 +454,7 @@ + diff --git a/src/Mono.Android.Runtime/Mono.Android.Runtime.csproj b/src/Mono.Android.Runtime/Mono.Android.Runtime.csproj index a73aaea64d9..b38d12eaac0 100644 --- a/src/Mono.Android.Runtime/Mono.Android.Runtime.csproj +++ b/src/Mono.Android.Runtime/Mono.Android.Runtime.csproj @@ -40,12 +40,12 @@ - + - + $(BuildDependsOn); _CopyToPackDirs; @@ -58,7 +58,8 @@ $(AndroidPackVersion).$(PackVersionCommitCount); git-rev-head:$(XAVersionHash); git-branch:$(XAVersionBranch) Android - $(AndroidApiLevel).0 + $(AndroidApiLevel) + $(AndroidApiLevel).0 $(AndroidMinimumDotNetApiLevel).0 diff --git a/src/Mono.Android/Mono.Android.Apis.projitems b/src/Mono.Android/Mono.Android.Apis.projitems index 0691af8f6d9..930b5085039 100644 --- a/src/Mono.Android/Mono.Android.Apis.projitems +++ b/src/Mono.Android/Mono.Android.Apis.projitems @@ -245,7 +245,7 @@ 37 37.1 37.1 - False + True \ No newline at end of file diff --git a/src/Mono.Android/map.csv b/src/Mono.Android/map.csv index ad20547d9b8..e1ab6af78d3 100644 --- a/src/Mono.Android/map.csv +++ b/src/Mono.Android/map.csv @@ -3208,6 +3208,99 @@ E,28,android/hardware/HardwareBuffer.S_UI8,53,Android.Hardware.HardwareBufferFor E,30,android/hardware/HardwareBuffer.YCBCR_420_888,35,Android.Hardware.HardwareBufferFormat,Ycbcr420888,remove, E,33,android/hardware/HardwareBuffer.YCBCR_P010,54,Android.Hardware.HardwareBufferFormat,YcbcrP010,remove, E,36,android/hardware/HardwareBuffer.YCBCR_P210,60,Android.Hardware.HardwareBufferFormat,YcbcrP210,remove, +E,37.1,android/hardware/hid/HidDevice.TRANSPORT_BLUETOOTH,5,Android.Hardware.Hid.HidDeviceTransport,Bluetooth,remove, +E,37.1,android/hardware/hid/HidDevice.TRANSPORT_I2C,24,Android.Hardware.Hid.HidDeviceTransport,I2c,remove, +E,37.1,android/hardware/hid/HidDevice.TRANSPORT_SPI,28,Android.Hardware.Hid.HidDeviceTransport,Spi,remove, +E,37.1,android/hardware/hid/HidDevice.TRANSPORT_UNKNOWN,0,Android.Hardware.Hid.HidDeviceTransport,Unknown,remove, +E,37.1,android/hardware/hid/HidDevice.TRANSPORT_USB,3,Android.Hardware.Hid.HidDeviceTransport,Usb,remove, +E,37.1,android/hardware/hid/HidDevice.TRANSPORT_VIRTUAL,6,Android.Hardware.Hid.HidDeviceTransport,Virtual,remove, +E,37.1,android/hardware/input/ButtonCustomizationTrigger.CUSTOMIZABLE_BUTTON_BACK,8,Android.Hardware.Input.CustomizableButton,Back,remove, +E,37.1,android/hardware/input/ButtonCustomizationTrigger.CUSTOMIZABLE_BUTTON_EXTRA,128,Android.Hardware.Input.CustomizableButton,Extra,remove, +E,37.1,android/hardware/input/ButtonCustomizationTrigger.CUSTOMIZABLE_BUTTON_FORWARD,16,Android.Hardware.Input.CustomizableButton,Forward,remove, +E,37.1,android/hardware/input/ButtonCustomizationTrigger.CUSTOMIZABLE_BUTTON_SIDE,256,Android.Hardware.Input.CustomizableButton,Side,remove, +E,37.1,android/hardware/input/ButtonCustomizationTrigger.CUSTOMIZABLE_BUTTON_TASK,512,Android.Hardware.Input.CustomizableButton,Task,remove, +E,37.1,android/hardware/input/ButtonCustomizationTrigger.CUSTOMIZABLE_BUTTON_TERTIARY,4,Android.Hardware.Input.CustomizableButton,Tertiary,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_ASSIST,219,Android.Hardware.Input.CustomizableKeyCode,Assist,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_BACK,4,Android.Hardware.Input.CustomizableKeyCode,Back,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_BOOKMARK,174,Android.Hardware.Input.CustomizableKeyCode,Bookmark,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_BRIGHTNESS_DOWN,220,Android.Hardware.Input.CustomizableKeyCode,BrightnessDown,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_BRIGHTNESS_UP,221,Android.Hardware.Input.CustomizableKeyCode,BrightnessUp,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_CALCULATOR,210,Android.Hardware.Input.CustomizableKeyCode,Calculator,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_CALENDAR,208,Android.Hardware.Input.CustomizableKeyCode,Calendar,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_CAMERA,27,Android.Hardware.Input.CustomizableKeyCode,Camera,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_CONTACTS,207,Android.Hardware.Input.CustomizableKeyCode,Contacts,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_DICTATE,319,Android.Hardware.Input.CustomizableKeyCode,Dictate,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_ENVELOPE,65,Android.Hardware.Input.CustomizableKeyCode,Envelope,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_EXPLORER,64,Android.Hardware.Input.CustomizableKeyCode,Explorer,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_F1,131,Android.Hardware.Input.CustomizableKeyCode,F1,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_F10,140,Android.Hardware.Input.CustomizableKeyCode,F10,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_F11,141,Android.Hardware.Input.CustomizableKeyCode,F11,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_F12,142,Android.Hardware.Input.CustomizableKeyCode,F12,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_F13,326,Android.Hardware.Input.CustomizableKeyCode,F13,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_F14,327,Android.Hardware.Input.CustomizableKeyCode,F14,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_F15,328,Android.Hardware.Input.CustomizableKeyCode,F15,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_F16,329,Android.Hardware.Input.CustomizableKeyCode,F16,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_F17,330,Android.Hardware.Input.CustomizableKeyCode,F17,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_F18,331,Android.Hardware.Input.CustomizableKeyCode,F18,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_F19,332,Android.Hardware.Input.CustomizableKeyCode,F19,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_F2,132,Android.Hardware.Input.CustomizableKeyCode,F2,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_F20,333,Android.Hardware.Input.CustomizableKeyCode,F20,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_F21,334,Android.Hardware.Input.CustomizableKeyCode,F21,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_F22,335,Android.Hardware.Input.CustomizableKeyCode,F22,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_F23,336,Android.Hardware.Input.CustomizableKeyCode,F23,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_F24,337,Android.Hardware.Input.CustomizableKeyCode,F24,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_F3,133,Android.Hardware.Input.CustomizableKeyCode,F3,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_F4,134,Android.Hardware.Input.CustomizableKeyCode,F4,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_F5,135,Android.Hardware.Input.CustomizableKeyCode,F5,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_F6,136,Android.Hardware.Input.CustomizableKeyCode,F6,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_F7,137,Android.Hardware.Input.CustomizableKeyCode,F7,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_F8,138,Android.Hardware.Input.CustomizableKeyCode,F8,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_F9,139,Android.Hardware.Input.CustomizableKeyCode,F9,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_FORWARD,125,Android.Hardware.Input.CustomizableKeyCode,Forward,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_FULLSCREEN,325,Android.Hardware.Input.CustomizableKeyCode,Fullscreen,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_MEDIA_EJECT,129,Android.Hardware.Input.CustomizableKeyCode,MediaEject,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_MEDIA_NEXT,87,Android.Hardware.Input.CustomizableKeyCode,MediaNext,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_MEDIA_PLAY_PAUSE,85,Android.Hardware.Input.CustomizableKeyCode,MediaPlayPause,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_MEDIA_PREVIOUS,88,Android.Hardware.Input.CustomizableKeyCode,MediaPrevious,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_MEDIA_STOP,86,Android.Hardware.Input.CustomizableKeyCode,MediaStop,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_MENU,82,Android.Hardware.Input.CustomizableKeyCode,Menu,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_MOVE_HOME,122,Android.Hardware.Input.CustomizableKeyCode,MoveHome,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_MUSIC,209,Android.Hardware.Input.CustomizableKeyCode,Music,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_NEW,320,Android.Hardware.Input.CustomizableKeyCode,New,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_SCREENSHOT,318,Android.Hardware.Input.CustomizableKeyCode,Screenshot,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_SEARCH,84,Android.Hardware.Input.CustomizableKeyCode,Search,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_SYSRQ,120,Android.Hardware.Input.CustomizableKeyCode,Sysrq,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_VOLUME_DOWN,25,Android.Hardware.Input.CustomizableKeyCode,VolumeDown,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_VOLUME_MUTE,164,Android.Hardware.Input.CustomizableKeyCode,VolumeMute,remove, +E,37.1,android/hardware/input/KeyCustomizationTrigger.CUSTOMIZABLE_KEYCODE_VOLUME_UP,24,Android.Hardware.Input.CustomizableKeyCode,VolumeUp,remove, +E,37.1,android/hardware/input/SimpleCustomizationAction.TYPE_ASSIST,21,Android.Hardware.Input.SimpleCustomizationActionType,Assist,remove, +E,37.1,android/hardware/input/SimpleCustomizationAction.TYPE_BACK,1,Android.Hardware.Input.SimpleCustomizationActionType,Back,remove, +E,37.1,android/hardware/input/SimpleCustomizationAction.TYPE_BRIGHTNESS_DOWN,2,Android.Hardware.Input.SimpleCustomizationActionType,BrightnessDown,remove, +E,37.1,android/hardware/input/SimpleCustomizationAction.TYPE_BRIGHTNESS_UP,3,Android.Hardware.Input.SimpleCustomizationActionType,BrightnessUp,remove, +E,37.1,android/hardware/input/SimpleCustomizationAction.TYPE_CALCULATOR,4,Android.Hardware.Input.SimpleCustomizationActionType,Calculator,remove, +E,37.1,android/hardware/input/SimpleCustomizationAction.TYPE_CLOSE_WINDOW,19,Android.Hardware.Input.SimpleCustomizationActionType,CloseWindow,remove, +E,37.1,android/hardware/input/SimpleCustomizationAction.TYPE_CONTEXTUAL_INSERT,22,Android.Hardware.Input.SimpleCustomizationActionType,ContextualInsert,remove, +E,37.1,android/hardware/input/SimpleCustomizationAction.TYPE_CONTEXTUAL_QUERY,24,Android.Hardware.Input.SimpleCustomizationActionType,ContextualQuery,remove, +E,37.1,android/hardware/input/SimpleCustomizationAction.TYPE_CONTEXTUAL_SEARCH,23,Android.Hardware.Input.SimpleCustomizationActionType,ContextualSearch,remove, +E,37.1,android/hardware/input/SimpleCustomizationAction.TYPE_DICTATION,5,Android.Hardware.Input.SimpleCustomizationActionType,Dictation,remove, +E,37.1,android/hardware/input/SimpleCustomizationAction.TYPE_DO_NOTHING,18,Android.Hardware.Input.SimpleCustomizationActionType,DoNothing,remove, +E,37.1,android/hardware/input/SimpleCustomizationAction.TYPE_EMOJI_MENU,6,Android.Hardware.Input.SimpleCustomizationActionType,EmojiMenu,remove, +E,37.1,android/hardware/input/SimpleCustomizationAction.TYPE_FORWARD,7,Android.Hardware.Input.SimpleCustomizationActionType,Forward,remove, +E,37.1,android/hardware/input/SimpleCustomizationAction.TYPE_LOCK,8,Android.Hardware.Input.SimpleCustomizationActionType,Lock,remove, +E,37.1,android/hardware/input/SimpleCustomizationAction.TYPE_MEDIA_NEXT,9,Android.Hardware.Input.SimpleCustomizationActionType,MediaNext,remove, +E,37.1,android/hardware/input/SimpleCustomizationAction.TYPE_MEDIA_PLAY_PAUSE,10,Android.Hardware.Input.SimpleCustomizationActionType,MediaPlayPause,remove, +E,37.1,android/hardware/input/SimpleCustomizationAction.TYPE_MEDIA_PREVIOUS,11,Android.Hardware.Input.SimpleCustomizationActionType,MediaPrevious,remove, +E,37.1,android/hardware/input/SimpleCustomizationAction.TYPE_PARTIAL_SCREENSHOT,20,Android.Hardware.Input.SimpleCustomizationActionType,PartialScreenshot,remove, +E,37.1,android/hardware/input/SimpleCustomizationAction.TYPE_PRINT_SCREEN,12,Android.Hardware.Input.SimpleCustomizationActionType,PrintScreen,remove, +E,37.1,android/hardware/input/SimpleCustomizationAction.TYPE_SCREEN_CAPTURE,13,Android.Hardware.Input.SimpleCustomizationActionType,ScreenCapture,remove, +E,37.1,android/hardware/input/SimpleCustomizationAction.TYPE_SHOW_DESKTOP,14,Android.Hardware.Input.SimpleCustomizationActionType,ShowDesktop,remove, +E,37.1,android/hardware/input/SimpleCustomizationAction.TYPE_VOICE_ASSIST,25,Android.Hardware.Input.SimpleCustomizationActionType,VoiceAssist,remove, +E,37.1,android/hardware/input/SimpleCustomizationAction.TYPE_VOLUME_DOWN,15,Android.Hardware.Input.SimpleCustomizationActionType,VolumeDown,remove, +E,37.1,android/hardware/input/SimpleCustomizationAction.TYPE_VOLUME_MUTE,16,Android.Hardware.Input.SimpleCustomizationActionType,VolumeMute,remove, +E,37.1,android/hardware/input/SimpleCustomizationAction.TYPE_VOLUME_UP,17,Android.Hardware.Input.SimpleCustomizationActionType,VolumeUp,remove, +E,37.1,android/hardware/input/UriCustomizationAction.TYPE_OPEN_FILE,1,Android.Hardware.Input.UriCustomizationActionType,OpenFile,remove, +E,37.1,android/hardware/input/UriCustomizationAction.TYPE_OPEN_FOLDER,2,Android.Hardware.Input.UriCustomizationActionType,OpenFolder,remove, +E,37.1,android/hardware/input/UriCustomizationAction.TYPE_OPEN_URL,3,Android.Hardware.Input.UriCustomizationActionType,OpenUrl,remove, E,37,android/hardware/lights/ColorSequence.INTERPOLATION_MODE_LINEAR,1,Android.Hardware.Lights.InterpolationMode,Linear,remove, E,37,android/hardware/lights/ColorSequence.INTERPOLATION_MODE_NONE,0,Android.Hardware.Lights.InterpolationMode,None,remove, E,37,android/hardware/lights/Light.LIGHT_CAPABILITY_ANIMATION,4,Android.Hardware.Lights.LightCapability,Animation,remove,flags @@ -3639,6 +3732,9 @@ E,35,android/health/connect/datatypes/PlannedExerciseStep.EXERCISE_CATEGORY_RECO E,35,android/health/connect/datatypes/PlannedExerciseStep.EXERCISE_CATEGORY_REST,2,Android.Health.Connect.DataTypes.PlannedExerciseStepExerciseCategory,Rest,remove, E,35,android/health/connect/datatypes/PlannedExerciseStep.EXERCISE_CATEGORY_UNKNOWN,0,Android.Health.Connect.DataTypes.PlannedExerciseStepExerciseCategory,Unknown,remove, E,35,android/health/connect/datatypes/PlannedExerciseStep.EXERCISE_CATEGORY_WARMUP,1,Android.Health.Connect.DataTypes.PlannedExerciseStepExerciseCategory,Warmup,remove, +E,37.1,android/health/connect/datatypes/Record.RECORD_TEMPORAL_TYPE_INSTANT,0,Android.Health.Connect.Datatypes.RecordTemporalType,Instant,remove, +E,37.1,android/health/connect/datatypes/Record.RECORD_TEMPORAL_TYPE_INTERVAL,1,Android.Health.Connect.Datatypes.RecordTemporalType,Interval,remove, +E,37.1,android/health/connect/datatypes/Record.RECORD_TEMPORAL_TYPE_LOCAL_DATE,2,Android.Health.Connect.Datatypes.RecordTemporalType,LocalDate,remove, E,34,android/health/connect/datatypes/SexualActivityRecord$SexualActivityProtectionUsed.PROTECTION_USED_PROTECTED,1,Android.Health.Connect.DataTypes.SexualActivityProtectionUsedType,Protected,remove, E,34,android/health/connect/datatypes/SexualActivityRecord$SexualActivityProtectionUsed.PROTECTION_USED_UNKNOWN,0,Android.Health.Connect.DataTypes.SexualActivityProtectionUsedType,Unknown,remove, E,34,android/health/connect/datatypes/SexualActivityRecord$SexualActivityProtectionUsed.PROTECTION_USED_UNPROTECTED,2,Android.Health.Connect.DataTypes.SexualActivityProtectionUsedType,Unprotected,remove, @@ -9465,6 +9561,7 @@ E,36.1,android/os/Build$VERSION_CODES_FULL.BAKLAVA_1,3600001,Android.OS.BuildVer E,36,android/os/Build$VERSION_CODES_FULL.BASE,100000,Android.OS.BuildVersionCodesFull,Base,remove, E,36,android/os/Build$VERSION_CODES_FULL.BASE_1_1,200000,Android.OS.BuildVersionCodesFull,Base11,remove, E,37,android/os/Build$VERSION_CODES_FULL.CINNAMON_BUN,3700000,Android.OS.BuildVersionCodesFull,CinnamonBun,remove, +E,37.1,android/os/Build$VERSION_CODES_FULL.CINNAMON_BUN_1,3700001,Android.OS.BuildVersionCodesFull,CinnamonBun1,remove, E,36,android/os/Build$VERSION_CODES_FULL.CUPCAKE,300000,Android.OS.BuildVersionCodesFull,Cupcake,remove, E,36,android/os/Build$VERSION_CODES_FULL.DONUT,400000,Android.OS.BuildVersionCodesFull,Donut,remove, E,36,android/os/Build$VERSION_CODES_FULL.ECLAIR,500000,Android.OS.BuildVersionCodesFull,Eclair,remove, @@ -10050,6 +10147,7 @@ E,24,android/provider/DocumentsContract$Document.FLAG_SUPPORTS_REMOVE,1024,Andro E,21,android/provider/DocumentsContract$Document.FLAG_SUPPORTS_RENAME,64,Android.Provider.DocumentContractFlags,SupportsRename,remove, E,37,android/provider/DocumentsContract$Document.FLAG_SUPPORTS_RESTORE,131072,Android.Provider.DocumentContractFlags,SupportsRestore,remove, E,26,android/provider/DocumentsContract$Document.FLAG_SUPPORTS_SETTINGS,2048,Android.Provider.DocumentContractFlags,SupportsSettings,remove, +E,37.1,android/provider/DocumentsContract$Document.FLAG_SUPPORTS_SUBTREE_SEARCH,262144,Android.Provider.DocumentContractFlags,SupportsSubtreeSearch,remove,flags E,19,android/provider/DocumentsContract$Document.FLAG_SUPPORTS_THUMBNAIL,1,Android.Provider.DocumentContractFlags,SupportsThumbnail,remove, E,37,android/provider/DocumentsContract$Document.FLAG_SUPPORTS_TRASH,65536,Android.Provider.DocumentContractFlags,SupportsTrash,remove, E,19,android/provider/DocumentsContract$Document.FLAG_SUPPORTS_WRITE,2,Android.Provider.DocumentContractFlags,SupportsWrite,remove, @@ -13729,6 +13827,8 @@ E,23,android/telecom/Call$Details.CAPABILITY_SUPPORTS_VT_REMOTE_BIDIRECTIONAL,30 E,23,android/telecom/Call$Details.CAPABILITY_SUPPORTS_VT_REMOTE_RX,1024,Android.Telecom.CallCapability,SupportsVtRemoteRx,keep, E,23,android/telecom/Call$Details.CAPABILITY_SUPPORTS_VT_REMOTE_TX,2048,Android.Telecom.CallCapability,SupportsVtRemoteTx,keep, E,23,android/telecom/Call$Details.CAPABILITY_SWAP_CONFERENCE,8,Android.Telecom.CallCapability,SwapConference,keep, +E,37.1,android/telecom/Call$Details.CAPABILITY_TRANSFER,67108864,Android.Telecom.CallCapability,Transfer,remove, +E,37.1,android/telecom/Call$Details.CAPABILITY_TRANSFER_CONSULTATIVE,134217728,Android.Telecom.CallCapability,TransferConsultative,remove, E,29,android/telecom/Call$Details.DIRECTION_INCOMING,0,Android.Telecom.CallDirection,Incoming,remove, E,29,android/telecom/Call$Details.DIRECTION_OUTGOING,1,Android.Telecom.CallDirection,Outgoing,remove, E,29,android/telecom/Call$Details.DIRECTION_UNKNOWN,-1,Android.Telecom.CallDirection,Unknown,remove, @@ -13895,6 +13995,7 @@ E,23,android/telecom/PhoneAccount.CAPABILITY_CALL_PROVIDER,2,Android.Telecom.Pho E,23,android/telecom/PhoneAccount.CAPABILITY_CALL_SUBJECT,64,Android.Telecom.PhoneAccountCapability,CallSubject,keep, E,37,android/telecom/PhoneAccount.CAPABILITY_CHANGE_RTT_CALL_TO_AUDIO_CALL,1048576,Android.Telecom.PhoneAccountCapability,ChangeRttCallToAudioCall,remove, E,23,android/telecom/PhoneAccount.CAPABILITY_CONNECTION_MANAGER,1,Android.Telecom.PhoneAccountCapability,ConnectionManager,keep, +E,37.1,android/telecom/PhoneAccount.CAPABILITY_OPT_OUT_OF_PREMIUM_NETWORK,2097152,Android.Telecom.PhoneAccountCapability,OptOutOfPremiumNetwork,remove, E,23,android/telecom/PhoneAccount.CAPABILITY_PLACE_EMERGENCY_CALLS,16,Android.Telecom.PhoneAccountCapability,PlaceEmergencyCalls,keep, E,26,android/telecom/PhoneAccount.CAPABILITY_RTT,4096,Android.Telecom.PhoneAccountCapability,Rtt,keep, E,26,android/telecom/PhoneAccount.CAPABILITY_SELF_MANAGED,2048,Android.Telecom.PhoneAccountCapability,SelfManaged,keep, @@ -16238,6 +16339,7 @@ E,36,android/view/KeyEvent.KEYCODE_CLOSE,321,Android.Views.Keycode,Close,remove, E,10,android/view/KeyEvent.KEYCODE_COMMA,55,Android.Views.Keycode,Comma,keep, E,15,android/view/KeyEvent.KEYCODE_CONTACTS,207,Android.Views.Keycode,Contacts,keep, E,37,android/view/KeyEvent.KEYCODE_CONTEXTUAL_INSERT,340,Android.Views.Keycode,ContextualInsert,remove, +E,37.1,android/view/KeyEvent.KEYCODE_CONTEXTUAL_QUERY,341,Android.Views.Keycode,ContextualQuery,remove, E,37,android/view/KeyEvent.KEYCODE_CONTEXTUAL_SEARCH,339,Android.Views.Keycode,ContextualSearch,remove, E,24,android/view/KeyEvent.KEYCODE_COPY,278,Android.Views.Keycode,Copy,keep, E,15,android/view/KeyEvent.KEYCODE_CTRL_LEFT,113,Android.Views.Keycode,CtrlLeft,keep, @@ -17193,6 +17295,12 @@ E,10,android/widget/ListView.CHOICE_MODE_NONE,0,Android.Widget.ChoiceMode,None,r E,10,android/widget/ListView.CHOICE_MODE_SINGLE,1,Android.Widget.ChoiceMode,Single,remove, I,29,android/widget/Magnifier.SOURCE_BOUND_MAX_IN_SURFACE,0,,,, I,29,android/widget/Magnifier.SOURCE_BOUND_MAX_VISIBLE,1,,,, +E,37.1,android/widget/photopicker/EmbeddedPhotoPickerFeatureInfo.TAB_ALBUMS,0,Android.Widget.Photopicker.EmbeddedPhotoPickerLaunchTab,Albums,remove, +E,37.1,android/widget/photopicker/EmbeddedPhotoPickerFeatureInfo.TAB_IMAGES,1,Android.Widget.Photopicker.EmbeddedPhotoPickerLaunchTab,Images,remove, +E,37.1,android/widget/photopicker/EmbeddedPhotoPickerFeatureInfo.TAB_UNSET,-1,Android.Widget.Photopicker.EmbeddedPhotoPickerLaunchTab,Unset,remove, +R,37.1,android/widget/photopicker/EmbeddedPhotoPickerUiCustomizationParams.ASPECT_RATIO_PORTRAIT_9_16,1,,,remove, +R,37.1,android/widget/photopicker/EmbeddedPhotoPickerUiCustomizationParams.ASPECT_RATIO_SQUARE_1_1,0,,,remove, +R,37.1,android/widget/photopicker/EmbeddedPhotoPickerUiCustomizationParams.ASPECT_RATIO_UNDEFINED,-1,,,remove, E,37,android/widget/photopicker/PhotoPickerUiCustomizationParams.ASPECT_RATIO_PORTRAIT_9_16,1,Android.Widget.Photopicker.AspectRatio,Portrait916,remove, E,37,android/widget/photopicker/PhotoPickerUiCustomizationParams.ASPECT_RATIO_SQUARE_1_1,0,Android.Widget.Photopicker.AspectRatio,Square11,remove, E,37,android/widget/photopicker/PhotoPickerUiCustomizationParams.ASPECT_RATIO_UNDEFINED,-1,Android.Widget.Photopicker.AspectRatio,Undefined,remove, diff --git a/src/Mono.Android/methodmap.csv b/src/Mono.Android/methodmap.csv index bab127e450d..2bfde0f4f34 100644 --- a/src/Mono.Android/methodmap.csv +++ b/src/Mono.Android/methodmap.csv @@ -4637,3 +4637,19 @@ 37,android/widget/photopicker,PhotoPickerUiCustomizationParams,writeToParcel,flags,Android.OS.ParcelableWriteFlags 37,android/widget/photopicker,PhotoPickerUiCustomizationParams$Builder,setAspectRatio,aspectRatio,Android.Widget.Photopicker.AspectRatio 37,android/widget,RemoteViews,setViewPadding,units,Android.Util.ComplexUnitType +37.1,android.hardware.hid,HidDevice,getTransport,return,Android.Hardware.Hid.HidDeviceTransport +37.1,android.hardware.input,ButtonCustomizationTrigger,ctor,buttonCode,Android.Hardware.Input.CustomizableButton +37.1,android.hardware.input,ButtonCustomizationTrigger,getButtonCode,return,Android.Hardware.Input.CustomizableButton +37.1,android.hardware.input,InputManager,isButtonAllowedForCustomization,buttonCode,Android.Hardware.Input.CustomizableButton +37.1,android.hardware.input,InputManager,isKeyAllowedForCustomization,keyCode,Android.Hardware.Input.CustomizableKeyCode +37.1,android.hardware.input,KeyCustomizationTrigger,ctor,keyCode,Android.Hardware.Input.CustomizableKeyCode +37.1,android.hardware.input,KeyCustomizationTrigger,getKeyCode,return,Android.Hardware.Input.CustomizableKeyCode +37.1,android.hardware.input,SimpleCustomizationAction,ctor,actionType,Android.Hardware.Input.SimpleCustomizationActionType +37.1,android.hardware.input,SimpleCustomizationAction,getType,return,Android.Hardware.Input.SimpleCustomizationActionType +37.1,android.hardware.input,UriCustomizationAction,ctor,actionType,Android.Hardware.Input.UriCustomizationActionType +37.1,android.hardware.input,UriCustomizationAction,getType,return,Android.Hardware.Input.UriCustomizationActionType +37.1,android.widget.photopicker,EmbeddedPhotoPickerFeatureInfo,getLaunchTab,return,Android.Widget.Photopicker.EmbeddedPhotoPickerLaunchTab +37.1,android.widget.photopicker,EmbeddedPhotoPickerFeatureInfo.Builder,setLaunchTab,launchTab,Android.Widget.Photopicker.EmbeddedPhotoPickerLaunchTab +37.1,android.widget.photopicker,EmbeddedPhotoPickerUiCustomizationParams,getAspectRatio,return,Android.Widget.Photopicker.AspectRatio +37.1,android.widget.photopicker,EmbeddedPhotoPickerUiCustomizationParams,writeToParcel,flags,Android.OS.ParcelableWriteFlags +37.1,android.widget.photopicker,EmbeddedPhotoPickerUiCustomizationParams.Builder,setAspectRatio,aspectRatio,Android.Widget.Photopicker.AspectRatio From e84783edba9561a8c2aee2ee58b304485aab797d Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Thu, 20 Aug 2026 10:34:45 -0500 Subject: [PATCH 2/3] [Mono.Android] Restore manifest API history Restore the pre-37 manifest definitions and required metadata entries that were lost when API 37.1 was regenerated from an incomplete platform set. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .../manifest-definition.xml | 1133 +++++++++-------- .../manifest-attribute-codegen/metadata.xml | 4 + 2 files changed, 573 insertions(+), 564 deletions(-) diff --git a/build-tools/manifest-attribute-codegen/manifest-definition.xml b/build-tools/manifest-attribute-codegen/manifest-definition.xml index 144ec459b04..cc10d5b1041 100644 --- a/build-tools/manifest-attribute-codegen/manifest-definition.xml +++ b/build-tools/manifest-attribute-codegen/manifest-definition.xml @@ -1,100 +1,101 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + manifest - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -103,408 +104,300 @@ - - manifest - - - - - attribution - - - + manifest - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + manifest - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + manifest - - - - - - - - + + + + + + + + manifest - - - - - - + + + + + + - - - - - - - + manifest - - - - - + + + + + - + manifest - - - - - - - + + + + - + manifest - - - - - - - - - - manifest - - - - manifest - - - queries - - - - queries - - - queries - - - - application - - - - - application - - - - - - - application - - - - - - application - - - - - application - - + + + + - + application - - - + + - - uses-static-library - - - - application - - - - - - - + manifest - - - - - - - - - - - + + + + + + + + + + + manifest - + - + manifest - + - + application - - - processes - - - - - - - - - - processes - - - - processes - - - - application - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - + provider - - - - - + + + + + - + provider - - - - - - - - - - + + + + + + + + + + application - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + application - - - - - - - - application - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + application - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + application - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + application activity receiver @@ -513,59 +406,44 @@ permission permission-group instrumentation - - - - - - application - activity - receiver - provider - service - - - + + + - + activity receiver service - - - - - - - - - - + + + + + + + + + + intent-filter - + - + intent-filter - - - - intent-filter - uri-relative-filter-group - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + @@ -577,104 +455,231 @@ - + intent-filter - + - + manifest - - - - - - - - - - - - + + + + + + + + + + + + compatible-screens - - + + + + + + + + + + + + + intent + - - supports-input - + + intent + + - + manifest - - + + - + manifest - - - - - - - - - - - - - - - - - - - intent - + - - intent - - + + supports-input + - - - + + + - - + + - + + + + + manifest + + + + + + + + + + manifest - + - + activity - - - - - - - - + + + + + + + + + + manifest - + + + + application + + + - + + application + + + + + manifest - + + + + uses-static-library + + + + application + + + + + + + + application + + + + + manifest + + + + + + attribution + + + + + + + + manifest + + + queries + + + + queries + + + queries + - + application - - - + + processes + + + + + + + + + + processes + + + + processes + + + + + + + + + + application + + + + + application + activity + receiver + provider + service + + + + + + application + + + + + application + + + + + + + application + + + + + + + manifest - + install-constraints - + + + + intent-filter + permission diff --git a/build-tools/manifest-attribute-codegen/metadata.xml b/build-tools/manifest-attribute-codegen/metadata.xml index ba9ed3d3a8d..0a3331dc47c 100644 --- a/build-tools/manifest-attribute-codegen/metadata.xml +++ b/build-tools/manifest-attribute-codegen/metadata.xml @@ -149,6 +149,7 @@ + @@ -226,6 +227,7 @@ + @@ -287,6 +289,8 @@ + + From eff5ae3ef78b00003b7d681b85105ea6d06aa2ac Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Thu, 20 Aug 2026 12:33:44 -0500 Subject: [PATCH 3/3] [docs] Avoid duplicate method map export Clarify that the normalized BindingStudio output is the final method map so contributors do not append the raw JNI-formatted rows a second time. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- Documentation/workflow/HowToAddNewApiLevel.md | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/Documentation/workflow/HowToAddNewApiLevel.md b/Documentation/workflow/HowToAddNewApiLevel.md index 1303b1f2b4f..d7c0f3f4f38 100644 --- a/Documentation/workflow/HowToAddNewApiLevel.md +++ b/Documentation/workflow/HowToAddNewApiLevel.md @@ -612,15 +612,10 @@ are automatically converted into `Android.Graphics.Color`. ### 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: - - dotnet/android/src/Mono.Android/methodmap.csv +The normalized `new-methodmap2.csv` output appended in the **Mapping methods** section +is the final method map. Do not export and append the BindingStudio output again, as +the raw output uses JNI package and nested-type syntax that `methodmap.csv` does not +support. Congrats! Enumification is complete!