根据设置引擎开发环境的描述,确保有以下可用依赖项:
不需要安装Dart,因为 Dart 工具链会作为“获取代码”步骤的一部分自动下载。类似的对于 Android SDK,它是通过以下gclient sync步骤下载的。
根据flutter官方的wiki设置引擎开发环境,做好前置工作,主要是depot_tools的安装
depot_tools是Google专门为开发大项目开发的.git代码仓库管理的python脚本,统一管理整个源码仓库的所有依赖,depot_tools使用说明
但是给的链接不能访问,找到以下命令git下载depot_tools,但是这个仍然需要科学上网,这里可以直接看第1.2章
git clone https://chromium.googlesource.com/chromium/tools/depot_tools
用git下载好后,得到depot_tools文件夹,可以将depot_tools路径加到环境变量PATH
Fork https://github.com/flutter/engine到你自己的GitHub帐户
然后创建engine文件夹,在engine文件夹内创建.gclient文件,并且替换
solutions = [
{
"managed": False,
"name": "src/flutter",
"url": "[email protected]:/engine.git" ,
"custom_deps": {},
"deps_file": "DEPS",
"safesync_url": "",
"custom_vars" : {
"download_android_deps" : False,
"download_windows_deps" : False,
},
},
]
然后在engine目录执行
../depot_tools/gclient sync
报错如下,这是在win10系统下,这是不能访问服务器导致
Downloading CIPD client for windows-amd64 from https://chrome-infra-packages.appspot.com/client?platform=windows-amd64&version=git_revision:9464003f070813371070f9b8f7c350d87619d145...
Failed to download the file, check your network connection, 使用“2”个参数调用“DownloadFile”时发生异常:“无法连接到远程服务器”
Retrying after a short nap...
Failed to download the file, check your network connection, 使用“2”个参数调用“DownloadFile”时发生异常:“无法连接到远程服务器”
Retrying after a short nap...
Failed to download the file, check your network connection, 使用“2”个参数调用“DownloadFile”时发生异常:“无法连接到远程服务器”
所在位置 D:\depot_tools\.cipd_impl.ps1:112 字符: 5
+ throw "Failed to download the file, check your network connection ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (Failed to downl...异常:“无法连接到远程服务器”:String) [], RuntimeException
+ FullyQualifiedErrorId : Failed to download the file, check your network connection, 使用“2”个参数调用“DownloadFile”时发生异常:“无法连接到远程服务器”
Failed to bootstrap or update CIPD client
直接从CSDN下载别人整理好的包depot_tools_20210326_updated.7z
修改depot_tools/update_depot_tools.bat这个文件,取消自动更新,添加如下变量
:: MODIFY: Disable automatic update!
set DEPOT_TOOLS_UPDATE=0
注意gclient是用python来运行的,如果是使用csdn上的包,一定要先安装python,不然会一直卡住
然后再次报错,这是在win10系统下,这也是不能访问服务器导致
[E2021-08-13T19:04:59.085262+08:00 22076 0 annotate.go:266]
original error: prpc: when sending request: Post "https://chrome-infra-packages.appspot.com/prpc/cipd.Repository/ResolveVersion": dial tcp 108.160.167.167:443:
connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
这里我放弃了,回家科学上网,直接在ubuntu 20.04.2.0中安装
科学上网加ubuntu 20.04.2.0版本,直接执行以下命令下载depot_tools,当然git这些要先配置好
git clone https://chromium.googlesource.com/chromium/tools/depot_tools
下载完成之后,把depot_tools目录添加到环境变量中,这样可以随时使用gclient命令
在depot_tools同级目录创建engine目录,在engine文件夹内创建.gclient文件,文件内容如下
solutions = [
{
"managed": False,
"name": "src/flutter",
"url": "[email protected]:flutter/engine.git",
"custom_deps": {},
"deps_file": "DEPS",
"safesync_url": "",
"custom_vars" : {
"download_android_deps" : False,
"download_windows_deps" : False,
},
},
]
还可以指定engine的版本,把url换成下面的,FLUTTER_ENGINE也就是commit id
如Flutter Stable 2.5.1 Engine的id就是b3af521a050e6ef076778bcaf16e27b2521df8f8
"url": "https://github.com/flutter/engine.git@FLUTTER_ENGINE",
然后在engine目录执行
gclient sync
之后是漫长的下载过程,下载完成后,depot_tools和engine压缩成tar.gz大约是6.9G,下载过程中遇到一些小err,百度一下就能解决
另外,代码下载完成后需要切换版本,进入engine/src/flutter,然后执行
git reset --hard b3af521a050e6ef076778bcaf16e27b2521df8f8
#或者直接切换分支,例如
git checkout flutter-2.5-candidate.5
然后返回engine目录执行
gclient sync --with_branch_heads --with_tags
此时目录结构大约是这样的
.
├── depot_tools
│ ├── bootstrap
│ ├── bootstrap-2@3.8.10.chromium.20_bin
│ ├── gclient
│ ├── git-cache
│ ├── gn
│ ├── ninja
│ ├── third_party
│ ├── update_depot_tools
│ ├── ...
├── engine
├── _bad_scm
└── src
下载之后,以后如果没有网络,可以设置环境变量DEPOT_TOOLS_UPDATE,取消depot_tools的更新
export DEPOT_TOOLS_UPDATE=0
之后cd engine/src/flutter,设置engine更新源
git remote add upstream [email protected]:flutter/engine.git
需要更新的时候,在engine/src/flutter执行
git pull upstream master
gclient sync
最后编译下,看看能否正常编译
xxxx@Exdroid88:~/flutter-workspace/engine/src$ ./flutter/tools/gn --unoptimized
GOMA usage was specified but can't be found, falling back to local builds. Set the GOMA_DIR environment variable to fix GOMA.
Generating GN files in: out/host_debug_unopt
Generating compile_commands took 102ms
Done. Made 870 targets from 253 files in 831ms
xxxx@Exdroid88:~/flutter-workspace/engine/src$ ../../depot_tools/ninja -C out/host_debug_unopt
ninja: Entering directory `out/host_debug_unopt'
[6026/6026] STAMP obj/default.stamp
xxxx@Exdroid88:~//flutter-workspace/engine/src/out/host_debug_unopt$ find ./ -name \*.so
./lib.unstripped/libflutter_linux_gtk.so
./lib.unstripped/libGLESv2.so
./lib.unstripped/libflutter_linux_glfw.so
./lib.unstripped/libEGL.so
./lib.unstripped/libflutter_engine.so
./libflutter_linux_gtk.so
./libGLESv2.so
./libflutter_linux_glfw.so
./libEGL.so
./libflutter_engine.so
根据flutter linux install的描述安装即可,我是直接下载flutter_linux_2.2.3-stable.tar.xz,解压后目录如下,可以把flutter/bin路径添加到环境变量中
.
├── depot_tools
│ ├── bootstrap
│ ├── [email protected]_bin
│ ├── gclient
│ ├── git-cache
│ ├── gn
│ ├── ninja
│ ├── third_party
│ ├── update_depot_tools
│ ├── ...
├── engine
├── _bad_scm
└── src
├── flutter
│ ├── analysis_options.yaml
│ ├── AUTHORS
│ ├── bin
│ ├── CODE_OF_CONDUCT.md
│ ├── CODEOWNERS
│ ├── CONTRIBUTING.md
│ ├── dartdoc_options.yaml
│ ├── dev
│ ├── examples
│ ├── flutter_console.bat
│ ├── flutter_root.iml
│ ├── LICENSE
│ ├── packages
│ ├── PATENT_GRANT
│ ├── README.md
│ ├── SECURITY.md
│ └── versio
然后执行下面命令,注意flutter doctor执行时也需要访问github,要注意网络联通
xxxx@Exdroid88:~/flutter-workspace/flutter/bin$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 2.2.3, on Linux, locale zh_CN.UTF-8)
[✗] Android toolchain - develop for Android devices
✗ Unable to locate Android SDK.
Install Android Studio from: https://developer.android.com/studio/index.html
On first launch it will assist you in installing the Android SDK components.
(or visit https://flutter.dev/docs/get-started/install/linux#android-setup for detailed instructions).
If the Android SDK has been installed to a custom location, please use
`flutter config --android-sdk` to update to that location.
[✗] Chrome - develop for the web (Cannot find Chrome executable at google-chrome)
! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
[☠] Linux toolchain - develop for Linux desktop (the doctor check crashed)
✗ Due to an error, the doctor check did not complete. If the error message below is not helpful, please let us know about this issue at https://github.com/flutter/flutter/issues.
✗ ProcessException: Failed to find "clang++" in the search path.
Command: clang++
[!] Android Studio (not installed)
[✓] Connected device (1 available)
! Doctor found issues in 4 categories.
xxxx@Exdroid88:~/flutter-workspace/flutter/bin$ flutter precache
xxxx@Exdroid88:~/flutter-workspace/flutter/bin$ flutter config --enable-linux-desktop
Setting "enable-linux-desktop" value to "true".
You may need to restart any open editors for them to read new settings.
flutter-embedded-linux需要使用Wayland作为显示后端的时候才需要安装
git clone [email protected]:sony/flutter-embedded-linux.git
该库编译依要求cmake3.10,可以下载安装cmake最新版
也可以通过该命令安装好依赖
sudo apt install clang cmake build-essential pkg-config libegl1-mesa-dev libxkbcommon-dev libgles2-mesa-dev
sudo apt install libwayland-dev wayland-protocols
xxxx@Exdroid88:~/flutter-workspace$ cd flutter-embedded-linux/
xxxx@Exdroid88:~/flutter-workspace/flutter-embedded-linux$ mkdir build/
xxxx@Exdroid88:~/flutter-workspace/flutter-embedded-linux/build$ cd build/
xxxx@Exdroid88:~/flutter-workspace/flutter-embedded-linux/build$ cp ../../engine/src/out/host_debug_unopt/libflutter_engine.so ./
xxxx@Exdroid88:~/flutter-workspace/flutter-embedded-linux/build$ cmake -DUSER_PROJECT_PATH=examples/flutter-wayland-client -DCMAKE_BUILD_TYPE=Release ..
-- The CXX compiler identification is Clang 10.0.0
-- The C compiler identification is Clang 10.0.0
-- Check for working CXX compiler: /usr/bin/clang++
-- Check for working CXX compiler: /usr/bin/clang++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Check for working C compiler: /usr/bin/clang
-- Check for working C compiler: /usr/bin/clang -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
User project: examples/flutter-wayland-client
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1")
-- Checking for module 'egl'
-- Found egl, version 1.5
-- Checking for module 'xkbcommon'
-- Found xkbcommon, version 0.10.0
-- Checking for module 'wayland-protocols'
-- Found wayland-protocols, version 1.20
-- Checking for module 'wayland-client>=1.16.0'
-- Found wayland-client, version 1.18.0
-- Checking for module 'wayland-cursor>=1.16.0'
-- Found wayland-cursor, version 1.18.0
-- Checking for module 'wayland-egl>=1.16.0'
-- Found wayland-egl, version 18.1.0
-- Checking for module 'glesv2'
-- Found glesv2, version 3.2
-- Configuring done
-- Generating done
-- Build files have been written to: /mnt/d/flutter-workspace/flutter-embedded-linux/build
xxxx@Exdroid88:~/flutter-workspace/flutter-embedded-linux/build$ cmake --build .
[ 1%] Generating ../src/third_party/wayland/protocols/presentation-time-protocol.h
[ 3%] Generating ../src/third_party/wayland/protocols/xdg-shell-client-protocol.h
[ 5%] Generating ../src/third_party/wayland/protocols/xdg-shell-protocol.c
[ 6%] Generating ../src/third_party/wayland/protocols/text-input-unstable-v1-client-protocol.h
[ 8%] Generating ../src/third_party/wayland/protocols/text-input-unstable-v1-protocol.c
[ 10%] Generating ../src/third_party/wayland/protocols/text-input-unstable-v3-client-protocol.h
[ 11%] Generating ../src/third_party/wayland/protocols/text-input-unstable-v3-protocol.c
[ 13%] Generating ../src/third_party/wayland/protocols/presentation-time-protocol.c
Scanning dependencies of target flutter-client
[ 15%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/flutter_elinux.cc.o
[ 16%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/flutter_elinux_engine.cc.o
[ 18%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/flutter_elinux_view.cc.o
[ 20%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/flutter_project_bundle.cc.o
[ 22%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/task_runner.cc.o
[ 23%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/system_utils.cc.o
[ 25%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/logger.cc.o
[ 27%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/external_texture_gl.cc.o
[ 28%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/vsync_waiter.cc.o
[ 30%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/flutter_elinux_texture_registrar.cc.o
[ 32%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/plugins/keyboard_glfw_util.cc.o
[ 33%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/plugins/key_event_plugin.cc.o
[ 35%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/plugins/lifecycle_plugin.cc.o
[ 37%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/plugins/mouse_cursor_plugin.cc.o
[ 38%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/plugins/navigation_plugin.cc.o
[ 40%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/plugins/platform_plugin.cc.o
[ 42%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/plugins/platform_views_plugin.cc.o
[ 44%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/plugins/text_input_plugin.cc.o
[ 45%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/surface/context_egl.cc.o
[ 47%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/surface/egl_utils.cc.o
[ 49%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/surface/elinux_egl_surface.cc.o
[ 50%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/surface/surface_base.cc.o
[ 52%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/surface/surface_gl.cc.o
[ 54%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/surface/surface_decoration.cc.o
[ 55%] Building C object CMakeFiles/flutter-client.dir/src/third_party/wayland/protocols/xdg-shell-protocol.c.o
[ 57%] Building C object CMakeFiles/flutter-client.dir/src/third_party/wayland/protocols/text-input-unstable-v1-protocol.c.o
[ 59%] Building C object CMakeFiles/flutter-client.dir/src/third_party/wayland/protocols/text-input-unstable-v3-protocol.c.o
[ 61%] Building C object CMakeFiles/flutter-client.dir/src/third_party/wayland/protocols/presentation-time-protocol.c.o
[ 62%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/window/elinux_window_wayland.cc.o
[ 64%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/window/native_window_wayland.cc.o
[ 66%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/window/native_window_wayland_decoration.cc.o
[ 67%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/window/renderer/shader.cc.o
[ 69%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/window/renderer/shader_context.cc.o
[ 71%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/window/renderer/shader_program.cc.o
[ 72%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/window/renderer/window_decoration_button.cc.o
[ 74%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/window/renderer/window_decoration_titlebar.cc.o
[ 76%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/linux_embedded/window/renderer/window_decorations_wayland.cc.o
[ 77%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/common/text_input_model.cc.o
[ 79%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/common/json_message_codec.cc.o
[ 81%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/common/json_method_codec.cc.o
[ 83%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/common/engine_switches.cc.o
[ 84%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/common/incoming_message_dispatcher.cc.o
[ 86%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/common/client_wrapper/engine_method_result.cc.o
[ 88%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/common/client_wrapper/standard_codec.cc.o
[ 89%] Building CXX object CMakeFiles/flutter-client.dir/src/flutter/shell/platform/common/client_wrapper/plugin_registrar.cc.o
[ 91%] Building CXX object CMakeFiles/flutter-client.dir/src/client_wrapper/flutter_engine.cc.o
[ 93%] Building CXX object CMakeFiles/flutter-client.dir/src/client_wrapper/flutter_view_controller.cc.o
[ 94%] Building CXX object CMakeFiles/flutter-client.dir/examples/flutter-wayland-client/flutter/generated_plugin_registrant.cc.o
[ 96%] Building CXX object CMakeFiles/flutter-client.dir/examples/flutter-wayland-client/flutter_window.cc.o
[ 98%] Building CXX object CMakeFiles/flutter-client.dir/examples/flutter-wayland-client/main.cc.o
[ 99%] Linking CXX executable flutter-client
[100%] Built target flutter-client
如果报错下面的错,那么就是没有把上一步编译生成的libflutter_engine.so拷贝到该编译目录下
make[2]: *** No rule to make target 'libflutter_engine.so', needed by 'flutter-client'. Stop.
make[1]: *** [CMakeFiles/Makefile2:76: CMakeFiles/flutter-client.dir/all] Error 2
make: *** [Makefile:130: all] Error 2
这一步编译产物有flutter-client