Flutter 执行 --version 和 doctor 卡住

上一篇:Dart 执行 shell 命令:如何实现交互式操作?
下一篇:macOS 无法打开“Xxx.app”,因为 Apple 无法检查其是否包含恶意软件

Flutter 执行 --version 和 doctor 卡住,目前发现出现这种问题的原因有两种,如下:

  1. 第一种情况:同一个 Flutter SDK 有其他任务正在执行
    此时,终端提示 Waiting for another flutter command to release the startup lock...
  • 解决方法
    这种情况只需删除 Flutter SDK 目录下 bin/cache/lockfile 文件即可。
  1. 第二种情况:个别版本 SDK 执行时会去 github 更新 git 标签
    通过 flutter --version --verbose 命令可以查看详情,如果卡在 git fetch https://github.com/flutter/flutter.git --tags,那么就是这个原因导致的,对于国内很多网络来说访问 github 本身就比较慢,所以卡住,得等好久才能执行完成。
  • 解决方法
    只有个别版本的 SDK 会执行该操作,原因不明,如果遇到这种问题,那么可以将 github 的 flutter 仓库地址修改为 gitee 的 flutter 仓库地址,方式如下:
    编辑 Flutter SDK 目录下 packages/flutter_tools/lib/src/version.dart 文件,找到 _flutterGit 常量的定义,修改该常量的值,将 github 地址修改为 gitee 地址,修改如下:

    /// The flutter GitHub repository.
    //const String _flutterGit = 'https://github.com/flutter/flutter.git';
    const String _flutterGit = 'https://gitee.com/mirrors/Flutter.git';
    
  • 生成 flutter_tools 方式 1
    修改完成后,需要重新编译成 flutter_tools.snapshot 文件。
    只需删除 bin 目录下的 cache 目录,重新执行 --version 以便 Flutter 重新生成该文件即可:

    $ rm -rf bin/cache
    $ ./bin/flutter --version --verbose
    

    此时,Flutter 会自动更新 cache 目录,也就是重新下载 dart sdk,并重新 Build flutter tools,包括上面修改的 flutter_tools 包。通过上面命令,可以看到,再次更新 git tags 时,走的时 gitee 仓库:git fetch https://gitee.com/mirrors/Flutter.git --tags,卡住问题也就解决了。

  • 生成 flutter_tools 方式 2(失败)
    flutter_tools 是一个 package,那么是否可以直接编译成功 flutter_tools.snapshot 文件替换掉 bin/cache/ 下的对应文件呢?
    执行如下命令进行测试(需要配置支持 dart2native 命令的 Dart SDK):

    $ dart2native packages/flutter_tools/lib/executable.dart -k aot -o bin/cache/flutter_tools.snapshot
    

    通过执行上面命令,会编译成同名文件覆盖原文件,接着执行 flutter --version --verbose 命令,很不幸,报错了,报错原因暂时没有深入分析,目前是通过 方式 1 解决的。

上一篇:Dart 执行 shell 命令:如何实现交互式操作?
下一篇:macOS 无法打开“Xxx.app”,因为 Apple 无法检查其是否包含恶意软件

你可能感兴趣的:(Flutter 执行 --version 和 doctor 卡住)