這行代碼的作用是將 Flutter 的 Gradle 構建腳本集成到 Android 項目中,具體細節如下:
作用解析:
-
引入 Flutter 構建邏輯
flutter.gradle
是 Flutter SDK 的核心構建腳本,它負責:- 編譯 Dart 代碼為原生二進制文件(AOT/JIT)
- 處理 Flutter 資源(圖片、字體等)
- 集成 Flutter 插件(Plugin)的依賴
- 配置構建類型(debug/release/profile)
- 添加
flutter build
相關任務(如assembleDebug
)
-
動態路徑依賴
$flutterRoot
是一個 路徑變量,指向 Flutter SDK 的安裝目錄。
例如,若 Flutter 安裝在/Users/name/flutter
,則實際路徑為:
/Users/name/flutter/packages/flutter_tools/gradle/flutter.gradle
$flutterRoot
無法讀取的原因:
該變量 不會自動存在于 Gradle 環境 中,需要手動定義。常見原因和解決方案:
1. 未在 gradle.properties
中定義
解決方法:在項目的 android/gradle.properties
文件中添加:
flutterRoot=/path/to/your/flutter/sdk # 替換為你的實際路徑
例如:
flutterRoot=C:\\flutter
(Windows)或/Users/name/flutter
(macOS/Linux)
2. 環境變量未傳遞
雖然 Flutter 命令行工具會自動設置環境變量 FLUTTER_ROOT
,但 Gradle 不會直接讀取系統環境變量。
解決方法:在 android/build.gradle
開頭添加:
ext.flutterRoot = System.getenv("FLUTTER_ROOT") ?: "<手動路徑>"
3. 路徑格式錯誤(Windows 常見)
Windows 路徑中的反斜杠 \
和特殊字符(如空格)需轉義:
flutterRoot=C:\\flutter_sdk # 雙反斜杠
# 或
flutterRoot=C:/flutter_sdk # 改用正斜杠
4. Flutter 項目未正確初始化
如果是新建的 Flutter 項目,確保運行過:
flutter create . # 在項目根目錄執行,生成 Android/iOS 配置文件
標準 Flutter 項目中的配置:
在正常的 Flutter 項目中,flutterRoot
是通過 Flutter 工具鏈自動注入 的,無需手動定義。檢查以下文件:
android/settings.gradle
中通常包含:
這里的路徑由include ':flutter' project(':flutter').projectDir = new File('<自動生成的路徑>/flutter')
flutter create
自動配置。
總結:
問題 | 解決方案 |
---|---|
變量未定義 | 在 gradle.properties 中聲明 flutterRoot |
環境變量未傳遞 | 在 build.gradle 中用 System.getenv() 讀取 |
路徑格式錯誤 | 使用雙反斜杠 \\ 或正斜杠 / 替換路徑 |
項目未初始化 | 運行 flutter create . 生成配置文件 |
手動定義示例(臨時方案):
apply from: "${System.getenv('FLUTTER_ROOT')}/packages/flutter_tools/gradle/flutter.gradle"