Flutter不再支持win7,我决定手搓一个

版本信息

  • Flutter源码 commit-id:1d85de0fc802a640dff4fe91697f127d47f8cd21
  • Flutter源码版本:3.29.0-1.0.pre.309

说明

目前最新版 Flutter 并不支持 win7,可以修改引擎源码重新编译以支持win7系统。读者需要已在Windows电脑配置过 Flutter 开发环境,并且已经可以正常进行 Windows 版 Flutter 应用开发。

Flutter 代码拉取过程中会进行复杂的文件下载,涉及多种联网方式,所以请保证自己的电脑有稳定的科学上网(翻墙工具建议使用tun隧道模式),如果代码拉取过程中卡在了某一步,请检查网络。

Flutter 引擎编译过程中大约需要50G的磁盘空间,可能耗时几个小时,请保证磁盘空间与耐心充足。

好的,我们开始。

环境准备

  • 1.编译的机器使用win10或win11的64位系统。
  • 2.确保计算机上启用了长路径支持。以管理员身份启动 PowerShell 并执行:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 -Force
  • 3.安装 Python3,保证 python3 命令可以正常使用。
  • 4.添加以下环境变量(注意根据实际vs安装情况配置变量)
DEPOT_TOOLS_WIN_TOOLCHAIN=0
GYP_MSVS_OVERRIDE_PATH=C:\Program Files\Microsoft Visual Studio\2022\Community
WINDOWSSDKDIR="C:\Program Files (x86)\Windows Kits\10"

代码拉取

1.执行命令拉取 depot_tools

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

2.拉取完成后,将 depot_tools 目录加入系统环境变量 Path

3.执行命令拉取 Flutter 代码

git clone https://github.com/flutter/flutter.git

4.拉取 Flutter 依赖

  • 4.1进入刚拉取的 Flutter 代码根目录
cd .\flutter\
  • 4.2复制gclient脚本
copy .\engine\scripts\standard.gclient .gclient
  • 4.3 拉取代码与依赖库,注意下面命令使用管理员权限运行
gclient sync

这个过程耗时较久,可能下载超过10G的代码与依赖文件。如果中途因网络原因执行失败,可尝试重新执行命令,继续拉取。

需要注意的是,命令可能卡在Syncing projects: 100% (n/n), done.这一步很久,虽然输出信息没有变化,但实际后台在使用cpid拉取大文件,请耐心等待。

可观察任务管理器中的网络信息确认下载情况,如果确实是命令行卡住(没有网络连接)了,请检查科学上网后重试。

如果遇到权限导致文件读写失败的问题,可关闭命令行窗口,然后重新启动一个管理员权限命令行窗口,重新执行命令

5.将拉取后代码的 flutter\bin 目录与 flutter\engine\src\flutter\bin 目录加入系统变量 Path(如果已经设置过 flutter\bin 目录,请先移除)。

注意几个新加的环境变量 Path 路径位于其他路径之前。

版本信息

  • Flutter源码 commit-id:1d85de0fc802a640dff4fe91697f127d47f8cd21
  • Flutter源码版本:3.29.0-1.0.pre.309

说明

目前最新版 Flutter 并不支持 win7,可以修改引擎源码重新编译以支持win7系统。读者需要已在Windows电脑配置过 Flutter 开发环境,并且已经可以正常进行 Windows 版 Flutter 应用开发。

Flutter 代码拉取过程中会进行复杂的文件下载,涉及多种联网方式,所以请保证自己的电脑有稳定的科学上网(翻墙工具建议使用tun隧道模式),如果代码拉取过程中卡在了某一步,请检查网络。

Flutter 引擎编译过程中大约需要50G的磁盘空间,可能耗时几个小时,请保证磁盘空间与耐心充足。

好的,我们开始。

环境准备

  • 1.编译的机器使用win10或win11的64位系统。
  • 2.确保计算机上启用了长路径支持。以管理员身份启动 PowerShell 并执行:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 -Force
  • 3.安装 Python3,保证 python3 命令可以正常使用。
  • 4.添加以下环境变量(注意根据实际vs安装情况配置变量)
DEPOT_TOOLS_WIN_TOOLCHAIN=0
GYP_MSVS_OVERRIDE_PATH=C:\Program Files\Microsoft Visual Studio\2022\Community
WINDOWSSDKDIR="C:\Program Files (x86)\Windows Kits\10"

代码拉取

1.执行命令拉取 depot_tools

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

2.拉取完成后,将 depot_tools 目录加入系统环境变量 Path

3.执行命令拉取 Flutter 代码

git clone https://github.com/flutter/flutter.git

