深化学习Flutter,研讨Flutter Engine是有必要的。Flutter官方现已发Engine抽离出来,供开发者定制修改,也便利咱们学习,可是单纯的克隆The Flutter engine (github.com)的库房并不能构建出引擎,它还短少许多必要的第三方库。OK,话不多说,咱们依据官方教程,开搞!

前置条件

  1. 你的git现已设置好了大局署理,git config --global http.proxy xxx

  2. 你的指令行现已设置好了署理,Win下运用set https_proxy=xxx进行临时设置署理

  3. 你的git现已配置好了ssh

1. 配置好Windows开发环境

  • Windows SDK

    主张下载Visual Studio 2019,勾选该负载,主动装置SDK。

Flutter Win平台下定制Flutter Engine

装置完成后,在Windows设置的使用和功能找到SDK,点击修改。

Flutter Win平台下定制Flutter Engine

Change,然后点击Next,勾选第一个Windows Performance Toolkit选项,最终使用更改。

Flutter Win平台下定制Flutter Engine

Flutter Win平台下定制Flutter Engine

  • 环境变量设置

//供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

depot_tools

主张设置环境变量,便利运用gclient指令。

3. 拉取引擎源码

  1. fork一份flutter engine官方的库房

  2. 创立一个你想放置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": "",
  },
]
  1. cd src/flutter,然后git pull upstream master

  2. 翻开终端,在该目录下履行gclient sync指令(该指令包含git clone保证你的终端以及git现已设置好署理)。

  • 如果你有版本号需求,请先设置git reset --hard <token>,尖括号替换成commit标识符,一般在你下载的flutter SDK文件夹内,详细为flutter/bin/internal/engine.version,再运用gclient sync --with_branch_heads --with_tags进行拉取。

  • 如果遇到PythonFile报错,一般是署理没设置好

  • 成功拉取后的目录和终端应该是这样的

Flutter Win平台下定制Flutter Engine

拉取速度取决于你的署理,文件大概15G左右。

4. 编译你的引擎

假定你现已对引擎进行了定制,或者添加文件并且配置了BUILD.gn的内容

  1. cd到src目录内

  2. 终端输入python .\flutter\tools\gn --unoptimized来预备build文件

    如果你好奇参数,gn help会告知你答案

Flutter Win平台下定制Flutter Engine

  1. 终端输入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)