本文处理方式以官方配置为主,会更多的注重一些细节。读者可以直接参考官方文档进行编译。

Setting up the Engine development environment
https://github.com/flutter/flutter/wiki/Setting-up-the-Engine-development-environment

编译 Flutter Engine

1、准备工作

安装 depot_tools

$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

配置环境变量:建议在 ~/.bash_profile 文件中添加

export PATH=/flutter/depot_tools/:$PATH

然后执行

$ source ~/.bash_profile 

当然,你也可以配置临时环境变量

$ export PATH=$PATH:/Users/***/flutter/depot_tools/

2、将 engine 项目 fork 到自己的github

3、创建项目目录

你可以创建一个目录,名称推荐为 engine,后面的步骤会自动执行 clone ,你也可以先将工程 clone 到本地。

$ mkdir engine
// 或者将项目 clone 到本地
$ git clone https://github.com/donald99/engine

4、创建 .gclient 文件

进入engine 目录,创建 .gclient 文件

$ cd engine
$ vim .gclient

写入如下内容:

solutions = [
  {
    "managed": False,
    "name": "src/flutter",
    "url": "git@github.com:<your_name_here>/engine.git",
    "custom_deps": {},
    "deps_file": "DEPS",
    "safesync_url": "",
  },
]

换成你的 GitHub 名字,例如我的是:

solutions = [
  {
    "managed": False,
    "name": "src/flutter",
    "url": "git@github.com:donald99/engine.git",
    "custom_deps": {},
    "deps_file": "DEPS",
    "safesync_url": "",
  },
]

:wq 保存退出。

5、执行 gclient sync 命令

这里的执行需要梯子,速度根据你的网络状况,同步下来的文件大小大概有 10G

$ cd /flutter/engine
$ gclient sync

需要注意的是,这里需要等待文件自动完成,并且尽量不要打断该命令,显示 100% 后仍有很多操作。

6、重新 fetch flutter/engine 仓库

$ cd src/flutter

$ git remote add upstream git@github.com:flutter/engine.git

7、安装辅助工具

安装 JDK 1.8 以上

ant 安装

$ brew install ant

8、编译 android 相关

确保本地 flutter/engine 仓库是最新的

$ git pull upstream master
$ cd /flutter/engine
$ gclient sync

执行以下命令编译

$ ./flutter/tools/gn --unoptimized
$ ./flutter/tools/gn --android --unoptimized
$ ninja -C out/android_debug_unopt && ninja -C out/host_debug_unopt

整个过程比较漫长,耐心等待。

9、编译 iOS 相关

确保本地 flutter/engine 仓库是最新的

$ git pull upstream master
$ cd /flutter/engine
$ gclient sync

执行以下命令编译

$ ./flutter/tools/gn --ios --unoptimized
$ ./flutter/tools/gn --unoptimized
$ ninja -C out/ios_debug_unopt && ninja -C out/host_debug_unopt

这样 flutter engine 的编译工作就基本完成了。生成的一些编译文件目录为 src/out 。

总结

flutter engine 就像一个小型的操作系统,若研究透彻,就可以纵横天地,心随我意。

参考资料:

https://github.com/flutter/flutter/blob/master/CONTRIBUTING.md

Setting up your engine development environment
https://github.com/flutter/flutter/wiki/Setting-up-the-Engine-development-environment
Compiling the engine
https://github.com/flutter/flutter/wiki/Setting-up-the-Engine-development-environment
Building cquery
https://github.com/cquery-project/cquery/wiki/Building-cquery
Contributing to Flutter
https://github.com/flutter/flutter/blob/master/CONTRIBUTING.md


Flutter

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

 目录