Open4

Flutterの環境構築で困ったとき

DaichiDaichi

Flutterの環境構築をしていて詰まったポイントがあったのでそれをメモ

使用環境は以下の通り

M1 Mac 2020
mac OS Monterey 12.3

DaichiDaichi

AndroidSDKにおけるエラー

flutter doctorを実行したところ、以下の二つのエラーが発生した

[!] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
    ✗ cmdline-tools component is missing
      Run `path/to/sdkmanager --install "cmdline-tools;latest"`
      See https://developer.android.com/studio/command-line for more details.
    ✗ Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.

エラー:コマンドラインツールがない

まず一つ目のこちらのエラーコマンドラインツールがないよというエラー

cmdline-tools component is missing

解決stepとしては以下の通り

  1. AdnroidStudioを起動
  2. More Actionsをクリック
  3. SDK Managerを選択
  4. SDK toolsタブを選択
  5. Andoird SDK Command-line Tools(latest)をチェックしApply
  6. 確認ダイアログが出たらOKを押す
  7. インストールが終わったら、FInishボタンを押す

※分かりにくい部分のみスクリーンショットを添付する

Step 1,2,3

Step 4,5

DaichiDaichi

エラー:ライセンスのステイタスが不明

Android license status unknown.

解決策1:ライセンスの承認

エラーに表示される通り、ライセンスの承認を行う

flutter doctor --android-licenses
5 of 7 SDK package licenses not accepted. 100% Computing updates...
Review licenses that have not been accepted (y/N)? y
Accept? (y/N): y

All SDK package licenses accepted

これができればいいが、私の環境ではflutter doctor --android-licensesを実行すると

以下のエラーが発生した

error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/android/prefs/AndroidLocationsProvider has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:757)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
	at java.lang.Class.getDeclaredMethods0(Native Method)
	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
	at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
	at java.lang.Class.getMethod0(Class.java:3018)
	at java.lang.Class.getMethod(Class.java:1784)
	at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
	at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Android sdkmanager tool was found, but failed to run
(/Users/${username}/Library/Android/sdk/cmdline-tools/latest/bin/sdkmanager): "exited code 1".
Try re-installing or updating your Android SDK,
visit https://flutter.dev/docs/get-started/install/macos#android-setup for detailed instructions.

その場合は以下の解決策2を使用して解決することができた

解決策2:SDKコマンドラインツールズのダウングレード

以下のStepでSDKコマンドラインツールズのダウングレードを行う

  1. Android studioでAndroid SDK command-line Tools(latest)のアンチェックを行う
  2. 右下の”Show package Details”をクリックし、バージョン一覧を表示する
  3. Android SDK command-line Tools 8.0を選択
  4. Applyをクリックする
  5. /Users/${username}/Library/Android/sdk/cmdline-tools配下に8.0という名前のファイルが作成されているはずなので、名前をlatestに変更する
% mv 8.0 latest

Step1,2,3,4の参考スクリーンショット

参考

GitHub issues

https://github.com/flutter/flutter/issues/120388

DaichiDaichi

Xcodeにおけるエラー

[!] Xcode - develop for iOS and macOS
    ✗ Xcode installation is incomplete; a full installation is necessary for iOS development.
      Download at: https://developer.apple.com/xcode/download/
      Or install Xcode via the App Store.
      Once installed, run:
        sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
        sudo xcodebuild -runFirstLaunch

エラー:Xcodeのインストールが不完全

書いてある通りにコマンドを事項することで解決することが可能

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
sudo xcodebuild -runFirstLaunch

Warning:Cocoapodsが期限切れ

CocoaPods 1.10.1 out of date (1.11.0 is recommended).
        CocoaPods is used to retrieve the iOS and macOS platform side's plugin code that responds to
        your plugin usage on the Dart side.
        Without CocoaPods, plugins will not work on iOS or macOS.
        For more info, see https://flutter.dev/platform-plugins
      To upgrade see https://guides.cocoapods.org/using/getting-started.html#installation for
      instructions.

この場合は、gemを再インストールすることで解決できる

$ [sudo] gem install cocoapods

参考
https://guides.cocoapods.org/using/getting-started.html#installation