.NET 11へ移行する.NET MAUI/.NET for Androidアプリでは、Androidの最小サポートAPIレベルが21から24へ引き上げられます。つまり、.NET 11でビルドしたアプリは、Android 5.0/5.1/6.0相当のAPI 21〜23端末ではインストールまたは実行できなくなる可能性があります。まず確認すべきなのは、プロジェクトファイルのSupportedOSPlatformVersion、Androidマニフェストのandroid:minSdkVersion、そして実際のユーザー端末にAPI 21〜23が残っているかです。
今回の変更は、単なる設定値の更新ではありません。.NET for AndroidのランタイムがMonoからCoreCLRへ移行する流れの中で、CoreCLRがAndroid API 24以降を必要とするために行われる破壊的変更です。2026年5月5日にdotnet/docsのPull Request #53543がマージされ、.NET 11の互換性ドキュメントに「Minimum Android API level raised to 24」が追加されました。(GitHub)
.NET 11で何が変わるのか
.NET 11では、Android向けアプリの最小サポートAPIレベルが次のように変わります。
| 項目 | 変更前 | 変更後 |
|---|---|---|
| 最小サポートAndroid APIレベル | API 21 | API 24 |
| Androidバージョンの目安 | Android 5.0 Lollipop以降 | Android 7.0 Nougat以降 |
| 影響する古い端末 | API 21〜23も対象にできた | API 21〜23は対象外 |
| 破壊的変更の種類 | – | Behavioral change |
| 導入バージョン | – | .NET 11 Preview 4 |
Microsoftの互換性ドキュメント用ファイルでは、.NET 11の最小サポートAndroid APIレベルが21から24へ引き上げられ、.NET 11でビルドしたアプリはAPI 21、22、23の端末にインストールまたは実行できないと説明されています。変更種別は「Behavioral change」です。(GitHub)
重要なのは、これはtargetSdkVersionの話ではなく、アプリを実行できる最小OSバージョンの話だという点です。Androidのandroid:minSdkVersionは、アプリが実行に必要とする最小APIレベルを表し、端末側のAPIレベルがそれより低い場合、Androidシステムはインストールを防ぎます。(Android Developers)
影響を受けるアプリ
主に影響を受けるのは、.NET 11へ移行するAndroid対応の.NET MAUIアプリ、または.NET for Androidを使うアプリです。特に次の条件に当てはまる場合は、対応が必要です。
| 確認項目 | 影響度 | 対応の必要性 |
|---|---|---|
.csprojでSupportedOSPlatformVersionを21〜23にしている | 高 | 24以上へ変更 |
AndroidManifest.xmlでandroid:minSdkVersionを21〜23に手動指定している | 高 | 24以上へ変更 |
| Android 5.x/6.x端末の利用者がいる | 高 | 告知・サポート方針の見直し |
| .NET 10以前を継続利用するだけ | 中 | すぐには影響しにくいが移行計画は必要 |
| iOS、Windows、macOSのみの.NETアプリ | 低 | Android設定がなければ直接影響は小さい |
| ASP.NET Coreやコンソールアプリ | 低 | .NET MAUI/Android向けでなければ直接影響は小さい |
.NET 11の.NET MAUIドキュメントでも、.NET 11 Preview 3以降は最小Android APIレベルが21から24に引き上げられ、.NET 11の.NET MAUIアプリにはAndroid 7.0以降が必要だと説明されています。(Microsoft Learn)
なぜAPI 24へ引き上げられるのか
理由は、AndroidランタイムのMonoからCoreCLRへの移行です。
.NET for Androidでは、.NET全体との一貫性やパフォーマンス改善を目的としてCoreCLRへの移行が進められています。.NET 11ではReleaseビルドでCoreCLRが既定のランタイムになると説明されており、CoreCLRを使うにはAndroid API 24以降が必要です。(Microsoft Learn)
dotnet/runtime側のIssueでも、CoreCLRをAndroidで適切にサポートするため、最小サポートバージョンをAPI 21からAPI 24へ引き上げる必要があると説明されています。また、API 21〜23向けの一部回避策を削減できる副次的な効果にも触れられています。(GitHub)
つまり今回の変更は、「古い端末を切り捨てたい」という単純な判断ではなく、.NET for Androidのランタイム基盤をCoreCLRへ寄せるための前提条件と見るべきです。
まず確認すべき設定
.NET MAUIアプリを運用している場合、最初に確認すべき場所は.csprojです。
SupportedOSPlatformVersionを確認する
Android向けの最小対応バージョンを明示している場合、次のような設定があります。
<PropertyGroup>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">21</SupportedOSPlatformVersion>
</PropertyGroup>
.NET 11へ移行するなら、基本的には24へ変更します。
<PropertyGroup>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">24</SupportedOSPlatformVersion>
</PropertyGroup>
Microsoftのドキュメントでも、SupportedOSPlatformVersionを24未満に明示している場合は更新が必要だと案内されています。(Microsoft Learn)
android:minSdkVersionを確認する
AndroidManifest.xmlやビルド設定でandroid:minSdkVersionを手動指定している場合も確認します。
<uses-sdk android:minSdkVersion="21" />
このような指定が残っている場合は、.NET 11向けには次のように合わせます。
<uses-sdk android:minSdkVersion="24" />
互換性ドキュメントのPull Requestでは、android:minSdkVersionを手動で設定している場合も24へ引き上げ、プロジェクト設定と一致させることが推奨されています。(GitHub)
minSdkVersionとtargetSdkVersionを混同しない
今回の変更で混乱しやすいのが、minSdkVersionとtargetSdkVersionの違いです。
| 設定 | 意味 | 今回の変更との関係 |
|---|---|---|
minSdkVersion | アプリを実行できる最小APIレベル | API 24以上にする必要がある |
targetSdkVersion | アプリが対象として設計・テストされたAPIレベル | Google Play要件などで別途確認が必要 |
compileSdkVersion | コンパイル時に使うAndroid SDK APIレベル | 最新SDK対応やビルド環境で確認 |
今回の.NET 11の破壊的変更は、主にminSdkVersion相当の話です。一方、Google Playに公開する場合はtargetSdkVersionの要件も別に存在します。Google Playでは、2025年8月31日以降、新規アプリとアプリアップデートは原則としてAndroid 15、つまりAPI 35以上をターゲットにする必要があると案内されています。(Android Developers)
そのため、実務では次のように分けて考えると安全です。
| 判断軸 | 見るべき設定 | 例 |
|---|---|---|
| 古い端末で動かせるか | minSdkVersion/SupportedOSPlatformVersion | .NET 11では24以上 |
| Google Playへ提出できるか | targetSdkVersion | 公開時点のGoogle Play要件を確認 |
| 新しいAPIでビルドできるか | compileSdkVersion | SDK・ワークロード更新状況を確認 |
移行時の実務チェックリスト
.NET 11へ移行する前に、次の順で確認すると手戻りを減らせます。
| 手順 | 確認内容 | 実務上のポイント |
| -: | —————————————– | ———————— |
| 1 | 対象アプリがAndroidを含むか確認 | iOS/Windowsのみなら直接影響は限定的 |
| 2 | .csprojのSupportedOSPlatformVersionを確認 | 21〜23なら24へ変更 |
| 3 | AndroidManifest.xmlのminSdkVersionを確認 | 手動指定があれば24へ変更 |
| 4 | CI/CDのビルドログを確認 | 警告や古いSDK指定を見逃さない |
| 5 | API 24以上の実機・エミュレーターでテスト | Android 7.0相当以上を最低ラインにする |
| 6 | API 21〜23利用者の有無を確認 | アクセス解析、サポート履歴、配布先端末を確認 |
| 7 | 利用者向け告知を準備 | 古い端末では新バージョンを利用できないことを明記 |
| 8 | Google PlayのtargetSdkVersion要件も確認 | minSdkVersionとは別管理にする |
特に業務アプリでは、一般消費者向けアプリよりも古いAndroid端末が残りやすい傾向があります。店舗端末、倉庫端末、検品端末、医療・教育現場の端末などは、OS更新が止まっていても運用上は使い続けられていることがあります。単にビルド設定を変えるだけでなく、配布先の端末一覧を確認することが重要です。
一時的にAPI 21を維持できるのか
.NET 11 Preview段階のドキュメントでは、移行中にAPI 21を一時的にターゲットにする必要がある場合、CoreCLRをオプトアウトしてMonoランタイムを使う回避策が示されています。
<PropertyGroup>
<UseMonoRuntime>true</UseMonoRuntime>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">21</SupportedOSPlatformVersion>
</PropertyGroup>
ただし、これはあくまで一時的な回避策です。Microsoftの.NET MAUIドキュメントでも、最終的な.NET 11リリースに向けてAPI 24とCoreCLRへの移行を計画するよう案内されています。(Microsoft Learn)
本番運用では、次のように判断するのが現実的です。
| 状況 | 推奨判断 |
|---|---|
| API 21〜23端末の利用者がほぼいない | .NET 11移行時にAPI 24へ引き上げる |
| API 21〜23端末が少数だが残っている | 告知期間を設けてAPI 24へ移行する |
| 業務上、API 21〜23端末をすぐ廃止できない | .NET 11移行時期を再検討する |
| 移行検証中だけ古い端末も動かしたい | 一時的なMono回避策を検証用に使う |
| 長期的にAPI 21〜23を維持したい | .NET 11採用方針そのものを見直す |
「一時的に動く設定がある」ことと、「本番で長期運用してよい」ことは別です。.NET 11の最終リリースに合わせるなら、API 24以上を前提に移行計画を立てるべきです。
古いAndroid端末の利用者には何を伝えるべきか
互換性ドキュメントでは、Android 5.xまたは6.xの端末を使うユーザーには、新しいアプリ更新をインストールできなくなることを通知するよう推奨されています。(GitHub)
告知では、技術用語だけでなく、ユーザーが判断できる表現にすることが大切です。
悪い例は次のような文面です。
.NET 11移行に伴い、minSdkVersionを24へ変更します。
開発者には伝わりますが、一般ユーザーや業務部門には意味が伝わりません。
より実用的な文面は次のようになります。
次回以降のアプリ更新では、Android 7.0未満の端末はサポート対象外となります。Android 5.xまたは6.xをご利用の場合、最新版アプリをインストールできない場合があります。継続利用には、Android 7.0以上の端末への切り替えをご検討ください。
業務アプリなら、さらに次の情報を加えると問い合わせを減らせます。
| 告知に含める項目 | 例 |
|---|---|
| 変更開始時期 | 2026年○月リリース版から |
| 対象外となるOS | Android 5.x/6.x |
| 必要なOS | Android 7.0以上 |
| 既存インストール済みアプリの扱い | 旧バージョンは利用できるが更新不可、など |
| 端末更新の窓口 | 情シス、販売店、サポート担当 |
| 問い合わせ時に必要な情報 | 端末名、Androidバージョン、アプリバージョン |
移行で失敗しやすいポイント
.csprojだけ変更してManifestを見落とす
.NET MAUIではプロジェクトファイル側の設定が中心になりますが、過去のXamarin.Android移行プロジェクトや独自設定があるプロジェクトでは、AndroidManifest.xmlにminSdkVersionが残っていることがあります。
.csprojでは24、Manifestでは21のように不整合があると、ビルドや配布時の挙動を追いにくくなります。設定値は1か所に集約するか、少なくとも同じ値になっていることを確認してください。
Google Playの要件と混同する
API 24への引き上げは、.NET 11でアプリがサポートする最小Androidバージョンの変更です。一方、Google Playに提出するためのtargetSdkVersion要件は別です。
「API 24にしたからGoogle Play対応も完了」と考えるのは危険です。Google Playに公開するアプリでは、提出時点のターゲットAPI要件を必ず確認してください。
古い端末での利用実態を確認しない
開発チームのテスト端末が新しくても、利用者の端末が新しいとは限りません。特にBtoB、教育、医療、物流、店舗、自治体向けアプリでは、Android 5.x/6.x端末が残っている可能性があります。
確認には、次のような情報が役立ちます。
| 情報源 | 確認できること |
|---|---|
| アプリ内ログ | 実際のAndroidバージョン分布 |
| クラッシュレポート | 古いOSでの障害状況 |
| MDM/端末管理台帳 | 業務端末のOSバージョン |
| サポート問い合わせ | 古い端末利用者の有無 |
| Google Play Console | 配布対象や端末分布の傾向 |
移行テストをAPI 24以上だけで済ませる
API 21〜23をサポート対象外にする場合でも、古い端末で「どう見えるか」は確認しておく価値があります。たとえば、インストール不可になるのか、ストアで表示されないのか、社内配布でエラーになるのかは、配布方法によって体験が変わります。
ユーザー対応を考えるなら、API 21〜23端末での挙動を少なくとも1回は確認し、サポートFAQに反映しておくと安心です。
開発チーム向けの移行方針例
.NET 11へ移行するチームは、単に設定を24へ変えるのではなく、次のような方針を決めてから進めると安全です。
| 方針項目 | 決める内容 |
|---|---|
| サポート対象OS | Android 7.0以上に統一するか |
| .NET 11移行時期 | Preview段階で検証するか、正式版まで待つか |
| CoreCLR採用 | ReleaseビルドでCoreCLR前提にするか |
| 古い端末対応 | API 21〜23向け最終版を出すか |
| 告知期間 | 何週間前に利用者へ通知するか |
| 配布チャネル | Google Play、社内配布、MDMごとに確認するか |
| ロールバック | 不具合時に.NET 10以前のブランチへ戻せるか |
実務では、次のような進め方が現実的です。
- 現行アプリのAndroidバージョン分布を確認する
- API 21〜23端末の利用者数と業務重要度を把握する
.csprojとManifestの設定を棚卸しする- 検証ブランチで
SupportedOSPlatformVersionを24へ変更する - API 24、最新Android、主要実機で動作確認する
- 必要に応じて古い端末向け最終リリースを用意する
- 利用者・顧客・サポート担当へ告知する
- .NET 11正式版に合わせて本番反映する
今回の変更で確認すべきコード例
最終的に確認すべき最小構成は、次のような設定です。
<PropertyGroup>
<TargetFrameworks>net11.0-android</TargetFrameworks>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">24</SupportedOSPlatformVersion>
</PropertyGroup>
複数プラットフォームを対象にしている.NET MAUIアプリでは、Androidだけに条件を付けて設定するのが基本です。
<PropertyGroup>
<TargetFrameworks>net11.0-android;net11.0-ios;net11.0-maccatalyst</TargetFrameworks>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">24</SupportedOSPlatformVersion>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">18.2</SupportedOSPlatformVersion>
</PropertyGroup>
AndroidManifest.xmlにuses-sdkを直接書いている場合は、重複や不整合に注意してください。
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-sdk android:minSdkVersion="24" />
</manifest>
ただし、プロジェクト構成によってはManifestへ直接書くより、.csproj側で管理した方が見通しがよい場合があります。既存プロジェクトの運用ルールに合わせ、設定値が分散しないようにしてください。
.NET 11移行前に取るべき次の行動
今回の.NET documentation updateで押さえるべき結論は、.NET 11のAndroidアプリはAPI 24、つまりAndroid 7.0以上を前提に移行計画を立てる必要があるという点です。
まずは、次の3つを確認してください。
.csprojのSupportedOSPlatformVersionが24未満になっていないか- AndroidManifest.xmlで
android:minSdkVersionを21〜23に固定していないか - 実ユーザーや配布先端末にAndroid 5.x/6.xが残っていないか
設定変更そのものは小さく見えますが、古い端末を使うユーザーにとってはアプリ更新が受け取れなくなる大きな変更です。開発チームは、ビルド設定、端末分布、告知文、サポート方針をセットで確認し、.NET 11とCoreCLRへの移行を進めてください。

コメント