获取Depot_tools脚本工具集
depot_tools是google用来管理Chromium源码的工具集,主要有gclient、ninja、repo等。gclient和repo都是用来检出项目源码的脚本。gclient主要依赖于.gclient与DEPS2个配置违建进行源码的依赖检出。而repo主要依赖于manifest.xml配置文件进行项目模块源码检出。
获取工具集
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
上面下载的时候会报443,是因为我们下载的是外网项目,可以给Git配置代理:
git config --global http.proxy 'http://127.0.0.1:1087'
git config --global https.proxy 'socks://127.0.0.1:1080'
这里可以看一下自己的代理软件,是不是对应的端口。
clone成功之后配置一下环境变量,就可以使用命令了
export PATH=$PATH:/path/depot_tools
检出Flutter Engine源码
这里由于github下载较慢,使用gitee进行下载的。
git clone https://gitee.com/lao_mao_the_only_one/flutter-engine.git
获取Flutter Engine依赖的源码
在上面clone下来的项目中新建一个.gclient文件
solutions = [
{
"managed": False,
"name": "src/flutter",
"url": "https://gitee.com/lao_mao_the_only_one/flutter-engine.git",
"custom_deps": {},
"deps_file": "DEPS",
"safesync_url": "",
},
]
上面的url改成自己Fork的Flutter Engine的地址
之后,在engine目录下进行gclient sync
cd flutter_engine
gclient sync
上面由于要访问外网,可能会失败,需要配置代理,上面只是配置了git的代理,这里可以给终端配置一下代理:
export http_proxy=http://127.0.0.1:1087
export https_proxy=socks://127.0.0.1:1080
可以通过如下验证配置是否成功:
curl -I www.google.com
如果打印出网页信息,说明成功。
注意:export可以在bash中配置,这样是全局有效,也可以在命令行中配置,只是在当前命令窗口中有效。
切分支
在我们使用的Flutter SDK中找到该版本对应的commit id
bin/internal/engine.version // 在该目录下可以看到
切换到engine/src/flutter目录下,执行:
git reset --hard 2f0af3715217a0c2ada72c717d4ed9178d68f6ed
gclient sync --with_branch_heads --with_tags
我使用的Flutter SDK是1.22.6版本,在执行上面命令后会报错:
failed to resolve flutter_internal/android/sdk/licenses@latest (line 28): prefix "flutter_internal/android/sdk/licenses" doesn't exist or not visible to unauthenticated callers
这是因为你没有权限,只有谷歌的开发者才能直接构建,在github是有该issues,暂未解决:
https://github.com/flutter/flutter/issues/72108
之后我使用了v1.12.13-hotfixes版本没问题了,该版本对应的commit_id:
af51afceb8886cc11e25047523c4e0c7e1f5d408
编译Engine
准备构建文件
cd src //进入src目录
./flutter/tools/gn --runtime-mode profile //生成Host编译产物存放文件
./flutter/tools/gn --android --runtime-mode profile //生成Android编译产物存放文件
执行上面命令会在src/out目录下生成相应的文件夹,用于存放该平台的编译产物
构建可执行文件
ninja -C out/host_profile -j 6
ninja -C out/android_profile -j 6
使用本地引擎运行Flutter应用
flutter run --local-engine-src-path <FLUTTER_ENGINE_ROOT>/engine/src --local-engine=android_profile
IDE配置
个人编译flutter engine主要为了方便阅读源码,所以上面几步只是做了简单记录,在我们使用了./flutter/tools/gn编译引擎后,就会在src/out下生成compile_commands.json 文件
- 将compile_commands.json文件拷贝到src/flutter目录下
- 使用Clion打开src/flutter目录,就可以识别到compile_commands.json,代码就有跳转的能力了。
网友评论