ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Windows下Flutter环境搭建全攻略:从零到跑通第一个Demo

Windows下Flutter环境搭建全攻略:从零到跑通第一个Demo 很多人在Windows上第一次搭Flutter环境都会卡在莫名其妙的地方——明明照着教程一步步来的结果VSCode里跑不起来flutter doctor一片红要不就是Gradle下载到天荒地老。这篇文章就是把我自己反复装了好几遍、也帮人远程修过好几遍的完整过程从零开始捋一遍每个步骤都会解释为什么要这么做同时把最容易踩的坑单独拎出来说清楚。适合刚接触Flutter的移动端开发者、想从Java/Kotlin切过来的后端同学以及被各种报错折磨到怀疑人生的新手。1. 安装前的准备与整体思路1.1 先搞懂这套环境到底由哪些部分组成很多教程上来就让你装这个装那个但没说清楚每个东西是干嘛的导致出了问题也判断不了是哪一环挂了。我先按自己的理解把这套链路拆开。Flutter本身是一套跨平台UI框架它负责把你写的Dart代码编译成各个平台的产物——Android上是APK、Windows上是EXE、Web上是JS。而Dart是Flutter的唯一开发语言你可以把它理解成Flutter的“母语”。这两者是绑定关系装Flutter SDK的时候里面会自带一个特定版本的Dart不需要你单独再装一次。VSCode在这里扮演的角色是编辑器它本身不参与编译只是通过插件给你提供代码提示、断点调试和可视化运行。真正干活的是Flutter SDK里那套命令行工具链VSCode只是帮你把命令封装成了按钮。Android Studio则决定了你能否把Flutter项目跑到安卓模拟器或真机上。就算你打算写Windows桌面应用也建议装Android Studio——因为Flutter的常用工具链、SDK Manager和模拟器管理都集成在里面而且flutter doctor检查项里就需要它。装之前还有个思路要明确版本匹配。Flutter对环境的依赖比较“轴”JDK版本不对、Android SDK版本不对、Gradle版本不对都会报错。我个人的习惯是能装最新稳定版就装最新稳定版但千万别混用beta版Flutter配老版本Android Studio否则排查问题的时间够你写好几个页面了。1.2 你需要准备的软件清单和下载方式我在Windows上实际装一遍最后这个清单是缺一不可的Git for Windows2.x以上JDK建议17这个版本对应新版Android Gradle PluginAndroid Studio新版自带JBR也就是JetBrains RuntimeFlutter SDK稳定版建议官网下载zip压缩包VSCode用户级安装或系统级安装都行VSCode的Flutter和Dart插件下载地址我就不贴了搜索引擎一搜官网就能找到这里重点提醒几个下载时容易忽略的点。Flutter SDK一定去官网下载stable分支的zip包不要用命令行git clone。倒不是说git clone不行而是国内网络环境下git clone经常在中途断掉而且clone的默认分支可能不是stable。zip包下载完解压就能用这是最省事的方案。Android Studio下载时注意选带Android SDK的那个版本不要只下命令行工具。新版Android Studio的安装包里包含了SDK Manager和模拟器省去你后面单独配的麻烦。Git和JDK的安装包都比较直白一路Next就行但装完之后务必打开一个全新的CMD窗口验证版本——很多人就是装完了不验证等报错了才发现根本没配上。1.3 磁盘目录规划的几点建议这一步很多人不重视但我在实际使用中踩过好几次坑。Flutter SDK的解压目录我强烈建议放在一个不含中文、不含空格、层级很浅的位置比如D:\flutter。有些同事放在D:\Program Files\flutter里结果Gradle脚本在处理路径时出现了空格转义问题代理配置也容易出岔子。Android SDK的默认路径是C:\Users\你的用户名\AppData\Local\Android\Sdk这个路径本身没问题但如果你的Windows用户名是中文就会有一堆工具链不认。我建议在环境变量里把它改到D:\Android\Sdk这种纯英文路径。还有一点Windows的C盘空间够不够也是隐性坑。一个完整的Android SDK加几个系统镜像体积轻轻松松超过20G。Flutter build产生的缓存、Gradle的依赖仓库又占一二十G。如果C盘紧张趁环境还没搭起来就把这些目录都挪到其他盘后面会省心不少。2. Flutter/Dart SDK安装与环境变量配置2.1 环境变量的原理与配置步骤环境变量这东西很多新手把它当成玄学其实原理很简单。Windows在执行命令时会在PATH环境变量列出的所有目录里挨个找这个程序。你告诉系统flutter命令在哪个文件夹里系统才能在任何路径下都认它。打开方式右键“此电脑”选择“属性”点“高级系统设置”再点“环境变量”。在“系统变量”这一栏里找到Path双击编辑新增三条D:\flutter\binD:\Android\Sdk\platform-toolsD:\Android\Sdk\cmdline-tools\latest\bin第一条让系统找到flutter命令第二条让系统找到adb命令第三条让系统找到sdkmanager命令。每次改完环境变量必须关掉所有CMD窗口再重开因为环境变量只在窗口打开时读取一次。2.2 国内网络环境下的镜像配置这一步在官方文档里没有细写但国内开发者必须处理否则flutter pub get拉包的时候会让你等到怀疑人生。需要配置两个环境变量一个叫PUB_HOSTED_URL一个叫FLUTTER_STORAGE_BASE_URL。前者是Dart包管理器的下载源后者是Flutter引擎和SDK组件的下载源。把它们指向国内可用的镜像地址比如一些高校或云厂商提供的镜像站点速度能快几十倍。具体配置方法还是刚才那个环境变量界面在“系统变量”里点“新建”变量名分别填这两个变量值填对应的镜像地址。配置完之后重新开一个CMD窗口执行flutter doctor你会明显感觉到下载速度不一样了。我特别想强调一下配置这个东西不是“玄学偏方”而是因为默认源在海外国内直连不稳定是客观现实。搞清楚原理以后你就知道排错时该往哪个方向想。2.3 检查安装结果和常见配置误区配置完之后打开CMD执行flutter --version如果能输出版本号说明Flutter SDK路径配置成功。再执行dart --version同样能输出Dart版本。这里有个容易混淆的点如果你单独下载过Dart SDK环境变量里也配了Dart的路径那么执行dart --version会显示你单独装的那个版本而不是Flutter里自带的版本。我建议不要单独安装Dart SDK完全用Flutter自带的就够了否则两个Dart版本可能造成字节码不匹配的问题让你白排查半天。还有一个误区是认为装了Flutter就一定要装Android Studio其实不是——如果你只做Web或Windows桌面开发VSCode加Flutter就够了。但如果你打算摸安卓就老老实实装上后面flutter doctor那关你就懂了。3. Android工具链与VSCode开发环境配置3.1 Android Studio的安装细节与SDK管理Android Studio安装完第一次启动会引导你下载Android SDK。这个过程在国内网络下也比较痛苦不过好在Android Studio 4.0之后的版本都内置了镜像加速。如果没有加速建议在SDK Manager里把下载源的代理设置好。安装完进入欢迎页点“More Actions”选择“SDK Manager”这里有几个选项必须勾上Android SDK Platform-ToolsAndroid SDK Build-ToolsAndroid SDK Platforms下的某个API Level建议选最新的稳定版比如API 34或35Extras下的Android SDK Command-line ToolsCommand-line Tools这个特别容易漏。因为新版Flutter对Gradle的兼容检查会主动调用sdkmanager命令如果没装cmdline-toolsflutter doctor就会报错。装好之后注意SDK Manager里cmdline-tools要选带latest子目录的那个路径否则Flutter找不到。接受许可协议也是一步关键操作。在CMD里执行flutter doctor --android-licenses然后一路输入y回车。这一步是确认你接受各SDK组件的许可协议不同组件有不同的协议输到出现“All SDK package licenses accepted”才算完。很多人忘了这步导致后续一切正常却始终构建失败。3.2 VSCode插件安装与推荐配置VSCode装Flutter插件之前注意一下顺序先装Dart插件再装Flutter插件后者会自动依赖前者。直接在扩展商店搜索“Flutter”认准发布者是Dart Code的那个别装成一些第三方仿冒插件。装完之后打开VSCode的命令面板CtrlShiftP输入Flutter: Doctor它会直接在编辑器里显示环境检查结果。这个功能比命令行直观很多可以快速看出缺什么。我自己的常用插件清单供参考Flutter核心插件提供语法高亮、代码补全、调试和热重载DartFlutter的依赖插件Awesome Flutter Snippets提供大量代码片段比如stless直接生成StatelessWidget模板写UI的时候效率提升明显Error Lens把编译错误直接显示在代码行右侧不用切到终端看报错Bracket Pair Colorizer括号配色写嵌套Widget的时候能救命另外在VSCode设置里建议打开editor.formatOnSave保存时自动格式化代码Dart默认的格式风格比较规范打开这个能省很多手调格式的时间。3.3 模拟器创建与真机调试准备Android Studio里进入Device Manager选择创建虚拟设备。设备选择建议用Pixel系列系统镜像选带Google APIs的版本不要选带Play Store的版本——带Play Store的镜像在某些情况下无法获得root权限Flutter调试时可能受限。创建完模拟器之后启动它等它完全开机。然后在CMD里执行flutter devices如果能列出你的模拟器设备就说明Flutter能识别到它了。真机调试则需要打开手机的“开发者模式”和“USB调试”。不同品牌的打开方式不同大部分是连续点击“版本号”七次。连上电脑后手机会弹窗问是否允许USB调试选择“允许”。这里有个细节如果手机屏幕上不弹窗可能是没有授权拔掉重插一次试试。Windows下真机驱动偶尔也会有问题表现为设备管理器里能看到设备但adb不识别。这种时候去装一下对应品牌的USB驱动或者更新一下Windows系统补丁基本能解决。4. 创建Flutter项目并跑通第一个Demo4.1 项目创建方式的三种选择Flutter项目可以用三种方式创建按使用频率排序方式一VSCode命令面板创建按CtrlShiftP输入Flutter: New Project选择项目类型Application选择项目存放路径再填项目名。项目名必须是小写字母加下划线不能有中文不能有大写否则创建时会直接报错。方式二命令行创建flutter create my_app这种方式适合对命令行比较熟的人创建的位置就是当前CMD所在目录。如果想指定路径flutter create D:\projects\my_app方式三Android Studio创建在欢迎页选“New Flutter Project”这种方式适合已经打开Android Studio的人创建项目的同时可以直接配好运行设备但对VSCode用户来说多了一步。我个人推荐方式一因为这套教程本来就是VSCode为主而且命令面板创建的项目结构和命令行创建的一模一样没什么区别。4.2 项目结构速览与关键文件创建完项目后先花两分钟看一眼目录结构我挑几个核心的讲lib/main.dartDart源码入口你写的所有Dart代码都在lib目录下android安卓工程目录包含Gradle配置、AndroidManifest.xmliosiOS工程目录Windows上只能看不能构建webWeb工程目录所有Flutter版本都支持构建Web但又所差异pubspec.yamlDart包管理文件相当于Node.js里的package.jsontest测试目录pubspec.yaml是你后期打交道最多的文件之一加第三方库就在这里加dependencies。改完记得在终端执行flutter pub get把依赖装下来。4.3 首次构建时的Gradle下载优化新项目第一次跑最大的噩梦就是Gradle下载。默认情况它会去Google的Maven仓库拉依赖国内网络环境下慢到你怀疑程序卡死了。优化的做法是去修改android\build.gradle文件注意不是项目根的build.gradle是新版AGP结构里android/settings.gradle把仓库地址加上国内镜像源。网上都能搜到现成的阿里云镜像地址照着替换就好。还有一个更省事的方案先手动下载好Gradle发行包。打开android\gradle\wrapper\gradle-wrapper.properties文件里面有个distributionUrl看它指向的版本号去Gradle官网或国内镜像下载对应的zip包放到C:\Users\你的用户名\.gradle\wrapper\dists对应的目录下。这样Gradle就不会联网下载了构建速度提升巨大。这个过程我第一次弄的时候折腾了整整一个下午后来发现原理其实很简单——Gradle要用的东西都已经在本地了它就不会去远程拉。理解了这一点就不会被那个“下载到99%卡住”的进度条折磨了。4.4 运行首个Flutter项目在VSCode里打开项目按F5或者点右上角的“Run”按钮选择你创建的模拟器。首次构建需要几分钟时间因为要编译Gradle工程、下载依赖、打包APK整个过程终端会有日志输出耐心等就行。跑起来之后会看到经典的Counter应用——屏幕中间一个大大的加号按钮点击数字递增。这时候试试修改lib/main.dart里的文字保存VSCode会自动触发热重载Hot Reload模拟器上的界面会直接更新不需要重新启动应用。这是Flutter开发最爽的地方比传统的编译-运行循环快了不止一个量级。如果按F5没有反应检查三件事VSCode是否打开了项目文件夹而不是在别的目录打开文件、Flutter插件是否正常加载看左下角状态栏有没有Flutter图标、flutter devices能否列出模拟器设备。5. 高频报错与排查方案实录5.1 常见的flutter doctor报错及解决思路flutter doctor跑出一堆红叉是每个Windows新手都会经历的。我把实际遇到最多的几类列出来[X] Android toolchain - develop for Android devices下面跟着Unable to locate Android SDK。这个就是SDK路径没配置好执行flutter config --android-sdk D:\Android\Sdk手动指定或者检查环境变量里的ANDROID_HOME。[X] Android license status unknown说明许可协议没接受执行flutter doctor --android-licenses一路回车即可。[X] Visual Studio - develop for Windows这个报错标题看起来吓人其实它只是说你没装Visual Studio的C桌面开发组件如果你不打算开发Windows桌面应用可以完全忽略。但如果你想在Windows上跑桌面版Flutter就需要装Visual Studio并勾选“使用C的桌面开发”工作负载。[!] HTTP Host Availability说明网络检查不通大概率是镜像配置没生效。检查一下环境变量是否在配置后重新打开过终端。5.2 构建报错unable to find suitable visual studio toolc这个报错是热词里出现的我单独拿出来讲。它通常在flutter build windows或flutter run -d windows时出现完整报错是unable to find suitable Visual Studio toolchain。之前说了这报错只影响Windows桌面目标不影响Android。解决方法是安装Visual Studio 2022安装时务必勾选“使用C的桌面开发”工作负载里包含MSVC编译器和Windows SDK这两样是Flutter构建Windows应用必需的。注意不要只装VSCode就以为完事VSCode只是个编辑器编译器是另一回事。装完之后重启电脑重新执行flutter doctorVisual Studio那一项就会从红叉变成绿勾。整个过程比较耗时Visual Studio安装包好几个G但一步到位装完从此清净。5.3 Gradle相关报错apply script和版本不匹配问题热词里有一条you are applying flutters main gradle plugin imperatively using the apply s这是Flutter在较新版本中提示的Gradle配置方式变更。旧的配置方式是在android/app/build.gradle顶部用apply plugin: com.android.application新版推荐用plugins { id com.android.application }声明式写法。如果你的项目能正常构建这个只是警告不影响功能如果想消除它可以手动把apply改成plugins语法但要注意Gradle插件版本和AGP版本的配套关系改的时候要看官方迁移文档。还有一种Gradle相关的典型报错是Could not resolve all artifacts for configuration :app:debugRuntimeClasspath。这通常是依赖下载失败导致的处理方法是检查镜像仓库地址是否配置正确然后执行flutter clean清理缓存重新构建。5.4 常见问题速查表报错现象核心原因快速处理方案flutter: command not foundFlutter的bin没加入PATH检查环境变量重开CMDUnable to locate Android SDKSDK路径未识别flutter config --android-sdk指定路径Android license status unknown许可协议未接受执行flutter doctor --android-licensesunable to find suitable Visual Studio toolchain缺少VS C桌面开发组件安装VS2022并勾选C工作负载Gradle下载极慢或卡住默认仓库源访问慢配置国内Maven镜像或手动放Gradle包A problem occurred configuring root projectAGP版本与Gradle不匹配统一升级Flutter SDK或降低AGP版本Unable to find bundled Java versionAndroid Studio内嵌JDK版本不匹配在JAVA_HOME指定JDK17中文路径导致的构建失败SDK路径含中文或空格重新解压SDK到纯英文路径5.5 排查思路的核心学会看日志我在帮别人排查环境问题的时候最常说的就是“先把完整报错贴出来别只贴最后一行”。Flutter的报错信息其实相当友好它会直接告诉你哪个组件出了问题但很多人习惯一眼扫过然后去百度反而浪费了时间。终端里的日志是有级别的普通信息、警告、错误混在一起。当你看到一大片红字时按住往下翻找到第一个出现Error或Exception的位置那才是问题的源头。它前面的所有输出都是过程信息后面的全是连锁反应。定位到第一处报错顺着关键词搜索命中率会高很多。6. 进阶FVM多版本管理与其他效率建议6.1 FVM是什么为什么你需要它热词里出现了fvm安装多版本flutter这确实是一个绕不过去的进阶话题。FVMFlutter Version Management是一个命令行工具用来管理多个Flutter版本并存。你可能觉得“我装一个Flutter就够了”但真正开始维护多个项目之后就会发现不同项目的Flutter版本可能不一样——老项目锁在2.x新项目已经用3.x。如果全局只有一个Flutter版本切换项目时就得反复重装非常痛苦。FVM的思路是每个项目指定一个Flutter版本FVM在运行命令时自动切换到对应版本。安装FVM的方式很简单dart pub global activate fvm然后在项目根目录执行fvm install 3.13.9 fvm use 3.13.9之后在项目里用fvm flutter代替flutter就能确保使用的是该项目指定的版本。6.2 VSCode配合FVM的配置技巧装完FVM之后有个问题VSCode的Flutter插件默认调用的还是全局的flutter命令不认项目里的FVM版本。需要在项目根目录建一个.vscode/settings.json写入{ dart.flutterSdkPath: .fvm/flutter_sdk }这样VSCode就会读取项目本地的Flutter SDK路径插件调试时也走的FVM版本。加上dart.analysisExcludeFolders的配置把.ftv和.fvm目录排除避免无谓的文件监视和索引{ dart.flutterSdkPath: .fvm/flutter_sdk, dart.analysisExcludeFolders: [ .dart_tool, .fvm, build ] }改完之后重载VSCode窗口状态栏就会显示当前项目的Flutter版本。这个配置帮我省掉了大量因为版本错乱导致的奇怪报错。6.3 开发效率提升的小建议环境搭好之后可以顺手做一些优化提升日常开发的舒适度。在VSCode里配置好快捷键比如格式化ShiftAltF和热重载CtrlF5跑起来之后几乎不用碰鼠标。把flutter pub get绑定到保存时自动执行免得每次改完pubspec.yaml都要手动敲命令。给Android Studio配置代理镜像这样创建模拟器和装SDK时就不会卡进度条。定期执行flutter upgrade但升级之前先看看当前项目的Flutter版本能不能兼容别把一个正在生产的项目强行升级到新版本。6.4 一次FVM切换的实战记录我实际有一次经历维护一个老项目Flutter版本还停在2.5.3而我自己平时用的是3.x。以前的做法是每次切项目就改全局Flutter SDK指向改一次就得花十几分钟跑flutter doctor、清缓存、重新pub get非常折腾。后来装好FVM之后我在老项目里执行fvm install 2.5.3再fvm use 2.5.3然后在.vscode/settings.json里配好SDK路径打开项目就能直接跑整个过程不到五分钟。之前那个月切换来切换去的老问题一下就解决了。所以我觉得FVM不是“等以后再说”的事情如果你预期自己会长期跟多个Flutter项目打交道越早装越好迁移成本极低。回到最开始的问题为什么那么多人照着教程装还是会遇到一堆报错核心原因其实是环境差异——每个人的操作系统、网络环境、已有软件都不尽相同而教程只能讲大概率路径。只有把每个步骤背后的原理弄明白遇到报错才不至于手足无措。我个人在实际安装中感受最深的一点是遇到报错先冷静看完整日志再动手改配置。大部分“疑难杂症”其实都是镜像没配置好、路径里带中文、许可协议没接受这三类处理掉这三座大山环境就通了。最后分享一个小技巧装完所有东西之后手动建一个测试项目跑一遍确认没问题再开始正式写代码。很多环境问题会在你真正需要编译时才暴露提前跑通省的是你正式开工时的心力。
返回列表