如何正确使用flutter --no-build?仅改Dart代码时免全构建重启应用
无需完整构建周期重启Flutter应用并更新Dart代码的方案
首先得帮你理清一个点:flutter run --no-build之所以还是会触发完整构建,是因为这个参数的作用是跳过项目的构建步骤,但它依赖设备上已经存在可运行的匹配构建产物。当你手动关闭设备上的应用后,Flutter可能无法直接复用之前的进程,所以会 fallback 到重新构建。不过有几个更靠谱的方法可以满足你的需求,而且完全不用热重启/热重载:
方案1:利用flutter run的冷重启(非热重启)
如果你第一次启动应用后没有关闭终端里的Flutter进程,哪怕你手动关掉了设备上的应用,直接在终端输入大写的R(冷重启)就可以快速重启应用并加载修改后的Dart代码。这个操作不会触发完整构建,只是重置应用状态并重新执行main()函数,全程只需要几秒。
要是你已经关闭了原来的终端进程,也可以这么做:
- 确保没有执行过
flutter clean(这个会清空所有构建缓存) - 运行
flutter attach,终端会提示你启动设备上的应用 - 打开设备上的应用后,终端会显示连接成功,此时输入
R就能完成冷重启,更新代码。
方案2:直接复用已构建的应用包
这个方法适合你需要完全重启终端环境的场景:
- 第一次完成完整构建后,你的项目
build/ios/iphoneos目录下会生成Runner.app(Android对应build/app/outputs/flutter-apk/app-debug.apk) - 修改Dart代码后,只需要编译Dart部分(原生代码已经缓存,速度极快):
iOS执行:
Android执行:flutter build ios --no-codesignflutter build apk --debug - 直接运行已编译好的包,跳过完整构建:
iOS执行:
Android执行:flutter run --use-application-binary build/ios/iphoneos/Runner.app
这个流程里,flutter run --use-application-binary build/app/outputs/flutter-apk/app-debug.apkflutter build xxx --no-codesign只处理Dart代码的编译,耗时通常只有几秒到几十秒,完全不需要等1-2分钟的完整构建。
方案3:用第三方工具快速安装已构建包(iOS专属)
如果你习惯用命令行操作,可以用ios-deploy工具直接安装已有的Runner.app,步骤如下:
- 先安装工具:
brew install ios-deploy - 修改Dart代码后,执行快速编译:
flutter build ios --no-codesign - 安装并启动应用:
这个方法同样跳过完整构建,直接复用之前的原生构建缓存,速度非常快。ios-deploy --debug --bundle build/ios/iphoneos/Runner.app
关键注意事项
- 绝对不要执行
flutter clean,否则所有构建缓存都会被清空,必须重新走完整构建流程 - 不要修改项目的包名、签名证书、原生配置文件(比如
Info.plist、AndroidManifest.xml),否则即使有缓存,也需要重新构建原生部分 - 确保你的设备和电脑一直处于同一网络环境(无线或有线连接),避免连接失败导致的异常构建
内容的提问来源于stack exchange,提问作者user3612643
相关产品推荐
相关产品推荐

