建立 Flutter 應用程式的 Flavors
- 什麼是 Flavors?
- 環境設定
- 在 iOS 和 macOS 中建立 Flavors
- 在 iOS 和 macOS 中使用 Flavors
- 在 Android 中使用 Flavors
- 設定啟動設定
- 啟動您的應用程式 Flavors
- 在執行時擷取應用程式的 Flavor
- 根據 Flavor 有條件地綁定資產
- 更多資訊
什麼是 Flavors?
#您是否曾經想過如何在 Flutter 應用程式中設定不同的環境?Flavors(在 iOS 和 macOS 中稱為建置組態),可讓您(開發人員)使用相同的程式碼庫為您的應用程式建立不同的環境。例如,您可能有一個 Flavor 用於完整的正式版應用程式,另一個作為受限制的「免費」應用程式,另一個用於測試實驗性功能等等。
假設您想要製作 Flutter 應用程式的免費版和付費版。您可以使用 Flavors 來設定這兩個應用程式版本,而無需編寫兩個單獨的應用程式。例如,免費版的應用程式具有基本功能和廣告。相反地,付費版具有基本應用程式功能、額外功能、付費使用者不同的樣式,以及沒有廣告。
您也可以將 Flavors 用於功能開發。如果您已建立新功能並想嘗試一下,您可以設定一個 Flavor 來測試它。在您準備好部署新功能之前,您的生產程式碼不受影響。
Flavors 讓您可以定義編譯時組態,並設定在執行時讀取的參數,以自訂應用程式的行為。
本文件將引導您設定 iOS、macOS 和 Android 的 Flutter Flavors。
環境設定
#先決條件
- 已安裝 Xcode
- 現有的 Flutter 專案
若要在 iOS 和 macOS 中設定 Flavors,您需要在 Xcode 中定義建置組態。
在 iOS 和 macOS 中建立 Flavors
#在 Xcode 中開啟您的專案。
從選單中選擇Product > Scheme > New Scheme,以新增一個新的
Scheme
。- Scheme 描述了 Xcode 如何執行不同的動作。在本指南中,範例flavor和scheme命名為
free
。free
scheme 中的建置組態具有-free
後綴。
- Scheme 描述了 Xcode 如何執行不同的動作。在本指南中,範例flavor和scheme命名為
複製建置組態,以區分已存在的預設組態和
free
scheme 的新組態。- 在Configurations下拉式清單末端的Info標籤下,按一下加號按鈕並複製每個組態名稱(Debug、Release 和 Profile)。為每個環境複製現有的組態一次。
為了符合免費 flavor,請在每個新組態名稱的末尾新增
-free
。變更
free
scheme 以符合已建立的建置組態。- 在 Runner 專案中,按一下 Manage Schemes…,就會開啟一個快顯視窗。
- 按兩下 free scheme。在下一步(如螢幕擷取畫面所示)中,您將修改每個 scheme 以符合其免費建置組態
在 iOS 和 macOS 中使用 Flavors
#現在您已設定好免費 flavor,例如,您可以為每個 flavor 新增不同的產品 bundle 識別碼。bundle 識別碼會唯一識別您的應用程式。在此範例中,我們將 Debug-free 值設定為等於 com.flavor-test.free
。
變更應用程式 bundle 識別碼以區分不同的 schemes。在 Product Bundle Identifier 中,在每個 -free scheme 值中附加
.free
。在 Build Settings 中,設定 Product Name 值以符合每個 flavor。例如,新增 Debug Free。
將顯示名稱新增至 Info.plist。將 Bundle Display Name 值更新為
$(PRODUCT_NAME)
。
現在您已在 Xcode 中建立一個 free
scheme 並設定該 scheme 的建置組態,來設定您的 flavor。
如需更多資訊,請跳至本文件末尾的啟動應用程式 Flavors章節。
外掛程式設定
#如果您的應用程式使用 Flutter 外掛程式,您需要更新 ios/Podfile
(如果為 iOS 開發)和 macos/Podfile
(如果為 macOS 開發)。
- 在
ios/Podfile
和macos/Podfile
中,變更 Debug、Profile 和 Release 的預設值,以符合free
scheme 的 Xcode 建置組態。
project 'Runner', {
'Debug-free' => :debug,
'Profile-free' => :release,
'Release-free' => :release,
}
在 Android 中使用 Flavors
#在 Android 中設定 Flavors 可以在專案的 build.gradle 檔案中完成。
在您的 Flutter 專案內,導覽至 android/app/build.gradle。
建立一個
flavorDimension
來將您新增的產品 Flavors 分組。Gradle 不會合併共用相同dimension
的產品 Flavors。新增一個具有所需 Flavors 的
productFlavors
物件,以及 dimension、resValue 和 applicationId 或 applicationIdSuffix 的值。- 每個建置的應用程式名稱位於 resValue 中。
- 如果您指定 applicationIdSuffix 而不是 applicationId,它會附加到「基礎」應用程式 ID。
android {
// ...
flavorDimensions += "default"
productFlavors {
create("free") {
dimension = "default"
resValue(type = "string", name = "app_name", value = "free flavor example")
applicationIdSuffix = ".free"
}
}
}
android {
// ...
flavorDimensions "default"
productFlavors {
free {
dimension "default"
resValue "string", "app_name", "free flavor example"
applicationIdSuffix ".free"
}
}
}
設定啟動設定
#接下來,新增一個 launch.json 檔案;這可讓您執行命令 flutter run --flavor [環境名稱]
。
在 VSCode 中,如下所示設定啟動設定
- 在專案的根目錄中,新增一個名為 .vscode 的資料夾。
- 在 .vscode 資料夾內,建立一個名為 launch.json 的檔案。
- 在 launch.json 檔案中,為每個 flavor 新增一個組態物件。每個組態都有一個 name、request、type、program 和 args 鍵。
{
"version": "0.2.0",
"configurations": [
{
"name": "free",
"request": "launch",
"type": "dart",
"program": "lib/main_development.dart",
"args": ["--flavor", "free", "--target", "lib/main_free.dart" ]
}
],
"compounds": []
}
現在,您可以執行終端機命令 flutter run --flavor free
,或在您的 IDE 中設定執行組態。
啟動您的應用程式 Flavors
#- 一旦設定好 Flavors,請修改 lib/main.dart 中的 Dart 程式碼以使用 Flavors。
- 在命令列或 IDE 中使用
flutter run --flavor free
測試設定。
如需 iOS、macOS 和 Android 的建置 Flavors 範例,請查看 Flutter 儲存庫中的整合測試範例。
在執行時擷取應用程式的 Flavor
#在您的 Dart 程式碼中,您可以使用 appFlavor
API 來判斷您的應用程式使用哪個 flavor 進行建置。
根據 Flavor 有條件地綁定資產
#如果您不熟悉如何將資產新增至您的應用程式,請參閱新增資產和圖片。
如果您有僅在應用程式的特定 flavor 中使用的資產,您可以將它們設定為僅在為該 flavor 建置時才綁定到您的應用程式中。這可防止您的應用程式 bundle 大小因未使用資產而膨脹。
以下是一個範例
flutter:
assets:
- assets/common/
- path: assets/free/
flavors:
- free
- path: assets/premium/
flavors:
- premium
在此範例中,當在 flutter run
或 flutter build
期間建置應用程式時,assets/common/
目錄中的檔案將始終被綁定。僅當 --flavor
選項設定為 free
時,才會綁定 assets/free/
目錄中的檔案。同樣地,僅當 --flavor
設定為 premium
時,才會綁定 assets/premium
目錄中的檔案。
更多資訊
#如需有關建立和使用 Flavors 的更多資訊,請查看以下資源
- 在 Flutter 中使用每個 Flavor 的不同 Firebase 專案建立建置 Flavors (Android 和 iOS) Flutter Ready to Go
- 為 Flutter 應用程式設定 Flavors (Android 和 iOS)
- 如何使用 FlutterFire CLI 設定具有多個 Flavors 的 Flutter 和 Firebase
套件
#如需支援建立 Flavors 的套件,請查看以下內容
除非另有說明,否則本網站上的文件反映了 Flutter 的最新穩定版本。頁面最後更新於 2024-10-24。 檢視原始碼 或 回報問題。