前几天开始的从 Latitude 5400 向 ThinkPad T450s 迁移的工作已经接近尾声。要说当初为什么在家里偶尔写写 Android 代码也要用 Latitude 5400 而不是在常用的 ThinkPad T450s 上,性能当然是一个方面,另一个原因就是 T450s 上已经存在着老夫好不容易才配置好的 Android Studio 1.0 用来开发 Android 2.2 上的应用,如果把更高版本的 Android Studio 装上来,那 Java 环境啊、Gradle 构建工具链啊啥的,再来个冲突,一点也不好玩。
这次硬迁移后,最新的 Android Studio 安装的是官方下载的考拉便携版,而且好像新近的 Android Studio 基本都自带了 Java 环境,也无需再波及系统范围内的 Java 配置。当然,也还是要测试一下。结果是 Android Studio 的最新版和 1.0 版相安无事,各自安好。有趣的是,城门失火殃及池鱼,flutter 似乎受了点影响。
由于 Android Studio 1.0 是要使用 JAVA_HOME
这个环境变量的,所以当前系统内生效的 JAVA_HOME
是指向一份 JDK 1.7 的安装路径,而运行 flutter doctor
命令时,它输出至少需要 Java 1.8。于是到网上转了转,发现有人曾经测试过用 JDK 1.8 和 Android Studio 1.0 配合工作。随手就到 Oracle 网站上下载了 1.8 的 JDK,取代了之前的 1.7。果然没有发生什么幺蛾子,倒是顺便修改了早已忘记的 Oracle 登录密码。
flutter 的命令行不再是对 Java 版本的要求了,但是也没全好。仍然存在的问题是,它说它无法检测到 Android SDK 的许可协议接受状态。如果哪说哪了的话,应该是执行一下 flutter doctor --android-licenses
就好,但是会出错,
Exception in thread “main” java.lang.UnsupportedClassVersionError: com/android/sdklib/tool/sdkmanager/SdkManagerCli has been compiled by a more recent version of the Java Runtime (class file version 61.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:359)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:635)
这当然还是跟 Java 版本有关了,但老夫没有贸然再升级,毕竟不知道老古董 Android Studio 1.0 的口味能适应到多么新潮。于是老夫手动到 Android SDK 的工具路径下执行了 sdkmanager --licenses
,顺利完成。
但返回头来,flutter doctor
还是报“Android license status unknown.”。除此外它还报找不到 Chrome,这个正常,毕竟在这台电脑上就没有安装 Chrome。最后一个问题是它能检测到 Android Studio 2024.1,但是,“Unable to find bundled Java version.”。问了一下 ChatGPT,回答说可以执行 flutter config --android-studio-dir="C:\Program Files\Android\Android Studio"
这样的命令来解决,尝试了一下,问题依旧。最终解决办法是,执行了 mklink /d jre jbr
。很显然,flutter(可能版本有点老,2.10.3)不认新的 jbr
而只检测老的 jre
。