深入学习Flutter,研究Flutter Engine是必须的。Flutter官方已经发Engine抽离出来,供开发者定制修改,也方便大家学习,但是单纯的克隆The Flutter engine (github.com)的仓库并不能构建出引擎,它还缺少许多必要的第三方库。OK,话不多说,我们根据官方教程,开搞!
前置条件
-
你的
git
已经设置好了全局代理,git config --global http.proxy xxx
-
你的
命令行
已经设置好了代理,Win下使用set https_proxy=xxx
进行临时设置代理 -
你的
git
已经配置好了ssh
1. 配置好Windows开发环境
-
Windows SDK
建议下载Visual Studio 2019,勾选该负载,自动安装SDK。
安装完成后,在Windows设置的应用和功能找到SDK,点击修改。
Change,然后点击Next,勾选第一个Windows Performance Toolkit
选项,最后应用更改。
- 环境变量设置
//供depot tools使用的参数
DEPOT_TOOLS_WIN_TOOLCHAIN=0
//VS2019安装地址
GYP_MSVS_OVERRIDE_PATH="C:\Program Files (x86)/Microsoft Visual Studio/2019/Community" (or your location for Visual Studio)
//VS版本
GYP_MSVS_VERSION = 2019
//Windows SDK地址
WINDOWSSDKDIR="C:\Program Files (x86)\Windows Kits\10" (or your location for Windows Kits)
- 启用长地址支持 打开PowerShell,输入下列指令。
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 -Force
2. 下载部署工具depot_tools
建议设置环境变量,方便使用gclient指令。
3. 拉取引擎源码
-
fork一份flutter engine官方的仓库
-
创建一个你想放置engine源码的文件夹,在文件夹内创建一个
.gclient
文件,文件内容如下,替换url为你刚刚fork的ssh对应的地址。
solutions = [
{
"managed": False,
"name": "src/flutter",
"url": "git@github.com:<your_name_here>/engine.git",
"custom_deps": {},
"deps_file": "DEPS",
"safesync_url": "",
},
]
-
cd src/flutter
,然后git pull upstream master
。 -
打开终端,在该目录下执行
gclient sync
命令(该命令包含git clone
确保你的终端
以及git
已经设置好代理)。
-
如果你有版本号需求,请先设置
git reset --hard <token>
,尖括号替换成commit
标识符,一般在你下载的flutter SDK文件夹内,具体为flutter/bin/internal/engine.version
,再使用gclient sync --with_branch_heads --with_tags
进行拉取。 -
如果遇到
Python
的File
报错,一般是代理没设置好 -
成功拉取后的目录和终端应该是这样的
拉取速度取决于你的代理,文件大概15G左右。
4. 编译你的引擎
假设你已经对引擎进行了定制,或者添加文件并且配置了BUILD.gn
的内容
-
cd到
src
目录内 -
终端输入
python .\flutter\tools\gn --unoptimized
来准备build文件如果你好奇参数,
gn help
会告诉你答案
- 终端输入
ninja -C .\out\<dir created by previous step>
,上一个命令会在out
目录生成一个新的文件夹,一般是host_debug_unopt
,把尖括号的内容替换为该目录即可,然后开始编译,6000+的文件,耗时比较久。
5. 启动你的引擎
简简单单,有手就行。
flutter run --local-engine-src-path <拉取引擎仓库的src的文件夹的本地路径> --local-engine=<out生成的文件夹名称>
参考资料
Compiling the engine · flutter/flutter Wiki (github.com)
Setting up the Engine development environment · flutter/flutter Wiki (github.com)