赞
踩
刚开始学Flutter开发时搭建过,没有记录。现在有需要时又忘了,果然好记性不如烂笔头。
注意,调试环境搭建会占用较大硬盘空间。粗略统计,Flutter引擎项目(包含依赖的第三方库)约20GB,host_debug_unopt
构建编译后约16GB,ios_debug_xxx
构建编译后约5GB。所以如果想搭建成功,至少需要准备41GB的剩余硬盘空间。
后续很多工具依赖python
环境,如果执行python3
命令失败,那么需要先安装python3
。可以通过官网下载安装或brew
命令安装:
brew install python
安装过程可能会遇到这样的问题:
Error: python@3.11: the bottle needs the Apple Command Line Tools to be installed.
You can install them, if desired, with:
xcode-select --install
执行xcode-select --install
命令安装Xcode命令行工具解决。
depot_tools
是Chromium的源码管理工具,后续获取源码和构建编译都需要用到。
安装流程:
clone
命令(需要代理)git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
在~/.bashrc
或~/.zshrc
文件中加上:
export PATH=[存放的路径]/depot_tools:$PATH
参考文档:
按Flutter的文档应先fork项目,不过那是针对贡献者的流程,如果你只是调试,可以跳过这一流程。
切换到想要存放Flutter引擎源码的位置新建engine
目录:
mkdir engine
切换到engine
目录下执行:
touch .gclient
配置.gclient
文件:
solutions = [{
"managed": False,
"name": "src/flutter",
"url": "git@github.com:<your_name_here>/engine.git",
"custom_deps": {},
"deps_file": "DEPS",
"safesync_url": "",
}, ]
<your_name_here>
请按需替换,如果没有fork引擎项目,可以替换为flutter
,如果有fork,可以替换为自己的Github账户名。
如果想了解这些配置的作用,参考官方文档:gclient file。
前面的配置获取的是最新的Flutter引擎源码,但是Flutter引擎的调试离不开Flutter框架,如果版本不匹配可能会遇到一些问题,所以最好指定Flutter引擎版本为当前Flutter框架所需要的版本。那么这个版本怎么指定呢?
Flutter引擎版本其实就是commit id
,可以在Flutter SDK目录/bin/internal/engine.version
文件中获得。例如我当前电脑的Flutter版本是3.7.12
,engine.version
文件位于/opt/homebrew/Caskroom/flutter/3.7.12/flutter/bin/internal/
目录,引擎版本是:
1a65d409c7a1438a34d21b60bf30a6fd5db59314
既然Flutter引擎版本是commit id
,那么就可以通过修改前面的配置指定版本。修改后:
solutions = [{
"managed": False,
"name": "src/flutter",
"url": "git@github.com:<your_name_here>/engine.git@1a65d409c7a1438a34d21b60bf30a6fd5db59314",
"custom_deps": {},
"deps_file": "DEPS",
"safesync_url": "",
}, ]
在engine
目录下执行(需要代理):
gclient sync
项目有点大,大概需要下载10GB,其中很大一部分是在下载依赖的第三方库,后续编译也相当耗时。
同步成功后,engine
目录下会有一个src
目录,如果在这个路径下执行git log
,会发现commit id
好像有点不对:
commit 8747bce41d0dc6d9dc45c4d1b46d2100bb9ee688 (HEAD)
Author: Jenn Magder <magder@google.com>
Date: Wed Nov 30 14:05:32 2022 -0800
Sort macOS SDK paths to keep order stable between runs (#652)
...
别急,真正的引擎项目在src
目录下的flutter
目录。src
目录中的项目是这个buildroot,用于搭建Flutter引擎的构建环境。
如果后续需要切换其他版本,请按以下步骤操作:
engine/src/flutter
目录路径下commit id
git reset --hard [commit id]
gclient sync -D --with_branch_heads --with_tags
参考文档:
注意,以下所有命令都在engine/src
目录路径下运行。
flutter/tools/gn --unoptimized
生成的文件存放于engine/src/out/host_debug_unopt
目录。
flutter/tools/gn --ios --unoptimized
生成的文件存放于engine/src/out/ios_debug_unopt
目录。
flutter/tools/gn --ios --simulator --unoptimized
# 如果是M系列芯片电脑,建议加上--simulator-cpu=arm64参数,用于支持arm64架构的模拟器
flutter/tools/gn --ios --simulator --simulator-cpu=arm64 --unoptimized
生成的文件存放于engine/src/out/ios_debug_sim_unopt
或engine/src/out/ios_debug_sim_unopt_arm64
目录。
如果是M系列芯片电脑,没有加上--simulator-cpu=arm64
参数,后续Xcode模拟器调试可能会遇到没有iOS设备可选择的情况:
解决方法:按这个步骤[Xcode菜单栏] -> [Product] -> [Destination] -> [Destination Architectures] -> [Show Both]操作,显示全部iOS模拟器。
以上只生成了Debug模式相关的文件用于后续调试,如果需要更多模式(Profile/Release等),可以参考文档Flutter’s modes或通过flutter/tools/gn -h
命令了解更多用法。
ninja -C out/ios_debug_unopt && ninja -C out/host_debug_unopt
ninja -C out/ios_debug_sim_unopt && ninja -C out/host_debug_unopt
# 如果前面使用了--simulator-cpu=arm64参数
ninja -C out/ios_debug_sim_unopt_arm64 && ninja -C out/host_debug_unopt
首次构建编译比较耗时,CPU会满载(电脑买来这么久一直没转过的风扇终于了有表现的机会
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。