Gitee地址的Flutter自动升级,Flutter命令无响应

670 阅读3分钟

Gitee地址的Flutter自动升级,Flutter命令无响应

如果能上墙的,可以略过本篇~

现象:

MAC命令行输入所有Flutter命令,都无法响应。

发现问题:

因为Flutter自动升级,会在Flutter的git下面添加一个名为__flutter_version_check__ 的remote 如下:

➜  Flutter git:(stable) ✗ git remote
__flutter_version_check__
origin
➜  Flutter git:(stable) ✗

解决:

1、先试一试尝试找到Flutter源码中相关内容

用如下命令查找所有包含https://github.com/flutter/flutter.git的字符串文件

➜  packages git:(stable) ✗ find . -depth | xargs grep https://github.com/flutter/flutter.git | grep github.com >> ~/tmp.txt
➜  packages git:(stable) ✗ cat ~/tmp.txt

./bin/flutter:  echo "       git clone -b stable https://github.com/flutter/flutter.git"
./bin/flutter.bat:  ECHO        git clone -b stable https://github.com/flutter/flutter.git
./packages/flutter_tools/test/integration.shard/downgrade_upgrade_integration_test.dart:      'https://github.com/flutter/flutter.git',
./packages/flutter_tools/test/general.shard/runner/flutter_command_runner_test.dart:        when(processManager.runSync('git fetch https://github.com/flutter/flutter.git --tags'.split(' '),
./packages/flutter_tools/test/general.shard/version_test.dart:      <String>['git', 'fetch', 'https://github.com/flutter/flutter.git', '--tags'],
./packages/flutter_tools/test/general.shard/version_test.dart:      <String>['git', 'fetch', 'https://github.com/flutter/flutter.git', '--tags'],
./packages/flutter_tools/test/general.shard/version_test.dart:      <String>['git', 'fetch', 'https://github.com/flutter/flutter.git', '--tags'],
./packages/flutter_tools/test/general.shard/version_test.dart:      <String>['git', 'fetch', 'https://github.com/flutter/flutter.git', '--tags'],
./packages/flutter_tools/test/general.shard/version_test.dart:      <String>['git', 'fetch', 'https://github.com/flutter/flutter.git', '--tags'],
./packages/flutter_tools/test/general.shard/version_test.dart:      <String>['git', 'fetch', 'https://github.com/flutter/flutter.git', '--tags'],
./packages/flutter_tools/test/general.shard/version_test.dart:    } else if (argsAre('git', 'remote', 'add', '__flutter_version_check__', 'https://github.com/flutter/flutter.git')) {
./packages/flutter_tools/test/general.shard/version_test.dart:    } else if (argsAre('git', 'fetch', 'https://github.com/flutter/flutter.git', '--tags')) {
./packages/flutter_tools/lib/src/version.dart:const String _flutterGit = 'https://github.com/flutter/flutter.git';
./packages/flutter_tools/lib/src/version.dart:    // Flutter 1.10.2-pre.69 • channel master • https://github.com/flutter/flutter.git
./dev/bots/test/prepare_package_test.dart:          'git remote set-url origin https://github.com/flutter/flutter.git': null,
./dev/bots/test/prepare_package_test.dart:          'git remote set-url origin https://github.com/flutter/flutter.git': null,
./dev/bots/test/prepare_package_test.dart:          'git remote set-url origin https://github.com/flutter/flutter.git': null,
./dev/bots/prepare_package.dart:const String githubRepo = 'https://github.com/flutter/flutter.git';
./dev/devicelab/lib/framework/utils.dart:    await exec('git', <String>['clone', 'https://github.com/flutter/flutter.git']);
./.git/config:	url = https://github.com/flutter/flutter.git
 
➜  packages git:(stable) ✗

于是就想替换掉所有github.com的地方是不是就可以解决问题了呢?但答案是不能解决,因为下载下来的Flutter是经过源码编译一次的可执行文件。

2、再想办法:

删除Flutter目录,重新下载一遍,是不是就跳过升级了?

➜  flutter-learning rm -rf Flutter
➜  flutter-learning git clone git@gitee.com:mirrors/Flutter.git -b stable
Cloning into 'Flutter'...
remote: Enumerating objects: 10755, done.
remote: Counting objects: 100% (10755/10755), done.
remote: Compressing objects: 100% (5683/5683), done.
remote: Total 251600 (delta 7500), reused 6658 (delta 4850), pack-reused 240845
Receiving objects: 100% (251600/251600), 84.03 MiB | 3.33 MiB/s, done.
Resolving deltas: 100% (197825/197825), done.
Updating files: 100% (4658/4658), done.
➜  flutter-learning

但是以上方法,会带来后遗症。每次需要重新修改gradle墙。如下:

➜  flutter-learning vi Flutter/packages/flutter_tools/gradle/flutter.gradle

具体修改如下:

buildscript {
     repositories {
-        google()
-        jcenter()
+        // google()
+        // jcenter()
+        maven{ url 'https://maven.aliyun.com/repository/google' }
+        maven{ url 'https://maven.aliyun.com/repository/jcenter' }
+        maven{ url 'http://maven.aliyun.com/nexus/content/groups/public' }
     }

以上maven地址可以改为你在用的地址。

然后,再使用任何flutter命令时,又会进行一次 Flutter Build。

但是Build之后还会自动升级(不清楚这部分的原因,知道的欢迎留个言),进入了死循环。任然无法使用flutter命令。。。。。。

3、别放弃!!!

再重新git下载一遍Gitee代码后,不要立刻执行Flutter命令。应该先做 将包含Github仓库链接地址的文件中的内容 改为 Gitee对应的仓库地址即可。然后再执行一次Flutter命令,触发 Flutter Build 流程。待编译完后,即可正常使用Flutter命令了。

在替换仓库地址时,可以仅替换以下几个文件。当然全部替换最佳,因为你不知道后面会遇到什么问题。

// 需要更改的文件:
/dev/bots/prepare_package.dart
/dev/devicelab/lib/framework/utils.dart
/packages/flutter_tools/lib/src/version.dart
...

// 更改信息举例:
-  const String _flutterGit = 'https://github.com/flutter/flutter.git';
+  const String _flutterGit = 'https://gitee.com/mirrors/Flutter.git';

4、Good luck

遇到升级问题欢迎留言。