4.拉取 Flutter 依赖

  • 4.1进入刚拉取的 Flutter 代码根目录
cd .\flutter\
  • 4.2复制gclient脚本
copy .\engine\scripts\standard.gclient .gclient
  • 4.3 拉取代码与依赖库,注意下面命令使用管理员权限运行
gclient sync

这个过程耗时较久,可能下载超过10G的代码与依赖文件。如果中途因网络原因执行失败,可尝试重新执行命令,继续拉取。

需要注意的是,命令可能卡在Syncing projects: 100% (n/n), done.这一步很久,虽然输出信息没有变化,但实际后台在使用cpid拉取大文件,请耐心等待。

可观察任务管理器中的网络信息确认下载情况,如果确实是命令行卡住(没有网络连接)了,请检查科学上网后重试。

如果遇到权限导致文件读写失败的问题,可关闭命令行窗口,然后重新启动一个管理员权限命令行窗口,重新执行命令

5.将拉取后代码的 flutter\bin 目录与 flutter\engine\src\flutter\bin 目录加入系统变量 Path(如果已经设置过 flutter\bin 目录,请先移除)。

注意几个新加的环境变量 Path 路径位于其他路径之前。

代码修改

这一步的修改可让 Flutter 支持 win7。

下载附件里的几个diff文件,将 flutter_01.diff 复制到flutter 源码根目录,执行命令

git apply flutter_01.diff

将另外三个 diff 文件复制到 \flutter\engine\src\flutter\third_party\dart 目录,并依次执行 git apply 命令。

git apply dart_01.diff
git apply dart_02.diff
git apply dart_03.diff

开始编译

1.关闭命令行窗口,然后再次使用管理员权限启动命令行,定位到拉取的代码flutter\engine\src目录下。

2.执行命令

et build --config host_release

host_release 表示编译 release 版本,可使用 host_profilehost_release 编译其他版本。

注意这个 et 命令实际是 gn 命令与 ninja 命令的组合,更详细的参数配置可使用 gnninja 命令执行编译,具体请参考官方文档。

编译完成的产物在 \flutter\engine\src\out\host_release 目录下。

测试运行

创建新 Flutter 项目,创建完成后实现下面命令,可使用新编译的引擎运行 exe。

flutter run --release --local-engine-src-path D:\flutter\engine\src\ --local-engine=host_release --local-engine-host=host_release

注意根据实际 Flutter 源码目录修改命令中的参数。

系统兼容说明

编译完成后的程序可在低版本windows系统运行,但需要注意几点:

  • 1.不支持32位
  • 2.需要win7系统安装kb4474419系统补丁,没有这个补丁的话会启动失败
  • 3.win8系统可能启动黑屏,可以把d3dcompiler_47.dll(可在企业微信安装目录找)文件放到引擎同目录下。
  • 4.win7下的其他问题,请参考附录链接里的企业微信相关文章。

参考文章

附件

代码修改

这一步的修改可让 Flutter 支持 win7。

下载附件里的几个diff文件,将 flutter_01.diff 复制到flutter 源码根目录,执行命令

git apply flutter_01.diff

将另外三个 diff 文件复制到 \flutter\engine\src\flutter\third_party\dart 目录,并依次执行 git apply 命令。

git apply dart_01.diff
git apply dart_02.diff
git apply dart_03.diff

开始编译

1.关闭命令行窗口,然后再次使用管理员权限启动命令行,定位到拉取的代码flutter\engine\src目录下。

2.执行命令

et build --config host_release

host_release 表示编译 release 版本,可使用 host_profilehost_release 编译其他版本。

注意这个 et 命令实际是 gn 命令与 ninja 命令的组合,更详细的参数配置可使用 gnninja 命令执行编译,具体请参考官方文档。

编译完成的产物在 \flutter\engine\src\out\host_release 目录下。

测试运行

创建新 Flutter 项目,创建完成后实现下面命令,可使用新编译的引擎运行 exe。

flutter run --release --local-engine-src-path D:\flutter\engine\src\ --local-engine=host_release --local-engine-host=host_release

注意根据实际 Flutter 源码目录修改命令中的参数。

系统兼容说明

编译完成后的程序可在低版本windows系统运行,但需要注意几点:

  • 1.不支持32位
  • 2.需要win7系统安装kb4474419系统补丁,没有这个补丁的话会启动失败
  • 3.win8系统可能启动黑屏,可以把d3dcompiler_47.dll(可在企业微信安装目录找)文件放到引擎同目录下。
  • 4.win7下的其他问题,请参考附录链接里的企业微信相关文章。

参考文章

附件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值