Flutter安装和踩坑指南(windows)

4,170 阅读3分钟

Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。

开发环境

windows10

安装Flutter

获取Flutter SDK

  1. 官网下载
  2. github直接拉取代码(推荐使用)

环境变量配置

要在终端运行 flutter 命令, 你需要添加以下环境变量到系统PATH:

  1. 转到 “控制面板>用户帐户>用户帐户>更改我的环境变量”
  2. 在“用户变量”下检查是否有名为“Path”的条目:
    • 如果该条目存在, 追加 flutter\bin的全路径,使用 ; 作为分隔符.
    • 如果条目不存在, 创建一个新用户变量 Path ,然后将flutter\bin的全路径作为它的值.
  3. 在“用户变量”下检查是否有名为”PUB_HOSTED_URL”和”FLUTTER_STORAGE_BASE_URL”的条目,如果没有,也添加它们。两者的值如下
PUB_HOSTED_URL=https://pub.flutter-io.cn
FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn

运行 flutter doctor

运行flutter doctor ,如果没有没有任何报错,那么恭喜你,你之前已经集成了相关的环境,可以直接进行开发了。但是,如果没有安装过android-sdk 和 java-sdk 环境的朋友一定会报错,那么就需要继续了。

安装java-sdk

android-sdk的安装需要依赖java-sdk,所以需要安装java-sdk,具体的安装方法网上已经有很多了,在此不再赘述。

安装android-sdk

同样,android-sdk亦不再赘述。但是尽量翻墙下载sdk而不要使用国内的镜像,因为设置代理以后,flutter的部分请求会被拦截转发到国内的镜像上而导致程序无法运行(这个坑我找了很久)

处理各种问题

运行 flutter doctor 来检查环境是否已经搞定,正常来说成功了。下面列举了一些可能会出现的问题和解决方法供大家参考

  1. Android license status unknown.
<!--执行-->
flutter doctor --android-licenses
<!--情况1-->
如果是询问你是否接受的,那么一直 y 下去即可
例如:
Review licenses that have not been accepted (y/N)? y
最后再次运行 flutter doctor
<!--情况2-->
A newer version of the Android SDK is required. To update, run:
C:\Users\tdmil\AppData\Local\Android\sdk\tools\bin\sdkmanager --update
执行(当然这个路径是根据你的sdk路径变化的)
C:\Users\tdmil\AppData\Local\Android\sdk\tools\bin\sdkmanager --update
  <!--情况2.1-->
  成功,执行 flutter doctor --android-licenses 一般就会出现情况1
  <!--情况2.2-->
  Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
    at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
    at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
    at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
    at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73)
    at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
  Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
        ... 5 more
  这种情况一般是java的环境配置有问题,建议检查java环境
  <!--情况2.3-->
  其他更新错误
  将 \sdk\tools 文件夹重命名 改为 \sdk\tool
  运行 C:\Users\tdmil\AppData\Local\Android\sdk\tool\bin\sdkmanager --update
  更新完成后会新生成一个tools文件夹,将tools文件夹内的所有文件复制到 tool 内,重复的覆盖即可,删掉tools ,将tool 改回 tools 
  执行 flutter doctor --android-licenses
  1. services.gradle.org/distributio… 文件下载失败 直接通过浏览器下载该文件,然后在 android/gradle/wrapper中打开 gradle-wrapper.properties 文件 修改 distributionUrl='你下载后文件存放的路径'
  2. 代理问题 如果你在android studio中设置了android-sdk的国内镜像代理,那么一定会出现问题,因为这些代理会将一些其他的请求拦截掉,导致你的项目无法正常运行,而且就算你关掉代理,仍然不会成功,因为需要删除代理配置文件下的请求代理数据,文件位于你的android-sdk安装路径下,e:\android-sdk\tools\apps\SdkController\project.properties

总结

在配置Flutter开发环境的过程中,前前后后遇到了很多坑,个人建议如果能翻墙,还是不要设置各种代理,因为很可能某个代理转发了正常的请求而导致某些未知的问题。同时出现问题,建议去Flutter的issue内搜索,其中已经包含了很多常见的错误解决方式。