背景
在按照flutter官方的环境配置文档配置环境时,在获取安卓证书时,出现以下错误:Java version 17 or higher is required。
但实际上通过java --version查看,我已经安装了java 17。
出现问题的原因
运行flutter doctor -v,查看flutter所需环境的版本信息。
可以发现安卓平台的JRE版本为11,这就是问题所在:
根据https://www.soinside.com/question/JJPxKaH2NGGEyjjWCUTWMN以及flutter的github项目中一个issue,得知flutter遵循以下 JDK 安装搜索条件:
1) the JDK bundled with the latest installation of Android Studio,
2) the JDK found at the directory found in the JAVA_HOME environment variable, and
3) the directory containing the java binary found in the user's path.
其中前两条说的是,优先根据 android studio绑定的环境,其次才是JAVA_HOME。而我的安卓平台的绑定java版本不足,需要使用JAVA_HOME。
解决方案及注意事项
据说可以通过更新安卓平台解决,但我采用了另一种不更新的方式。
据前面的提到的网址,flutter增加了一个java配置选项,使用如下指令可以修改java环境。
flutter config --jdk-dir=$JAVA_HOME
但我执行之后重新获取证书,报错信息变为下图:
后来偶然发现,这是因为等于号后面其实是路径参数,并且等于可以以空格代替。而和别人用的平台不同,需要根据自己的操作系统调用环境变量。在windows中,可以使用:
flutter config --jdk-dir %JAVA_HOME%
但此时又出现报错(下图红色部分),这是因为我的路径里面还有空格,路径被识别为多个参数。
所以还需要给环境变量加上引号,如图中第二条白色指令。之后,重新获取授权,至此问题解决。
另外,我个人对命令行不太熟悉,不太清楚是不是真正绑定了跟随系统的环境变量。我怀疑这里使用环境变量可能是类似于宏的替换,所以有可能可以直接写文件路径。(理由是我曾试图用flutter config --jdk-dir -h 获取命令帮助,结果它把--jdk-dir的值直接设置为-h了)