Flutter引擎原理

Flutter引擎源码分析(一) - 编译调试

2022-06-09  本文已影响0人  erlich
flutter.png

一、下载引擎代码

(一)工具准备

depot_tools 套件包含许多git工作流增强工具,通过这些工具可以协同工作,任何人都可以熟练地处理Chromium的代码库
[图片上传失败...(image-7f507-1654869060068)]

brew install ant

brew install ninja

(二)下载引擎

solutions = [
{
   "managed": False,
   "name": "src/flutter",
   "url": "git@github.com: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 (版本一致)

image.png

(三)升级操作

如果已有engine源码,但是版本不一致,通过配置 sync来解决 (M1的话还是再等等吧,目前3.0.1稳定版 M1还做不到完美engine调试)

二、编译引擎代码

image.png

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个文件

image.png

进入到 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

三、配置iOS项目代码

创建一个flutter项目,运行
xcode启动ios项目 - Runner
配置脚本

temp.png

执行脚本,build 脚本target


temp.png

四、Xcode编译项目能debug关键

iOS Runner项目 build 启动, 启动阶段,操作pause programexecution

temp1.png

lldb设置符号断点

temp.png

键入c 回车,跳过,正常启动
继续键入c,跳过汇编

temp.png
temp.png

look, 调试的log信息出来了...

打开ninja编译到 模拟器xcode工程

open flutter_engine/src/out/ios_debug_sim_unopt/flutter_engine.xcodeproj


temp.png

之前调试是在 创建的fluuter项目/ios工程Runner里添加的调试log

vs

同时在 flutter_engine源码编译的 模拟器项目里 找到了修改的调试log代码

肯定的是,编译调试engine的目的是达到了,接下来就是搞清楚为什么了

out/engine编译的模拟器xcode项目里 touchesBegan 目的代码部分, command + shift + J,导航侧栏显示文件 - finder查看

image.png

最终调试改动的代码 存在与 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原生通信

上一篇 下一篇

猜你喜欢

热点阅读