FlutterのプロジェクトをAndroidアプリとして実行しようとすると、まれに
Running Gradle task 'assembleDebug'... /Users/***/flutter/.pub-cache/hosted/pub.dartlang.org/geolocator_android-2.1.0/android/src/main/java/com/baseflow/geolocator/location/LocationMapper.java:29: エラー: シンボルを見つけられません if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { ^ シンボル: 変数 S 場所: クラス VERSION_CODES
という意味不明なエラーが出て、ビルドに失敗する場合があります。
これは、Androidのネイティブコードを操作しているFlutterのプラグイン(≠パッケージ)を入れている場合(geolocatorや音再生関係のパッケージ等)に起こりうるのですが、
(注)Flutterにおける「プラグイン(Plugin)」とは、「Dartコードで書かれたAPIと1つ以上のプラットフォーム固有の実装を組み合わせたもの」を指します。
A specialized Dart package that contains an API written in Dart code combined with one or more platform-specific implementations. Plugin packages can be written for Android (using Kotlin or Java), iOS (using Swift or Objective-C), web, macOS, Windows, or Linux, or any combination thereof.
この例でいうと、Flutterで位置情報を取得するためのパッケージである「geolocator」が、Androidのネイティブ側のコードで「Build.VERSION_CODES.S」を参照しているが、それが見つけられないという参照エラーが起こっていることを示していますので、
(注)VERSION_CODES.Sの「S」はAPIレベル「31」を指します。英文字と数字の対応表は以下の通り
「android/app/build.gradle」ファイルから、「compileSdkVersion」と「targetSdkVersion」の数値を「VERSION_CODES.○」の「○」に対応するAPIレベルの数値に変更してやるとエラーが解消します(この例の場合は「S」なので「31」)。
(詳しくは、以下の動画で解説していますので、よろしければご覧下さい)