這是一份面向國內網絡環境的 Flutter 從零到可運行指引:覆蓋 SDK 安裝、平臺依賴準備、國內鏡像配置(PUB_HOSTED_URL
、FLUTTER_STORAGE_BASE_URL
)、Android 側 Gradle 倉庫加速,以及 Java/Gradle 版本兼容的關鍵坑位與排查思路。文末附常見報錯處理與一鍵回滾鏡像的方法,便于論壇讀者收藏查閱。
官方文檔現已給出 “在中國使用 Flutter” 的鏡像配置方法,核心就是設置兩枚環境變量:
PUB_HOSTED_URL
(Dart/Flutter 包索引鏡像) 與FLUTTER_STORAGE_BASE_URL
(Flutter 引擎與二進制制品鏡像)。本文遵循該做法,并補充國內常用的 Gradle/Maven 加速實踐。(Flutter 文檔, Flutter 文檔)
0. 你要準備什么
-
一個干凈的終端環境(Windows 推薦 PowerShell,macOS/Linux 用系統 shell)。
-
Android 目標:Android Studio + Android SDK +(可選)JDK17(見 §4 兼容性)。
-
iOS 目標(僅 macOS):Xcode + CocoaPods。
-
Flutter SDK 壓縮包,或按官方安裝頁分平臺引導進行(本文不改寫官方安裝路徑,僅補充國內網絡要點)。(Flutter 文檔)
1. 獲取并安裝 Flutter SDK
Windows
-
前往官方安裝頁選擇 Windows,下載 Flutter SDK 壓縮包(stable 渠道即可)。
-
解壓到你希望的目錄(例如
C:\dev\flutter
)。 -
添加 PATH(PowerShell 推薦做法):
[Environment]::SetEnvironmentVariable("Path",$env:Path + ";C:\dev\flutter\bin","User"
)
-
新開終端,執行
flutter doctor
進行首次體檢。(Flutter 文檔)
macOS
-
從官方安裝頁下載 macOS 版 SDK,或使用 VS Code 的“Download SDK”引導。
-
解壓到例如
~/dev/flutter
,并寫 PATH:
echo 'export PATH="$HOME/dev/flutter/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
flutter doctor
(VS Code 也支持“Locate/Download SDK”向導,初學者友好。) (Flutter 文檔)
Linux
-
下載 Linux 版 SDK 至
~/dev/flutter
。 -
添加 PATH 并體檢:
echo 'export PATH="$HOME/dev/flutter/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
flutter doctor
(安裝/體檢流程與官方一致。) (Flutter 文檔)
2. 國內鏡像配置(強烈建議)
在中國大陸網絡環境,配置鏡像能顯著提升
flutter pub get
、引擎二進制拉取等步驟的成功率與速度。官方建議為機器設置兩枚變量:PUB_HOSTED_URL
與FLUTTER_STORAGE_BASE_URL
。下面給出臨時與長期兩種方式。(Flutter 文檔, Flutter 文檔)
2.1 臨時生效(當前終端窗口有效)
-
macOS / Linux:
export PUB_HOSTED_URL="https://pub.flutter-io.cn"
export FLUTTER_STORAGE_BASE_URL="https://storage.flutter-io.cn"
-
Windows PowerShell:
$env:PUB_HOSTED_URL="https://pub.flutter-io.cn"
$env:FLUTTER_STORAGE_BASE_URL="https://storage.flutter-io.cn"
2.2 永久生效(寫入用戶環境)
-
macOS / Linux(以 zsh 為例):
cat <<'EOF' >> ~/.zshrc
export PUB_HOSTED_URL="https://pub.flutter-io.cn"
export FLUTTER_STORAGE_BASE_URL="https://storage.flutter-io.cn"
EOF
source ~/.zshrc
-
Windows(PowerShell 寫入“用戶環境變量”):
[Environment]::SetEnvironmentVariable("PUB_HOSTED_URL","https://pub.flutter-io.cn","User")
[Environment]::SetEnvironmentVariable("FLUTTER_STORAGE_BASE_URL","https://storage.flutter-io.cn","User")
?? 小坑:Windows 不要帶引號或多余空格,否則會出現 Invalid PUB_HOSTED_URL
報錯;修改后需重啟終端/IDE。(Stack Overflow, GitHub)
2.3 驗證鏡像是否生效
flutter doctor
flutter pub get -v
# 終端輸出中應能看到訪問 *.flutter-io.cn
(官方中國區文檔亦有同樣說明與示例。)(Flutter 文檔)
3. Android 側依賴與 Gradle/Maven 加速(可選但推薦)
Flutter 構建 Android 時會下載 Android Gradle Plugin、Google Maven 以及第三方庫。國內可通過 阿里云 Maven 做加速鏡像(注意:仍建議保留官方 google()/mavenCentral()
以便回退)。示例以 AGP 7/8 的現代結構為例:
3.1 在 android/settings.gradle
中添加鏡像倉庫
pluginManagement {repositories {maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } // Gradle 插件maven { url 'https://maven.aliyun.com/repository/google' } // Google Maven 鏡像maven { url 'https://maven.aliyun.com/repository/public' } // Central 聚合gradlePluginPortal()google()mavenCentral()}
}dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories {maven { url 'https://maven.aliyun.com/repository/google' }maven { url 'https://maven.aliyun.com/repository/public' }google()mavenCentral()}
}
(以上鏡像地址來自阿里云公開鏡像;你也可以在本機 ~/.gradle/init.gradle(.kts)
里做全局替換,便于多項目統一配置。)(developer.aliyun.com, GitHub, Stack Overflow)
提醒:不要再使用
jcenter()
(已廢棄),如見到請移除或替換為mavenCentral()
與鏡像倉庫。(Stack Overflow)
3.2 Gradle Wrapper 下載慢怎么辦?
出于安全與穩定考慮,不建議修改 gradle-wrapper.properties
的官方分發地址(services.gradle.org
)。若下載緩慢,可以在 CI 或局域網側做緩存代理/鏡像,或預熱到私有倉(Gradle 官方也建議用緩存/代理來降流量)。(blog.gradle.org)
4. Java / Gradle / Android Studio 版本兼容要點(高頻坑)
-
Android Studio Flamingo 起默認內置 JDK 17;部分舊 Gradle (< 7.3) 無法在 JDK 17 下運行,需將工程 Gradle 升級至 7.3–7.6.1 區間或更高版本。Flutter 官方遷移指引給出了明確路線與命令。(Flutter 文檔)
-
如需固定 Flutter 使用的 JDK(比如統一為 JDK 17 以匹配 AGP 8),可執行:
flutter config --jdk-dir=<你的JDK路徑> flutter doctor -v
官方文檔示例(macOS)路徑類似:
/opt/homebrew/Cellar/openjdk@17/.../Contents/Home
。(Flutter 文檔) -
查看系統已安裝的 Java(macOS):
/usr/libexec/java_home -V
在 Android Studio 里也可 取消“Use embedded JDK” 并指向你安裝的 JDK 目錄(Windows/All 平臺通用)。(Stack Overflow)
經驗法則:保持 JDK=17 + AGP=8.x + Gradle 8.x 往往最省心;若升級 Android Studio 后編譯異常,先跑
flutter doctor -v
看 “正在使用的 Java 版本/路徑”,再按官方遷移文檔調整 Gradle/AGP。(Flutter 文檔)
5. 創建并運行你的第一個 Flutter 應用(含鏡像校驗)
flutter create hello_flutter
cd hello_flutter# 再次確認鏡像生效(可選)
flutter pub get -v# Android
flutter run -d emulator-5554# iOS(僅 macOS,先在 Xcode 中同意許可并安裝額外組件)
flutter run -d ios
如果你用 VS Code,新建項目時可“Locate/Download SDK”;安裝向導與 Flutter SDK 能自動聯動,不影響鏡像配置。(Flutter 文檔)
6. 進階:多版本并存(FVM)
團隊協作中,不同項目可能依賴不同的 Flutter 版本。推薦用 FVM(Flutter Version Management) 做項目級 SDK 管理:
# macOS(示例)
brew install fvm
cd your_project
fvm use 3.22.0
fvm flutter doctor
FVM 能在每個項目鎖定獨立的 Flutter 版本,避免全局升級帶來的連鎖問題。(FVM)
7. 常見問題(FAQ)
Q1:flutter pub get
超時 / 依賴下載慢?
A:確認已設置并生效 PUB_HOSTED_URL
與 FLUTTER_STORAGE_BASE_URL
;Windows 下特別注意不要把變量值寫成 " https://xxx"
(前后多空格或引號)。 (Stack Overflow)
Q2:升級 Android Studio 后編譯報 Java/Gradle 兼容錯誤?
A:flutter doctor -v
看清“正在使用的 Java 版本路徑”;按官方遷移指南提升 Gradle 到兼容版本,或用 flutter config --jdk-dir=<JDK17路徑>
固定到 JDK 17。(Flutter 文檔)
Q3:Gradle 依賴倉庫解析緩慢?
A:在 settings.gradle
的 pluginManagement
/ dependencyResolutionManagement
中添加阿里云鏡像(并保留 google() / mavenCentral()
兜底);或用 ~/.gradle/init.gradle(.kts)
全局替換。(developer.aliyun.com, Stack Overflow)
Q4:還需要改 jcenter()
嗎?
A:jcenter()
已廢棄,建議移除并用 mavenCentral()
/ 國內鏡像替代。(Stack Overflow)
8. 一鍵回滾鏡像 / 清理緩存
-
臨時取消(當前終端)
-
macOS / Linux:
unset PUB_HOSTED_URL unset FLUTTER_STORAGE_BASE_URL
-
Windows(PowerShell):
Remove-Item Env:PUB_HOSTED_URL Remove-Item Env:FLUTTER_STORAGE_BASE_URL
-
-
永久移除(Windows 用戶環境)
[Environment]::SetEnvironmentVariable("PUB_HOSTED_URL",$null,"User") [Environment]::SetEnvironmentVariable("FLUTTER_STORAGE_BASE_URL",$null,"User")
-
清理緩存
flutter clean # 可選:清理 pub 緩存 rm -rf ~/.pub-cache
9. 速查清單(建議收藏)
-
SDK 安裝與平臺準備:按官方安裝頁分平臺指引,先跑
flutter doctor
。(Flutter 文檔) -
中國大陸鏡像:
PUB_HOSTED_URL=https://pub.flutter-io.cn
FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
(臨時/永久均可)。 (Flutter 文檔, Flutter 文檔) -
Android 依賴加速:在
settings.gradle
配置阿里云鏡像 + 保留google()/mavenCentral()
。(developer.aliyun.com) -
Java/Gradle 兼容:JDK17 + AGP8 + Gradle8 通常更穩;必要時
flutter config --jdk-dir=<JDK17>
。(Flutter 文檔) -
遇到
Invalid PUB_HOSTED_URL
:去掉引號/空格,重啟終端或 IDE。(Stack Overflow)
參考與延伸
-
官方:Using Flutter in China(含各平臺設置鏡像示例)。(Flutter 文檔)
-
中文站:在中國網絡環境下使用 Flutter(附持久化
export
示例)。(Flutter 文檔) -
官方:Android Java/Gradle 遷移指南(JDK 17 與 Gradle 7.x/8.x 兼容說明)。(Flutter 文檔)
-
Gradle/Maven 國內鏡像(阿里云示例與倉庫列表)。(developer.aliyun.com, Eitan Liu)
-
FVM:多版本管理工具(項目級鎖定 Flutter 版本)。(FVM)