概述
本文介绍了Flutter源码的获取与构建,后面会另有文章介绍Flutter源码的版本管理、开发环境搭建等主题。
准备工作
Flutter源码分为两个部分:
flutter/flutter[1]是框架层,为开发者提供各种接口,主要是dart代码。
flutter/engine[2]是引擎层,负责Flutter的渲染以及宿主的交互。
相关依赖的安装可参考官方文档:Setting up the Engine development environment · flutter/flutter Wiki[3]。以我的Mac为例,如JDK等一般都已经安装,无需担心。
源码下载
flutter/flutter
可以直接通过git下载,但是flutter/engine
需要通过gclient
工具获取,因为engine
有很多依赖,gclient
可以很好地处理这些依赖,简化源码管理流程。
首先,新建一个目录,下载flutter
框架代码:
$ mkdir flutter_source_code
$ cd flutter_source_code
$ git clone https://github.com/flutter/flutter.git
Cloning into 'flutter'...
remote: Enumerating objects: 12, done.
remote: Counting objects: 100% (12/12), done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 272396 (delta 0), reused 6 (delta 0), pack-reused 272384
Receiving objects: 100% (272396/272396), 116.98 MiB | 2.48 MiB/s, done.
Resolving deltas: 100% (210440/210440), done.
获取depot_tools
工具(这个一开始是用来管理chromium
源码的):
$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
Cloning into 'depot_tools'...
remote: Sending approximately 34.14 MiB ...
remote: Total 40539 (delta 27803), reused 40539 (delta 27803)
Receiving objects: 100% (40539/40539), 34.14 MiB | 5.04 MiB/s, done.
Resolving deltas: 100% (27803/27803), done.
设置环境变量(每次构建之前都要设置,也可以写入系统配置):
export PATH=$PATH:`pwd`/depot_tools
开始拉取代码(这一步比较耗时)
$ gclient sync [18:04:43]
......
remote: Enumerating objects: 25, done.
remote: Counting objects: 100% (25/25), done.
remote: Compressing objects: 100% (22/22), done.
remote: Total 209672 (delta 10), reused 13 (delta 3), pack-reused 209647
Receiving objects: 100% (209672/209672), 196.61 MiB | 3.74 MiB/s, done.
Resolving deltas: 100% (153791/153791), done.
Syncing projects: 31% (33/104) src/third_party/vulkan
[0:03:59] Still working on:
[0:03:59] src/ios_tools
[0:03:59] src/third_party/angle
[0:03:59] src/third_party/dart
[0:03:59] src/third_party/icu
......
[0:12:48] Still working on:
[0:12:48] src/third_party/dart
Syncing projects: 100% (104/104), done.
Running hooks: 100% ( 9/ 9) dart package config
________ running 'vpython src/flutter/tools/run_third_party_dart.py' in '/Users/vimerzhao/WorkProject/flutter_source_code'
Resolving dependencies... (1.7s)
+ charcode 1.1.3
+ collection 1.14.13
+ meta 1.2.3
+ package_config 1.9.3
+ path 1.7.0
+ pub_semver 1.4.4
+ source_span 1.7.0
+ string_scanner 1.0.5
+ term_glyph 1.1.0
+ yaml 2.2.1
Changed 10 dependencies!
需要注意的是,Syncing projects: 100% (104/104), done
之