上个月官方推出了fluter3.0,直接支持MacOS的M1芯片,我就升级到了最新flutter版本.但是项目基本都是flutter2.0的环境,升级flutter后,打开项目几乎全红色的报错,好几百个报错
报错看似很多,其实编译器都有智能提醒,跟着提示,一步步处理,其实问题都不大
先把项目依赖的第三方库都更新到最新版本;接着手动解决报错;
比较坑爹的是fluter3.0把flutter2.0标记的过期的属性直接干掉了,导致编译器无法智能提示错误修复,只能查看源码,手动改了,所以flutter2.0日常开发中标记过期的属性方法不要继续使用了,及时的换成最新的,否则SDK升级时很难受.
花了几个小时时间把旧版本项目报错全部解决后,
运行安卓真机,又出现了编译运行报错,简单记录下踩坑过程:
不过命令行给出了提示 Your project requires a higher compileSdkVersion.
需要修改Android工程下的android/app/build.gradle文件配置
把compileSdkVersion 的值由 30 改成 31
然后重新编译运行,此时报错变了,提示Your project requires a newer version of the Kotlin Gradle plugin; 需要修改android/build.gradle文件里ext.kotlin_version的值为最新版本
Kotlin官网查询,支持多平台的Kotlin最新版本是1.7.0
ext.kotlin_version 由1.3.50 改成 1.7.0
重新运行项目,报错变成了Kotlin的 gradle插件版本 跟flutter sdk的gradle版本不匹配,当前的gradle版本低了
所以解决办法是: 要么是升级gradle版本,要么降低kotlin版本
网上有人给出的解决办法是:
在android\gradle\wrapper\gradle-wrapper.properties 找到 distributionUrl=https://services.gradle.org/distributions/gradle-5.6.2-all.zip,版本号改大。例如目前最新是 7.2
但是我不赞成这个办法,因为flutter SDK内置了gradle环境,;而且从安卓项目build.gradle文件可以看到
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
它是从flutter SDK路径 packages/flutter_tools/gradle/flutter.gradle 下获取的gradle版本文件;如果手动修改成别的版本将来可能存在未知的问题
由于flutter SDK是最新的,同时Kotlin也是在不断更新迭代的,所以我猜测是Kotlin 版本太高导致,所以我决定稍微降低一点Kotlin版本
在Kotlin官网查询版本号,除了1.7.0外,最新版本是1.6.20
把Kotlin 版本号改成1.6.20
重新编译运行,成功!
其它问题:
在最一步运行时候,如果你同时用VSCode和Android Studio 同时打开和运行过项目,编译运行可能会报错 Cannot lock Java compile cache as it has already been locked by this process. 提到javaCompile.lock之类的等
解决办法是 javaCompile.lock删掉,然后打开macOS 的活动监视器,关闭所有java进程后,重新运行项目即可