depot_tools 套件包含许多git工作流增强工具,通过这些工具可以协同工作,任何人都可以熟练地处理Chromium的代码库
github配置SSH
提示问题
[email protected]: Permission denied (publickey).
可能key过期,也就是配置到github上的公钥过期
也可能本地的私钥删除
这种情况下,重新配置,easy
cd ~/.ssh
vi known_hosts
删除里面的github部分
ssh-keygen -t rsa -b 4096 -C “[email protected]” [生成一对新的公钥,私钥]
vi config
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/自己生成的私钥文件
ssh-add -K ~/.ssh/自己生成的私钥文件 (默认id_rsa, 避免与其他平台冲突,最好自己起一个) [将您的SSH私钥添加到ssh-agent并将密码短语存储在钥匙串中]
pbcopy < ~/.ssh/id_rsa.pub (或者自己起的名字)
登录个人github,头像 - Settings - SSH and GPG Keys - NEW SSH Key - 粘贴
brew 安装 ant工具
brew install ant
brew install ninja
新建flutter_engine目录(注意:路径不能有中文)
mkdir flutter_engine
创建gclient文件 (通过gclient下载源码)
touch .glient
solutions = [
{
"managed": False,
"name": "src/flutter",
"url": "[email protected]:flutter/engine.git@caaafc5604ee9172293eb84a381be6aadd660317",
"custom_deps": {},
"deps_file": "DEPS",
"safesync_url": "",
},
]
执行 glient sync
cat ~/Developer/kit/flutter/bin/internal/engine.versio
caaafc5604ee9172293eb84a381be6aadd660317
用这个结果去替换 .glient 中 ‘flutter/engine.git@’ 后面的长字符串, 此处用的是 3.0.1 (版本一致)
如果已有engine源码,但是版本不一致,通过配置 sync来解决 (M1的话还是再等等吧,目前3.0.1稳定版 M1还做不到完美engine调试)
ninja 构建
#构建iOS设备使用的引擎
#真机debug版本
./gn --ios --unoptimized
#真机release版本
./gn --ios -unoptimized --runtime-mode=release
#模拟器版本
./gn --ios -simulator --unoptimized
#主机端(Mac)构建 -- 热重载
./gn --unoptimized
flutter_engine/src/out 目录下产生4个文件
进入到 flutter_engine/src/out目录,使用ninja编译工程 (相当耗时…)
ninja -C host_debug_unopt && ninja -C ios_debug_sim_unopt && ninja -C
ios_debug_unopt && ninja -C ios_release_unopt
创建一个flutter项目,运行
xcode启动ios项目 - Runner
配置脚本
iOS Runner项目 build 启动, 启动阶段,操作pause programexecution
lldb设置符号断点
键入c 回车,跳过,正常启动
继续键入c,跳过汇编
look, 调试的log信息出来了…
打开ninja编译到 模拟器xcode工程
open flutter_engine/src/out/ios_debug_sim_unopt/flutter_engine.xcodeproj
之前调试是在 创建的fluuter项目/ios工程Runner里添加的调试log
vs
同时在 flutter_engine源码编译的 模拟器项目里 找到了修改的调试log代码
肯定的是,编译调试engine的目的是达到了,接下来就是搞清楚为什么了
out/engine编译的模拟器xcode项目里 touchesBegan 目的代码部分, command + shift + J,导航侧栏显示文件 - finder查看
最终调试改动的代码 存在与 flutter_engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm
VS
而engine源码编译的xcode工程 在
flutter_engine/src/out/ios_debug_sim_unopt
至此,也就是,刚才,engine通过同一份源码,编译出4种xcode工程,源码共享一份
为什么能关联起来,Flutter引擎源码分析(二) - channel原生通信