解决 Flutter Device Daemon 启动失败问题的实践记录

解决 Flutter Device Daemon 启动失败问题的实践记录

最近在使用 Flutter 开发时踩了一个坑。看似是个小问题,但折腾了好久,最终通过日志分析和查阅资料才找到了解决办法。这里记录一下整个问题的排查过程,希望能帮助到遇到类似问题的小伙伴。


问题背景

事情是这样的,我在启动 Android Studio 时突然弹出了一个错误窗口:

提示 Flutter daemon启动失败,过了一会儿之后,又弹出下面的弹窗:

The Flutter device daemon cannot be started. 
Please check your configuration and restart the IDE.  
You may need to increase the maximum number of file handles available globally.

错误内容提示:Flutter Device Daemon 无法启动,让我检查配置并重启 IDE,还建议可能需要增加全局文件句柄的限制。

一开始我以为是 Windows 系统文件句柄数限制导致的问题,于是开始在网上搜索解决方法,尝试了几个修改文件句柄限制的方案,结果都没能解决问题。

使用 flutter doctor -v 也没有看到什么错误。重新安装了 flutter 和 Android Studio 也没能解决问题。

这个问题困扰了我两天,我开始怀疑不是什么文件句柄限制,而是其它问题引起的。所以我开始自动尝试去分析问题。


问题排查

1. 查看日志

在多次尝试无果后,我决定打开 Android Studio 的日志文件看看能不能找到一些蛛丝马迹。通过 Show Log in Explorer 功能定位到日志文件后,发现了这样一行关键日志:

#io.flutter.run.daemon.DeviceDaemon - starting Flutter device daemon #3: E:/Developer/flutter/bin/flutter.bat daemon

这行日志的意思是,Flutter 尝试启动设备守护进程(Device Daemon),但显然出了问题。于是,我决定手动执行这个命令,看看具体哪里出错。

2. 手动运行命令

我打开终端,直接运行日志中提到的命令:

bash 复制代码
E:/Developer/flutter/bin/flutter.bat daemon

然而命令并没有成功运行,而是报了以下错误:

Error: Unable to find git in your PATH.

这让我有些疑惑,因为我的系统中明明已经安装了 Git,并且在环境变量 PATH 中。我再次确认了一下:

bash 复制代码
PS C:\Users\Administrator\Desktop> git --version
git version 2.47.1.windows.2

PS C:\Users\Administrator\Desktop> where git
C:\Program Files\Git\cmd\git.exe

从结果可以看出,Git 工作正常,也确实在 PATH 中。那么为什么 Flutter 依然提示找不到 Git 呢?这让我有点抓狂,但也让我意识到问题可能和 Flutter 对 Git 的特定检查逻辑有关。


解决过程

1. 查阅资料

为了更进一步定位问题,我在网上搜索 "Unable to find git in your PATH" 时发现了一篇 Stack Overflow 的帖子:How to solve "Unable to find git in your PATH" on Flutter?。帖子中提到了一种解决方案:

bash 复制代码
git config --global --add safe.directory '*'

这条命令的作用是将所有 Git 目录标记为安全目录,避免 Flutter 在检查 Git 时出现权限或安全相关的限制。

2. 执行命令

根据帖子的建议,我打开终端,输入以下命令:

bash 复制代码
git config --global --add safe.directory '*'

然后再次尝试运行 flutter.bat daemon,这次成功了!终端输出如下:

bash 复制代码
PS C:\Users\Administrator\Desktop> E:/Developer/flutter/bin/flutter.bat daemon
[{"event":"daemon.logMessage","params":{"level":"status","message":"Running \"flutter pub get\" in flutter_tools..."}}]
[{"event":"daemon.logMessage","params":{"level":"status","message":"Starting device daemon..."}}]
[✓] Flutter daemon started successfully

这说明问题已经解决了!

3. 验证结果

接下来,我重启了 Android Studio,观察是否还会弹出错误窗口。结果发现,Flutter Device Daemon 启动失败的弹窗没有再出现,所有功能都恢复正常。


原因分析

通过这次排查,我总结出了问题的根本原因:

  1. Git 的安全目录限制

    Flutter 在启动过程中会检查当前 Git 目录是否被标记为"安全目录"。如果未标记,可能会因为权限问题导致 Flutter 无法正常识别 Git。

  2. 环境变量和权限问题

    虽然我的 Git 已正确配置在 PATH 环境变量中,但由于 Flutter 对安全目录的检查逻辑,导致它无法正常工作。

  3. 解决办法

    通过执行 git config --global --add safe.directory '*',将所有目录标记为安全目录,绕过了这一限制。


经验总结

通过这次排查,我学到了几个重要的经验:

1. 日志是最好的帮手

当遇到复杂问题时,查看日志往往是最快的排查方法。通过日志,我们可以清楚地知道系统在做什么,以及问题出在哪个环节。这次就是通过日志定位到 flutter.bat daemon 命令出了问题。

2. 多查资料,多看社区

开发过程中,遇到问题时别忘了利用社区资源,比如 Stack Overflow 等。很多问题其实已经有人遇到并解决了,只需要耐心查找和尝试。

3. 理解命令的作用

解决问题时,最好理解命令的作用和影响。例如 git config --global --add safe.directory '*' 这条命令虽然解决了问题,但它实际上是将所有目录都标记为安全目录。虽然方便,但可能带来一些潜在的安全隐患(比如对不受信任的目录执行 Git 操作时)。


结语

折腾了两天的问题终于解决了,心情舒服多了。

通过这个问题知道了,有时候有些弹窗描述的错误并不是真正的错误,关键还是要靠自己去分析原因,解决问题。

希望可以帮到其它小伙伴。

.

.

相关推荐
sun_weitao15 分钟前
flutter-webrtc安装示例
flutter·webrtc
大厂在职_vyD2 天前
Flutter的绘制流程
flutter
Wuxiaoming1352 天前
Flutter Isolate解决耗时任务导致卡死
flutter
大厂在职_XpW2 天前
Flutter 完整开发实战详解(二、 快速开发实战篇)_0_10_flutter dio
windows·flutter
明似水2 天前
高效管理Dart和Flutter多包项目:Melos工具全解析
android·前端·flutter
大厂在职_fUk2 天前
Flutter完整开发实战详解(六、 深入Widget原理)
前端·javascript·flutter
天若子3 天前
flutter Selector 使用
flutter
早起的年轻人3 天前
Flutter List 的 every 如果回调函数抛出异常 应该如何处理
开发语言·python·flutter
健了个平_243 天前
【Cursor初体验】AI开发 Flutter 应用:一款快速预览SVGA的桌面小工具
前端·flutter·ios