flutter doctor --android-licenses 报错

14 min read
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:756)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
	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:418)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
	at java.lang.Class.getDeclaredMethods0(Native Method)
	at java.lang.Class.privateGetDeclaredMethods(Class.java:2729)
	at java.lang.Class.privateGetMethodRecursive(Class.java:3076)
	at java.lang.Class.getMethod0(Class.java:3046)
	at java.lang.Class.getMethod(Class.java:1812)
	at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:650)
	at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:632)
Android sdkmanager tool was found, but failed to run (/Users/pan/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. 

这个错误是因为你的系统上的Java版本太低。在你的错误日志中,它说“this version of the Java Runtime only recognizes class file versions up to 52.0”,而你的AndroidLocationsProvider类编译时所使用的Java版本更高(class file version 55.0)。因此,你需要升级你的Java版本。

Java的版本和class file version的对应关系如下:

  • Java SE 11 = 55
  • Java SE 10 = 54
  • Java SE 9 = 53
  • Java SE 8 = 52

你的环境需要的是55,对应Java SE 11,但是你当前环境的版本是52,对应Java SE 8。

以下是更新Java版本的步骤:

  1. 首先,你可以通过运行java -version来检查当前的Java版本。

  2. 你可以访问Oracle的Java下载页面(https://www.oracle.com/java/technologies/javase-jdk11-downloads.html)来下载Java SE 11。

  3. 下载相应的文件,并按照指示进行安装。

  4. 安装完成后,通过再次运行java -version来确认是否成功更新。

这应该可以解决你的问题。如果问题仍然存在,你可能需要确认你的PATH环境变量是否正确设置,或者你可能需要更新Android SDK的位置。