MAUIセットアップでAndroid 16(API 36.1)の洗礼を受けた話
.NET 10 (MAUI) の環境構築において、Android 16 周りのセットアップでツールの認識ロジックによる不一致に遭遇した。Google の新しいリリースサイクルへの対応がツール側で不十分なことが原因だ。
💡 コマンドラインからは問題なくビルドできる。
$ dotnet build -f net10.0-androidコマンドラインでの動作は確認できていたため、VS Code の開発環境を整備しようとした際に挙動の差異が判明した。
背景: Android API レベルの変革
Android 16(コードネーム: Baklava)から、Google は従来の整数値による API レベル管理を改め、小数点を含むマイナー SDK リリースを導入した。今回遭遇したのは API 36.1 というバージョンだ。
これまでは Android 7.0 (API 24) の後に 7.1 (API 25) が来るように、API レベル自体は常に整数だった。しかし、2025年以降はメジャーリリース(Q2)とマイナーリリース(Q4)の二段階構えになり、マイナーリリースには小数点が付与されるようになった。
直面した問題: VS Code がデバイスを認識しない
最新の Android Studio で API level 36.1 をインストールしたところ、VS Code の .NET MAUI 拡張機能でデバイスが認識されない、あるいは SDK 不足と判定される事象が発生した。
原因は以下の 2 点に集約される。
- ディレクトリ名のミスマッチ: Google は SDK を
android-36.1というフォルダ名で配布しているが、VS Code 拡張機能などは内部でandroid-36という整数名を想定して探索している。 - バリデーションの遅れ: .NET SDK 側は対応していても、VS Code 側のバリデーションロジックが小数点付きの API レベルを想定しておらず、異常と判定してしまう。
解決策: シンボリックリンクによる構成
ツールのアップデートを待たずに環境を整えるため、シンボリックリンクを用いて API 36.1 を API 36 として参照させる ことで回避した。
Platforms のリンク作成
SDK フォルダ内で android-36.1 を android-36 として参照できるようにする。
cd ~/Library/Android/sdk/platforms/
ln -s android-36.1 android-36
⚠️ この操作はディレクトリを直接操作するため、SDK マネージャーでの更新時に不整合が起きないか注意が必要だ。
残る課題: エミュレーターの起動不全
シンボリックリンクで SDK を認識させても、VS Code からエミュレーターを直接起動しようとすると失敗する。Android のツール内部で integer expression expected というエラーが出ており、小数点付きの API レベルを整数として扱おうとして失敗している。
当面は、ターミナルから手動でエミュレーターを起動してから VS Code で実行(Run)することで回避する。
# 手動でエミュレータを起動
emulator -avd <Your_Device_Name>