最近在编写 Flutter 项目,发现不同的 Flutter SDK 版本有着不一样的 Gradle 版本,然后不同的 Gradle 版本需要不同的 JDK 版本。只有当三者都一致匹配时,才能正常的完成编译
首先,我们可以确定 Flutter SDK 对应的 Gradle 版本。我们每个下载的 Flutter 的 SDK 中都有这样一个示例工程目录,我们打开其中的一个来查看其官方配置的 Gradle 版本,例如:
`flutterexampleshello_worldandroidgradlewrapper`
我们打开 gradle-wrapper.properties 既可以找到对应的 Gradle 版本,例如我这里 3.7.12 版本的 SDK 对应的是
`distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-7.5-all.zip`
可以发现对应的 Gradle 版本是 7.5,我们可以通过这个表来找到对应的 JDK 版本是 18
| Java version | Support for toolchains | Support for running Gradle | | --- | --- | --- | | 8 | N/A | 2.0 | | 9 | N/A | 4.3 | | 10 | N/A | 4.7 | | 11 | N/A | 5.0 | | 12 | N/A | 5.4 | | 13 | N/A | 6.0 | | 14 | N/A | 6.3 | | 15 | 6.7 | 6.7 | | 16 | 7.0 | 7.0 | | 17 | 7.3 | 7.3 | | 18 | 7.5 | 7.5 | | 19 | 7.6 | 7.6 | | 20 | 8.1 | 8.3 | | 21 | 8.4 | 8.5 |
然后我们需要手动设置 Flutter SDK 编译使用的 JDK 路径:
`flutter config --jdk-dir=D:JDKjdk-18`
如果你不知道 JDK 的路径可以使用如下指令查询:
`/usr/libexec/java_home -V`
然后推荐使用 jenv 来管理不同 Shell 的 JDK 版本
我们可以运行如下命令检查:
`flutter doctor --verbose`
得到如下的信息:
`[√] Android toolchain - develop for Android devices (Android SDK version 35.0.1)
• Android SDK at C:UsershucaoAppDataLocalAndroidsdk
• Platform android-Baklava, build-tools 35.0.1
• Java binary at: D:JDKjdk-18.0.2binjava
• Java version OpenJDK Runtime Environment (build 18.0.2+9-61)
• All Android licenses accepted.`
说明我们已经修改成功了