我的水平远远够不上厉害,但在一些朋友看来可能有可取之处,当他们自学遇到困难时,偶尔会问我是怎么学的。记录这样的流水账,你可以看到,我遇到新事物,一样是一点点试错。相信真正的大牛,(至少曾经)也是这样过来。 只不过大牛可能悟性好,试错时间和次数少一些。自己试错多了,也会掌握试错的套路。
某个程序员朋友,连 help 和 man 都不知道,让人着急。可我高中时,明明已经学过简单的编程,对 Linux 居然连听都没听过,听同学讨论一头问号。我的反应是什么?放假第一时间让我的电脑变成 Windows / Ubuntu 双系统。他之前不知道 help,现在知道了。
互联网时代,知道了关键词,就不能说你一无所知。起码要把公开资料看完吧?
Git for Windows
2.x,并且勾选
从 Windows 命令提示符使用 Git
选项。
如果 Windows 版的 Git 已经安装过了,那么请确保能从命令提示符或者 PowerShell 中直接执行 git 命令。
installing-powershell
发现 6.0 以上不能直接安装,还得安装 Powershell Core (因为从 Win 专用变成跨平台了)。要不要装最新的呢?先不管,反正 .NET 4.5 以上是一定需要的,先看 .NET 的版本
1
2
3
4
5
6
7
8
9
10
11
$DotNetVersions = Get-ChildItem HKLM:\SOFTWARE\WOW6432Node\Microsoft\Updates | Where-Object {$_ .name -like
"*.NET Framework*" }
ForEach ($Version in $DotNetVersions ){
$Updates = Get-ChildItem $Version .PSPath
$Version .PSChildName
ForEach ($Update in $Updates ){
$Update .PSChildName
}
}
是 4.7 ,够新了。
wmf-install-configure
不同版本的 Powershell 和 WMF 的依赖关系如下:
Powershell 版本
PS 5.0
PS 5.1
PS 6.0+
结论,不管我装不装 6.0+,安装一个 WMF 5.1 总是没错的。
下载,解压,按说明在 Powershell 里运行安装的 ps1 脚本。提示没有签名。
1
2
get-executionpolicy -list
set-executionpolicy remotesigned -scope process
再运行一次,可以了。
这时再看 Powershell 的版本。
1
2
3
4
5
$PSVersionTable .PSVersion
Major Minor Build Revision
----- ----- ----- --------
5 1 14409 1005
Powershell 5.1 已经包含在 WMF 5.1 了,已经满足要求,就没啥动力继续折腾 6.0+ 了。
在中国网络环境下使用 Flutter
扫了一眼,直接用 Flutter 社区的镜像。因为是 Windows,打开环境变量,加上这两个值:
1
2
PUB_HOSTED_URL=https://pub.flutter-io.cn
FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
https://www.androiddevtools.cn/
有收集。注意只是收集各个版本的地址而已,来源还是官方的,下完可以校验一下。这回的 SDK tools 在 Android Studio 显示 26.0.1,终于可以调用了。有一个可用更新 26.1.1,感觉这里就是问题所在,又给升了级,果然又出现上面的
NoClassDefFoundError
。
先不管这个问题,退回到可用的 26.0.1。这是重新认真看 Doctor summaries,发现
"platforms;android-28" "build-tools;28.0.3"
,也就是它要求的所谓 SDK Version,并非我理解的 SDK tools 的 version,而是分别指 platform 和 build-tools 的版本,对应 Android 9(Pie)。为什么迟迟没有发现这点?因为在
flutter 官方的引导
上面有这么一句话
To prepare to run and test your Flutter app on an Android device, you’ll need an Android device running Android 4.1 (API level 16) or higher.
被我理解为了开发的 API level 是 16+。
StackOverflow 问题1
,
StackOverflow 问题2
编辑器打开 sdkmanager.bat,找到 DEFAULT_JVM_OPTS,在后面追加
-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee
,注意 Windows 环境不需要额外在外面加单引号,加了会导致变量扩充
%~dp0\..
出错,加完之后那一行变成了:
1
set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0\.." -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee
然后再次执行
1
2
sdkmanager --update
done
没有任何变化,版本没变,文件修改时间没变,然后
flutter doctor --android-licenses
依然说需要新版本。
然后尝试执行
提示有 licenses 还没 accept,赶紧一路 yes。
这时我试着再
flutter doctor
一次,居然通过了。说明版本旧不是根本问题。
关键是 accept 掉 licenses
。