Flutter采用dart语言编码,运用DartVM虚拟机解析Dart, DartVM支持AOT(编译型)和JIT(解释型) ,热重载就基于JIT(解释型)执行增量编译
在调试阶段支持JIT技术,一旦上线,就采用AOT技术
热重载工具:Flutter工程目录/packages/flutter_tools
热重载挂载(调试flutter_tools)
- 配置
- 挂载工程
- 挂载引擎
也可以在挂载的工程中配置Generated.xcconfig 中的变量 FLUTTER_ENGINE = /Users/hank/Desktop/engine/src LOCAL_ENGINE = ios_debug_sim_unopt
- dart SDK路径配置 (Command+,)
- 运行flutter_tools工程
在Runner工程中调试 :先运行lutter_tools工程,然后打开需要挂载的工程Runner, 在Debug —> Attach to Process—>选择Runner
- 修改 挂载的工程 后 热重载 flutter_tools(输入r),就可以刷新UI
热重载工具的启动流程
- 设置断点
- debug 运行 flutter_tools
- 查看参数
- 查看main函数—> 调用run函数
- 查看run函数的实现
Command + shift +O 搜索runner.dart找到文件 后搜索 ‘run(‘
- 终端的打印和监听
- 创建VMService ,用对象关联DartVM虚拟机(socket点对点通讯 )
Command + shift +O 搜索vmservice.dart找到文件 后搜索 ‘class VMService’
- 终端输入’r’,时,的流程
热重载底层找到增量文件
_updateDevFS —> UpdataFSReport —> device.updataDevFs —> devFS.update—>DevFSFileContent
flutter_tools(启动时刻加载VMService) 输入’r’热重载 —> 找到增量文件—> 给虚拟机DartVM(VMService发送http写入) —>DartVM虚拟机通过RPC读取文件做文件解析和文件对比 —> 通过RPC给到Flutter引擎 —> 渲染
引擎和虚拟机的接口 IsolateGroupReloadContext::Reload
tools和引擎挂载完成后,在工程代码中设置断点
br set -n ‘IsolateGroupReloadContext::Reload’