Releases: dotnet/android
.NET 11 Preview 3, Android 36.99.0-preview.3.10
This release is not yet available from the Visual Studio installer. Download the .NET 11 Preview 3 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 36.99.0-preview.3.10/11.0.100-preview.3 SDK 11.0.100-preview.3
Android 17 / API 37 Preview Support
We’re grateful to the Uno Platform team for their deep collaboration with the .NET MAUI team in preparation for .NET 11 Preview 3. Their contributions helped ensure .NET for Android is aligned with Google’s latest platform updates, enabling developers to take advantage of Android 17 previews and API 37 right away. This kind of partnership strengthens the .NET ecosystem and reflects our shared commitment to delivering high-quality, cross-platform developer experiences.
To opt into API-37, you can change your .csproj to:
<PropertyGroup>
<TargetFramework>net11.0-android37</TargetFramework>
<EnablePreviewFeatures>true</EnablePreviewFeatures>
</PropertyGroup>To install API-37 in Visual Studio's SDK manager, you can use Tools > Android > Android SDK Manager > Repository > Full List:
Note
By default the SDK manager will install to C:\Program Files (x86)\Android\android-sdk\platforms\android-37.0, which will not be automatically located by .NET for Android. Temporarily renamed the folder to C:\Program Files (x86)\Android\android-sdk\platforms\android-37, while we address this in a future release.
See our API-37 HPKE Encryption Sample for a full example on calling new APIs available in Android 17.
What's Changed
- $(AndroidPackVersionSuffix)=preview.3; main is .NET 11 preview 3 by @jonathanpeppers in #10840
- Remove UseLatestAndroidPlatformSdk by @Copilot in #10839
- [TrimmableTypeMap] Scanner unit tests by @simonrozsival in #10813
- Replace [DllImport] with [LibraryImport] for runtime P/Invokes by @Copilot in #10763
- Fix XA3006: Sanitize whitespace-only parameter names in marshal methods LLVM IR generation by @Copilot in #10835
- Fix net.android.init.gradle.kts for Gradle 9.x compatibility by @Copilot in #10738
- Fix _TouchAndroidLinkFlag skipping on NativeAOT incremental builds by @sbomer in #10849
- Fix emulator readiness check for package manager service by @Copilot in #10846
- Support for exempting native libraries from JNI preload by @grendello in #10787
- Default .NET 11 to target net11.0-android36.1 only by @jonathanpeppers in #10829
- [Mono.Android] Bind API-CinnamonBun Beta 1 by @jonpryor in #10824
- [dotnet run]
ComputeAvailableDeviceslists available emulators and auto-boot on deploy by @jonathanpeppers in #10826 - [skills] create
read-assembly-storeskill by @jonathanpeppers in #10867 - [Mono.Android] Bind API-CinnamonBun Beta 2 by @jonpryor in #10866
- Fix AndroidDeviceUserId not passed to
am starton debug/run by @Copilot in #10861 - [build] Ignore MAUI public API analyzer errors (RS0016) in MAUI integration lane by @jonathanpeppers in #10884
- [skills] Add AZDO build investigator skill by @jonathanpeppers in #10885
- Fix typos and documentation wording from PR #10879 review by @Copilot in #10881
- [build-tools] Fix CI download failures, upgrade xa-prep-tasks and BootstrapTasks to net10.0 by @jonathanpeppers in #10886
- uses-feature.version should be settable according to android documentation by @Happypig375 in #10890
- Add TaskFactory="TaskHostFactory" Runtime="NET" to xa-prep-tasks and BootstrapTasks UsingTask elements by @Copilot in #10893
- Use JDK 21 instead of 11 by @Happypig375 in #10897
- Bump to google/bundletool/1.18.3 by @jonathanpeppers in #10892
- [tests] Clear ResolvedCodeAnalysisRuleSet to fix CoreCompile incrementality on CI by @jonathanpeppers in #10900
- [docs] Sync Documentation/docs-mobile with dotnet/docs-mobile by @jonathanpeppers in #10907
- [TrimmableTypeMap] Integration parity tests by @simonrozsival in #10827
- [TrimmableTypeMap] Add TypeMap proxy groundwork with CreateInstance by @simonrozsival in #10808
- Use shared AdbRunner from android-tools for device listing by @rmarinho in #10916
- [skills] Add android-reviewer skill for PR code reviews by @jonathanpeppers in #10918
- Add *.gdn.sarif to .gitignore by @Copilot in #10926
- [TrimmableTypeMap] Add UCO wrappers, JCW generator, and JNI signature helpers by @simonrozsival in #10917
- android-reviewer: @copilot prefix for Copilot-authored PRs by @simonrozsival in #10930
- Ignore submodules in fail-on-dirty-tree CI check by @Copilot in #10927
- Fix GC live lock issue in rapid UI switching by @Copilot in #10856
- Remove checked-in test.keystore and generate it dynamically during tests by @Copilot in #10923
- [xabt] Validate CustomJniInitFunctions names are valid C identifiers by @jonathanpeppers in #10935
- Fix flaky HttpListener tests by using dynamic port allocation by @Copilot in #10939
- Skip incremental build timing assertions for NativeAOT by @Copilot in #10937
- [xabt] Filter non-Android .so files from _ResolvedNativeLibraries by @jonathanpeppers in #10936
- Add HasMetadata checks to all PEReader code paths to handle native Windows DLLs by @Copilot in #10938
- Move StripEmbeddedLibraries to MSBuild task by @sbomer in #10894
- [build] Scope BinSkim scanning to build output only by @jonathanpeppers in #10940
- [tests] Treat IOException as transient network error in DownloadedCache by @jonathanpeppers in #10951
- [TrimmableTypeMap] Normalize dots to slashes in [Register] attribute JNI names by @simonrozsival in #10947
- [tests] run
Java.Interop-Testson NativeAOT by @jonathanpeppers in #10496 - Bump com.android.tools.build:manifest-merger from 31.12.2 to 31.13.0 in /src/manifestmerger by @dependabot[bot] in #10466
- [TrimmableTypeMap] Detect overrides and constructors in JavaPeerScanner by @simonrozsival in #10932
- [build] Fix BinSkim
analyzeTargetGlobpattern by @jonathanpeppers in #10953 - Bump com.android.tools.build:manifest-merger from 31.13.0 to 32.1.0 in /src/manifestmerger by @dependabot[bot] in #10955
- [TrimmableTypeMap] Skip registerNatives for Application/Instrumentation types by @simonrozsival in #10957
- Update documentation to reflect .aab fast deployment support by @Copilot in #10963
- Ignore transient IO errors in on-device HTTP client handler tests by @Copilot in #10962
- [build] Fix BinSkim failure in 'Convert NuGet to MSI' job by @jonathanpeppers in #10961
- [build] Revert BinSkim analyzeTargetGlob customization by @jonathanpeppers in #10964
- [TrimmableTypeMap] Add GenerateTrimmableTypeMap MSBuild task and targets by @simonrozsival in #10924
- Backport
dotnet-watchchanges to main/.NET 11 by @jonathanpeppers in #10960 - [Mono.Android] Fix UnhandledExceptionRaiser not firing in .NET 10 by @jonathanpeppers in #10966
- [xaprepare] Retry runtime pack restore up to 3 times by @jonathanpeppers in #10970
- Bump Android emulator from 32.1.9 to 36.4.10 by @rmarinho in #10971
- Bump
$(AndroidPackVersion)to 36.99.0 by @jonathanpeppers in #10976 - Update copilot-instructions.md with learnings from recent PRs by @rmarinho in https://github.com/dotnet/andr...
.NET 10 Servicing, Android 36.1.53
The latest .NET MAUI component is available in Visual Studio 2026 or higher:
You can also download the .NET 10 SDK directly, followed by:
> dotnet workload install android --version 10.0.202
...
Successfully installed workload(s) android.
To verify installation:
> dotnet workload list
Installed Workload Id Manifest Version Installation Source
--------------------------------------------------------------------------------------------
android 36.1.53/10.0.100 SDK 10.0.100
What's Changed
- [xabt] support
@(RuntimeEnvironmentVariable)items by @jonathanpeppers in #10770 - [release/10.0.1xx] Support for exempting native libraries from JNI preload by @grendello in #10879
- [Mono.Android] Fix UnhandledExceptionRaiser not firing in .NET 10 by @jonathanpeppers in #10966
- [xabt]
dotnet watchsupport, based on env vars by @jonathanpeppers in #10778
Full Changelog: 36.1.43...36.1.53
.NET 11 Preview 2, Android 36.1.99-preview.2.154
This release is not yet available from the Visual Studio installer. Download the .NET 11 Preview 2 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 36.1.99-preview.2.154/11.0.100-preview.2 SDK 11.0.100-preview.2
What's Changed
- $(AndroidPackVersionSuffix)=preview.2; main is .NET 11 preview 2 by @jonathanpeppers in #10725
- [tests] restore testing
net10.0-androidprojects in .NET 11 by @jonathanpeppers in #10729 - [tests] verify
36.1doesn't fallback to36by @jonathanpeppers in #10731 - [xabt] fix
$(AdbTarget)passed in by @jonathanpeppers in #10740 - [xabt] use a response file when calling
java r8.jarby @Copilot in #10716 - Add UseMonoRuntime condition to API levels 21, 22, 23 in SupportedPlatforms generator by @Copilot in #10753
- [Mono.Android] fix
$DOTNET_STARTUP_HOOKSon CoreCLR by @jonathanpeppers in #10755 - [tests] remove "flaky" MSBuild perf tests by @jonathanpeppers in #10756
- Fix MSB4096 error with user-defined TrimmerRootAssembly items lacking RootMode metadata by @Copilot in #10759
- [xaprepare] add
--dotnet-sdk-archiveswitch by @jonathanpeppers in #10769 - Unify LangVersion to "latest" across projects by @Copilot in #10766
- [marshal methods] Make AndroidEnvironmentInternal.UnhandledException public by @Copilot in #10775
- Bump com.android.tools:r8 from 8.13.19 to 9.0.32 in /src/r8 by @dependabot[bot] in #10780
- [native build] Use a single source of truth for NDK API levels by @grendello in #10754
- [TrimmableTypeMap] Extract typemap targets into dedicated files by @simonrozsival in #10797
- Fix NativeAOT to use AndroidLinkMode=Full instead of SdkOnly by @Copilot in #10809
- Migrate GenerateProguardConfiguration from ILLink step to MSBuild task by @sbomer in #10694
- [NativeAOT] Fix application linking with API level > 21 by @grendello in #10812
- [TrimmableTypeMap] Java peer scanner core by @simonrozsival in #10823
- [build] Use all available CPU cores for NUnit test parallelism by @jonathanpeppers in #10834
- [build] Add MSBuild + Emulator test stage to
dnceng-publicpipeline by @jonathanpeppers in #10828
Full Changelog: 36.1.99-preview.1.120...36.1.99-preview.2.154
.NET 10 Servicing, Android 36.1.43
The latest .NET MAUI component is available in Visual Studio 2026 or higher:
You can also download the .NET 10 SDK directly, followed by:
> dotnet workload install android --version 10.0.104
...
Successfully installed workload(s) android.
To verify installation:
> dotnet workload list
Installed Workload Id Manifest Version Installation Source
--------------------------------------------------------------------------------------------
android 36.1.43/10.0.100 SDK 10.0.100
What's Changed
- [Mono.Android] fix $DOTNET_STARTUP_HOOKS on CoreCLR by @jonathanpeppers in #10755
- [xabt] fix $(AdbTarget) passed in by @jonathanpeppers in #10740
- [NativeAOT] set environment variables before the app .so is loaded by @grendello in #10709
- [NativeAOT] set environment variables before the app .so is loaded by @jonathanpeppers in #10768
- [NativeAOT] fix Java string escaping and logging in environment variables support code by @copilot-swe-agent in #10771
- [Mono.Android] Ensure HttpContent stream rewinds on exceptions by @copilot-swe-agent in #10571
- [release/10.0.1xx] update to 10.0.4 runtime workloads by @jonathanpeppers in #10845
Full Changelog: 36.1.30...36.1.43
.NET 11 Preview 1, Android 36.1.99-preview.1.120
This release is not yet available from the Visual Studio installer. Download the .NET 11 Preview 1 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 36.1.99-preview.1.120/11.0.100-preview.1 SDK 11.0.100-preview.1
What's Changed
- $(AndroidPackVersionSuffix)=preview.1; main is 36.1.99 by @jonathanpeppers in #10512
- Remove ApplyPreserveAttribute, warn when PreserveAttribute is referenced in assembly by @jtschuster in #10449
- Remove obsolete System.AndroidPlatform methods and native implementations by @Copilot in #10385
- [Mono.Android] Enumify API-36.1 by @jonpryor in #10515
- Correctly handle file path that contains spaces by @hez2010 in #10537
- [xabt] pass in
$(SupportedOSPlatformVersion)to<Aapt2Link/>by @jonathanpeppers in #10538 - Fix JNI preload cache generation by @grendello in #10547
- [xabt] additional fixes for non-integer API levels by @jonathanpeppers in #10536
- [xabt] fix incremental design-time builds by @jonathanpeppers in #10564
- Add quickstart guide for Android memory dump by @fekberg in #10559
- [docs] improve "building" docs by @jonathanpeppers in #10478
- [nativeaot] Fix+improve gref logging by @grendello in #10572
- [Xamarin.Android.Build.Tasks] don't set
$(UseMonoRuntime)by default by @jonathanpeppers in #10527 - [build] fix broken incrementality of
Mono.Android.csprojby @jonathanpeppers in #10578 - Fix: Ensure HttpContent stream rewinds on exception to support retry scenarios by @Copilot in #10571
- [BootstrapTasks] add retry logic to
<StartAndroidEmulator/>by @jonathanpeppers in #10577 - [xabt] implement
$(Device)andComputeAvailableDevicesMSBuild target by @jonathanpeppers in #10576 - Enable more tests to run on all 3 runtimes, part 1 by @grendello in #10573
- Enable more tests to run on all 3 runtimes, part 2 by @grendello in #10580
- Enable more tests to run on all 3 runtimes, part 3 by @grendello in #10585
- Enable more tests to run on all 3 runtimes, part 4 by @grendello in #10591
- Enable more tests to run on all 3 runtimes, part 5 by @grendello in #10592
- Bump com.android.tools:r8 from 8.11.18 to 8.13.17 in /src/r8 by @dependabot[bot] in #10603
- [build] Relax 16k native library alignment checks by @grendello in #10608
- [tests] Add test for System.IO.Hashing 10.0.0 by @jonathanpeppers in #10614
- [build] use dotnet/maui/main for
MAUI Integrationlane by @jonathanpeppers in #10618 - Enable more tests to run on all 3 runtimes, part 7 by @grendello in #10598
- Enable more tests to run on all 3 runtimes, part 8 by @grendello in #10616
- Enable more tests to run on all 3 runtimes, part 9 by @grendello in #10619
- Enable more tests to run on all 3 runtimes, part 10 by @grendello in #10621
- [xabt] title case
ComputeAvailableDevicesby @jonathanpeppers in #10623 - [build] cache
FindNugetGlobalPackageFolder()to fix test timeouts by @jonathanpeppers in #10626 - [copilot] free up disk space by removing pre-installed Android SDK by @jonathanpeppers in #10629
- [xabt] Implement
DeployToDevicetarget by @jonathanpeppers in #10631 - Fix outdated contents in WorkloadDependencies.json by @Copilot in #10627
- Rename assembly stores in the APK/AAB archive to
libassembly-store.soby @grendello in #10638 - Enable more tests to run on all 3 runtimes, part 11 by @grendello in #10625
- Enable more tests to run on all 3 runtimes, part 12 by @grendello in #10632
- [xabt] fix
DeployToDevicetarget w/ Fast Deployment by @jonathanpeppers in #10641 - [xaprepare] increase
ProcessRunnertimeout by @jonathanpeppers in #10651 - [build] setup public pipeline on
dnceng-publicby @jonathanpeppers in #10636 - [Testing] Change the dotnet/maui repository branch to net11.0 by @simonrozsival in #10661
- [CoreCLR] Propagate unhandled exceptions by @simonrozsival in #10658
- [tests]
Assert.Inconclusive()tests with http errors by @jonathanpeppers in #10650 - [Xamarin.Android.Build.Tasks] Set UseMonoRuntime for Debug configuration by @simonrozsival in #10662
- [tests] skip
Windows > Tests > Debuggingif emulator fails to start by @jonathanpeppers in #10663 - [tests] ignore
nodename nor servname provided, or not knownby @jonathanpeppers in #10665 - [xabt]
ComputeRunArgumentstarget no longer needs to deploy by @jonathanpeppers in #10640 - [Microsoft.Android.Run] Add simple console app for
dotnet runby @jonathanpeppers in #10646 - Enable more tests to run on all 3 runtimes, part 14 by @grendello in #10644
- [tests] restore
SSLcategory by @jonathanpeppers in #10495 - [coreclr] fix string
runtimeconfig.jsonvalues by @jonathanpeppers in #10669 - [tests] ignore 404 on
AndroidMavenLibrary_AllDependenciesAreVerifiedby @jonathanpeppers in #10666 - [tests] improve assertions in
CancelRequestViaProxy()by @jonathanpeppers in #10671 - [illink] set
$(StartupHookSupport)=falseonly for Release mode by @jonathanpeppers in #10670 - Bump com.android.tools:r8 from 8.13.17 to 8.13.19 in /src/r8 by @dependabot[bot] in #10677
- [tests] remove
WebContentFileNameFromAzureby @jonathanpeppers in #10680 - [build]
net11.0target framework by @jonathanpeppers in #10664 - [build] Disable debug spew from the localizer by @grendello in #10673
- [Microsoft.Android.Run] target
$(DotNetStableTargetFramework)by @jonathanpeppers in #10692 - Add [Flags] to Android.Print.DuplexMode by @aberus in #10690
- Add PrinterCapabilitiesInfo color modes to methodmap by @aberus in #10689
- Migrate WarnOnPreserveAttribute from ILLink step to MSBuild task by @sbomer in #10693
- Add [Flags] to Android.Print.PrintColorMode by @aberus in #10688
- Remove referenceassemblies-pcl dependency from Arch and Fedora Linux by @Copilot in #10696
- [tests] ignore transient "Broken pipe" network errors by @jonathanpeppers in #10681
- [build] remove
$(TargetsCurrent)by @jonathanpeppers in #10698 - Enable more tests to run on all 3 runtimes, part 6 by @grendello in #10595
- [xabt]
GeneratePackageManagerJavaonly writes main assembly by @jonathanpeppers in #10710 - [NativeAOT] set environment variables before the app .so is loaded by @grendello in #10709
- [build] fix
MAUI integrationlane by @jonathanpeppers in #10712 - [tests] add test for package-less
[Register("CustomView"]by @Copilot in #10717
New Contributors
- @jtschuster made their first contribution in #10449
- @hez2010 made their first contribution in #10537
- @fekberg made their first contribution in #10559
- @aberus made their first contribution in #10690
Full Changelog: 36.1.2...36.1.99-preview.1.120
.NET 10 Servicing, Android 36.1.30
The latest .NET MAUI component is available in Visual Studio 2026 or higher:
You can also download the .NET 10 SDK directly, followed by:
> dotnet workload install android --version 10.0.103
...
Successfully installed workload(s) android.
To verify installation:
> dotnet workload list
Installed Workload Id Manifest Version Installation Source
--------------------------------------------------------------------------------------------
android 36.1.30/10.0.100 SDK 10.0.100
What's Changed
- [CoreCLR] Propagate unhandled exceptions by @simonrozsival in #10658
- [CoreCLR] fix string
runtimeconfig.jsonvalues by @jonathanpeppers in #10669 - [illink] set $(StartupHookSupport)=false only for Release mode by @jonathanpeppers in #10670
- [release/10.0.1xx] backport improved
dotnet-runsupport by @jonathanpeppers in #10706 - [release/10.0.1xx] set
$(UseDefaultPublishRuntimeIdentifier)=falseby @jonathanpeppers in #10730
Full Changelog: 36.1.12...36.1.30
.NET 10 Servicing, Android 36.1.12
The latest .NET MAUI component is available in Visual Studio 2026 or higher:
You can also download the .NET 10 SDK directly, followed by:
> dotnet workload install android --version 10.0.102
...
Successfully installed workload(s) android.
To verify installation:
> dotnet workload list
Installed Workload Id Manifest Version Installation Source
--------------------------------------------------------------------------------------------
android 36.1.12/10.0.100 SDK 10.0.100
What's Changed
- [release/10.0.1xx] bump to dotnet/java-interop@66312f7a by @jonathanpeppers in #10566
- [build] Relax 16k native library alignment checks by @grendello in #10608
- Fix outdated contents in WorkloadDependencies.json by @jonathanpeppers in #10627
- [nativeaot] Fix+improve gref logging by @grendello in #10572
- [release/10.0.1xx] Rename assembly stores in the APK/AAB archive to
libassembly-store.soby @grendello in #10642
Full Changelog: 36.1.2...36.1.12
.NET 10 GA, Android 36.1.2
The latest .NET MAUI component is available in Visual Studio 2026 or higher:
You can also download the .NET 10 SDK directly, followed by:
> dotnet workload install android --version 10.0.100.1
...
Successfully installed workload(s) android.
To verify installation:
> dotnet workload list
Installed Workload Id Manifest Version Installation Source
--------------------------------------------------------------------------------------------
android 36.1.2/10.0.100 SDK 10.0.100
Android 36.1
To try out the new APIs, you can opt your project into the new net10.0-android36.1 target framework:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0-android36.1</TargetFramework>
<!-- Remainder of your .csproj -->Note that if omitted, net10.0-android will default to API 36.0.
To use an Android 36.1-only API you can use the OperatingSystem class to check the Android version at runtime:
if (OperatingSystem.IsAndroidVersionAtLeast(36, 1))
{
// Call some Android 36.1 API here
}
else
{
// Fallback for older OS versions
ShowToast("Android 36.1+ is required for this feature");
}See the Android documentation for a full diff of the new available APIs in Android 36.1.
For a full sample using Android 36.1 APIs, see our Pdf Annotator sample on GitHub.
To install the Android 36.1 platform, you can go to Tools > Android > Android SDK Manager. Install Android SDK Platform 36.1.
TLDR
For a short list of Android features in .NET 10, see:
What's Changed
- [release/10.0.1xx] Use stable 36.0.x branding by @jonathanpeppers in #10514
- [Mono.Android] Enumify API-36.1, API-36.1 is "Stable" by @jonpryor in #10515
- [nativeaot] Correctly handle file path that contains spaces by @hez2010 in #10537
- [xabt] pass in
$(SupportedOSPlatformVersion)to<Aapt2Link/>by @jonathanpeppers in #10538 - [native] Fix JNI preload cache generation by @grendello in #10547
- [xabt] additional fixes for non-integer API levels by @jonathanpeppers in #10536
- [release/10.0.1xx] track dotnet/java-interop/release/10.0.1xx by @jonathanpeppers in #10513
- [release/10.0.1xx] test unwanted
CA1416warnings by @jonathanpeppers in #10516 - [branding] updated product version to 36.1.x by @jonathanpeppers in #10557
- [xabt] fix incremental design-time builds by @jonathanpeppers in #10564
Full Changelog: 36.0.0-rc.2.332...36.1.2
.NET 10 RC 2, Android 36.0.0-rc.2.332
The latest .NET MAUI component is available in Visual Studio 2026 Insiders 11111.16 and higher:
You can also download the .NET 10 RC 2 SDK directly, 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 36.0.0-rc.2.332/10.0.100-rc.2 SDK 10.0.100-rc.2
Android 36.1
To try out the new APIs, you can opt your project into the new net10.0-android36.1 target framework:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0-android36.1</TargetFramework>
<EnablePreviewFeatures>true</EnablePreviewFeatures>
<!-- Remainder of your .csproj -->Note that if omitted, net10.0-android will default to API 36.0. $(EnablePreviewFeatures) will not be required in future .NET 10 releases.
To use an Android 36.1-only API you can use the OperatingSystem class to check the Android version at runtime:
if (OperatingSystem.IsAndroidVersionAtLeast(36, 1))
{
// Call some Android 36.1 API here
}
else
{
// Fallback for older OS versions
ShowToast("Android 36.1+ is required for this feature");
}See the Android documentation for a full diff of the new available APIs in Android 36.1.
For a full sample using Android 36.1 APIs, see our Pdf Annotator sample on GitHub.
To install the Android 36.1 platform, you can go to Tools > Android > Android SDK Manager. Under the gear icon in the bottom right, change Repository to Full List. This allows you to install Android SDK Platform 36.1.
TLDR
For a short list of Android features in .NET 10, see:
What's Changed
$(AndroidPackVersionSuffix)=rc.2by @jonathanpeppers in #10418- [build] fix branding of
Xamarin.Android.Tools.AndroidSdkby @jonathanpeppers in #10424 - Use Android shared library loader for JNI libraries by @grendello in #10376
- Fix DNAA0001 warning for Application classes with C# 12 primary constructors and improve test result visibility by @Copilot in #10427
- [build] stop producing
android-armandandroid-x86for unsupported runtimes by @jonathanpeppers in #10432 - [native] Use full marshal method signature when a method is overloaded by @grendello in #10433
- [XABT] Add comprehensive documentation to marshal methods code by @Copilot in #10436
- Bump com.android.tools.build:manifest-merger from 31.12.0 to 31.12.1 in /src/manifestmerger by @dependabot[bot] in #10439
- [tests] builds from forks skip
AssertCommercialBuild()tests by @jonathanpeppers in #10445 - [native] When preloading shared JNI libraries, update alias entries too by @grendello in #10444
- [Mono.Android] undo trimmer attribute to restore apk size by @jonathanpeppers in #10448
- [native] Make native runtime smaller and allow optional .so stripping by @grendello in #10446
- [build] cleanup monoandroid10 references in MSBuild files by @Copilot in #10452
- [build] set $(DisableTransitiveFrameworkReferenceDownloads) in another file by @jonathanpeppers in #10456
- [native] Fix loading of shared libraries directly from the APK by @grendello in #10437
- Fix setting an odd number of environment variables by @thaystg in #10462
- [build] move to new yaml template for signing by @jonathanpeppers in #10453
- Bump com.android.tools.build:manifest-merger from 31.12.1 to 31.12.2 in /src/manifestmerger by @dependabot[bot] in #10459
- [workload-dependencies] fix blank
$(DotNetStableTargetFramework)by @jonathanpeppers in #10479 - [native] NativeAOT runtime by @grendello in #10461
- [Mono.Android] Bind Android API-CANARY Beta 1 by @jonpryor in #10438
- [ci] Inventory start by @dalexsoto in #10482
- [Mono.Android] introduce
$(_AndroidIsAssignableFromCheck)escape hatch by @jonathanpeppers in #10475 - Fix an ABI break by @grendello in #10487
- [NativeAOT] Initialize GC threshold much earlier by @grendello in #10488
- [tests] fix
TestResolveToolsExiststest by @jonathanpeppers in #10490 - [xabt] default
$(AndroidEnableMarshalMethods)=falsefor CoreCLR by @jonathanpeppers in #10492 - [tests] enable
GCBridgecategory for NativeAOT by @jonathanpeppers in #10494 - [nativeaot] Next steps for the NAOT runtime by @grendello in #10476
- [Mono.Android] Bind API-36.1 Beta 2 by @jonpryor in #10497
- [nativeaot] Add more compatibility with CoreCLR and MonoVM hosts by @grendello in #10498
- [nativeaot] Log location of the actual p/invoke stub called by @grendello in #10502
- [CoreCLR] Dynamically build custom delegate types to support [Export] by @simonrozsival in #10503
- [nativeaot] Implement _monodroid_weak_gref_delete by @grendello in #10504
New Contributors
- @dalexsoto made their first contribution in #10482
Full Changelog: 36.0.0-rc.1.285...36.0.0-rc.2.332
.NET 9 Servicing, Android 35.0.105
The latest .NET MAUI component is available in Visual Studio 2026 Insiders 11111.16 and higher:
You can also download the .NET 9 SDK directly, 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 35.0.105/9.0.100 SDK 9.0.305
What's Changed
- Introduce
$(_AndroidIsAssignableFromCheck)escape hatch by @jonathanpeppers in #10473
Full Changelog: 35.0.101...35.0.105
