这个概念有好几种叫法,热编译、热重载什么的,我就暂时叫做HotReload。
用flutter的好处之一就是可以HotReload,及时调试问题,减少开发的停顿时间。遇到过几次不能HotReload,但是普通编译是能正常编译并运行的。logcat中也没有看到相关的错误代码,也有正常的
Observatory listening on http://127.0.0.1:41683/qMu6f2Hnu2E=/
日志输出。私认为这条日志代表编译器已连接到设备。但是不知道为什么不能继续实现热编译的流程。
网上能搜到的这类问题相关的答案,都是说要配置端口,或者要检查一些配置,我检查过我的这些配置都没有问题,所以一定是其他的原因。
有一个命令叫flutter attach,具体是干嘛不太知道,推测是让flutter代码和设备产生一个连接,在这个基础上再去实现的HotReload功能。
网上搜了一下,其实有很多人说这个命令运行失败,但是没搜到过说热编译和attach之间的关系的。
运行这个命令之后提示报错,报错内容是pubspec.yaml配置文件中的一个资源文件引用写错了。
Error detected in pubspec.yaml:
No file or variants found for asset: assets/images.
所以问题原因就是找到了,pubspec.yaml文件中的资源写错可能会导致不能热编译,看起来不是很有关系的一条路。这个文件不仅仅是另一个build.gradle那种那么简单。需要更深的了解HotReload的原理,才会更容易明白这套逻辑。平时这个配置文件其实还是有些概率写错的,毕竟也没有动态检查,所以平时还要留意这个配置文件里不要写错。
网友评论