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 点に集約される。

  1. ディレクトリ名のミスマッチ: Google は SDK を android-36.1 というフォルダ名で配布しているが、VS Code 拡張機能などは内部で android-36 という整数名を想定して探索している。
  2. バリデーションの遅れ: .NET SDK 側は対応していても、VS Code 側のバリデーションロジックが小数点付きの API レベルを想定しておらず、異常と判定してしまう。

解決策: シンボリックリンクによる構成

ツールのアップデートを待たずに環境を整えるため、シンボリックリンクを用いて API 36.1 を API 36 として参照させる ことで回避した。

Platforms のリンク作成

SDK フォルダ内で android-36.1android-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>