Skip to content

.NET 11 GA, Android 37.2.31

Latest

Choose a tag to compare

@jonathanpeppers jonathanpeppers released this 10 Nov 19:48
· 462 commits to main since this release
37.2.31
c6663f2

The latest .NET MAUI component is available in Visual Studio 2026 18.12 or higher:

image

You can also download the .NET 11 SDK, followed by:

> dotnet workload install android
...
Successfully installed workload(s) android.

To verify installation:

> dotnet workload list

Installed Workload Id      Manifest Version                            Installation Source
--------------------------------------------------------------------------------------------
android                    37.2.0-rc.2.84/11.0.100                     SDK 11.0.100

Prepare for Google Play code optimization requirements

Starting in February 2027, Google Play requires at least 25% coverage for each of code optimization, shrinking, and obfuscation. This applies to apps with more than 10 MB of DEX code and games with more than 50 MB. See the Google Play requirements and original announcement.

On .NET 11, enable R8 for Release builds in your .csproj file:

<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
  <AndroidLinkTool>r8</AndroidLinkTool>
</PropertyGroup>

When R8 is enabled, .NET 11 defaults AndroidR8ObfuscationMode to private-members. You don't need to set this property unless your project overrides it. This differs from .NET 10, where the default is disabled.

These settings apply to Java bytecode (DEX), not managed .NET assemblies. Test your Release build, then check the optimization, shrinking, and obfuscation percentages in Google Play Console's App bundle explorer to confirm that your uploaded bundle meets all three thresholds.

What's Changed

  • [release/11.0.1xx] [native] Clarify normal FastDev assembly loading logs by @github-actions[bot] in #12955
  • [release/11.0.1xx] Use stable 37.2.x branding by @jonathanpeppers in #12958
  • [release/11.0.1xx] Reject legacy AOT disable on CoreCLR by @jonathanpeppers in #12960
  • [release/11.0.1xx] Keep generated AAPT2 rules in R8 inputs on incremental builds by @github-actions[bot] in #12974
  • [release/11.0.1xx] [xabt] Keep AAPT2 rules under the captured working directory by @github-actions[bot] in #12989
  • [release/11.0.1xx] Preserve AAR consumer rules on cache hits by @simonrozsival in #13077
  • [release/11.0.1xx] Bump R8 from 9.4.24 to 9.5.23 by @jonathanpeppers in #13097
  • [release/11.0.1xx] [Microsoft.Android.Build.BaseTasks] Guard against null parent directory in GetNativeLibraryAbi by @github-actions[bot] in #13099
  • [Xamarin.Android.Build.Tasks] Log NativeAOT preview as information in .NET 11 by @simonrozsival in #13009
  • [release/11.0.1xx] [ci] Enable Default Deny network isolation by @github-actions[bot] in #13121
  • [release/11.0.1xx] [Microsoft.Android.Templates] Add framework selection by @github-actions[bot] in #13131
  • [release/11.0.1xx] Fix AndroidMessageHandler upload I/O exception translation by @github-actions[bot] in #13157
  • [Mono.Android] Obsolete JNI delegate wrapping in .NET 11 by @simonrozsival in #13128
  • [release/11.0.1xx] [Xamarin.Installer.Build.Tasks] Validate OpenJDK downloads by @simonrozsival in #13212
  • [release/11.0.1xx] [ci] Prevent MAUI from changing the Android build number by @github-actions[bot] in #13231
  • [release/11.0.1xx] [ci] Move signing jobs to the current MicroBuild pool by @github-actions[bot] in #13229
  • [release/11.0.1xx] [Xamarin.Installer.AndroidSDK] Stop on archive checksum failures by @jonathanpeppers in #13234
  • [release/11.0.1xx] Fix NativeAOT fatal exception termination by @jonathanpeppers in #13238
  • [release/11.0.1xx] [R8] Preserve bound Java fields in generated keep rules by @jonathanpeppers in #13239
  • [release/11.0.1xx] [native] Fix assembly store initialization race by @jonathanpeppers in #13264
  • [release/11.0.1xx] Preserve explicit Java exports during full trimming by @simonrozsival in #13269
  • [release/11.0.1xx] [native] Require opt-in for assembly loading logs by @simonrozsival in #13273
  • [release/11.0.1xx] [Java.Interop] Release native peer control blocks on finalization by @github-actions[bot] in #13294
  • [release/11.0.1xx] [Java.Interop] Dispose unregistered peers normally by @simonrozsival in #13299
  • [release/11.0.1xx] [Microsoft.Android.Sdk.TrimmableTypeMap] Honor component JNI names by @simonrozsival in #13306
  • [build] Keep Net11 manifest MSI versions above previews by @Redth in #13417

Full Changelog: 37.2.0-rc.2.84...37.2.31