作为软件开发,调试过程必不可少,那么在混编模式下有什么调试方案和技巧呢?我们本地既有原生工程代码,又有 Flutter 工程代码,想要同时调试原生代码和 Flutter 代码,一般有两种方案:
方案一:iOS 和 Flutter 同时调试,不支持断点
① Xcode 打开 iOS 项目,运行项目并打开 Flutter 项目页面。
② Android Studio 打开嵌在 iOS 项目中的 Flutter 项目,控制台选择 Terminal 选项卡。在终端输入命令行:flutter devices
,打印出已连接到计算机的设备。
③ 在终端输入如下命令行,后面的是 iPhone 的设备号,这里是模拟器。flutter attach
的作用是将当前Flutter 项目连接到某个正在运行的应用程序上。
flutter attach -d 60BB7784-43BA-4569-871A-3BA6D4E136D0
连接成功后,当我们修改了 Flutter 项目的代码后,可以按照下面的快捷键在终端进行相应操作:
- 按
r
是热重载,局部刷新,刷新所有改动的 Flutter 代码文件,此时就可以看到代码改动后的结果 - 按
R
是热重启,全部刷新,刷新所有的 Flutter 文件。如果Hot reload
刷新无效,可以尝试使用Hot restart
- 按
d
和q
都是终止连接,结束调试
Hot reload
和 Hot restart
区别:
-
Hot reload:将所有代码更改加载到
VM
中,并重新构建Widget
树,但是不会重新运行main()
或initState()
。 -
Hot restart:同样将所有代码更改加载到
VM
中,然后重新启动 Flutter 应用,从而丢失应用状态。
Performing hot restart...
Restarted application in 680ms.
Performing hot reload...
Reloaded 0 libraries in 107ms (compile: 16 ms, reload: 0 ms, reassemble: 11 ms).
二、iOS 和 Flutter 同时调试,支持断点方案
① Android Studio 打开嵌在 iOS 项目中的 Flutter 项目,工具栏点击 Flutter Attach
。
此时控制台 Debug
选项卡输出日志信息:
在 Flutter 和 Native 混编的过程,使用 flutter attach
同步代码出现如上错误。这是因为有多个端口,选择其中一个执行就可以了,一般选择不带数字的一个。可以重新运行 XCode 工程或者直接关掉模拟器,重新连接。
Debug service listening on ws://127.0.0.1:61933/-4kIlDugw3g=/ws
Syncing files to device iPhone 14 Pro Max...
连接完成,可以进行断点调试。同样在控制台上边可以通过点击 Hot reload
和 Hot restart
按钮来实现代码修改的更新操作。
当我们想要在 Flutter
侧调试代码的时候,只需要在控制台上打好断点就可以了,等APP运行到断点处时就会自动停止下来,进入断点流程。