iOS Flutter Engine源码调试和修改
-
-
- [1. 前提:](#1. 前提:)
- [2. 步骤:](#2. 步骤:)
- [3. 参考资料](#3. 参考资料)
-
1. 前提:
- 已将成功安装
deop_tools
工具 - 已经通过
gclient
命令同步好flutter engine
源码
2. 步骤:
进入engine/src
目录
-
创建
flutter engine
构建文件真机文件
debug
模式:
./flutter/tools/gn --no-goma --ios --unoptimized
真机文件
release
模式:
./flutter/tools/gn --no-goma --ios --runtime-mode=release
模拟器文件
debug
模式:
./flutter/tools/gn --no-goma --ios --simulator --unoptimized
参数说明: --unoptimized debug模式 --runtime-mode=release release模式 --ios iOS平台 --simulator 模拟器
-
生成flutter engine工程文件
按需执行以下所需的版本类型即可。
host_debug_unopt是必须要编译的,否则在执行本地引擎时就会报错host_xxx找不到// 编译host部分,必须要执行 ninja -C out/host_debug_unopt // 编译模拟器debug版本 ninja -C out/ios_debug_sim_unopt // 编译真机debug版本 ninja -C out/ios_debug_unopt // 编译真机release版本 ninja -C out/ios_release
如果ninja命令执行,出现错误:
depot_tools/ninja.py: Could not find Ninja in the third_party of the current project, nor in your PATH.
说明ninja工具安装有问题,这时候需要回到
depot_tools
安装目录,将commit-id
回滚到5a0f43aebe00a947546b8dfc966064b8d1a50a6f
命令执行完成后,就会在
engine/src/out
下产生3个目录,想要调试对应的engine
就拉对应的目录下的flutter_engine
工程到自己创建的工程内 -
创建
flutter
测试工程在
xcode
界面中,将要调试模式目录下的flutter_engine
工程拖入到测试工程中特别注意:在拖动时,要保证
flutter_engine
工程没有在xcode
中打开,否则会出现拖进去后,flutter_engine
工程无法展开的问题 -
修改
Generated.xcconfig
中如下配置-
手动修改 如果没有找到对应的配置项,就手动添加
FLUTTER_FRAMEWORK_DIR=/path/to/engine/src/out/ios_debug_sim_unopt FLUTTER_ENGINE=/path/to/engine/src LOCAL_ENGINE=ios_debug_sim_unopt
-
自动修改
在vscode中的launch.json配置文件中新增如下配置,然后跑一下debug
就能同步到Generated.xcconfig
文件中{ "name": "本地engine调试", "type": "dart", "request": "launch", "program": "example/lib/main.dart", "args": [ "--local-engine-src-path", "/path/to/engine/src", "--local-engine", "ios_debug_sim_unopt" ] },
-
-
打开
FlutterViewController.m
文件,就可以下断点了 -
修改SDK内的代码,需要重新执行
ninja -C
命令去更新产物,然后再重新运行测试工程
3. 参考资料
https://tech.qimao.com/zi-ding-yi-flutter-yin-qing-liu-cheng/