跳至主要內容

建立 Flutter 應用程式的 Flavors

什麼是 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

#
  1. 在 Xcode 中開啟您的專案。

  2. 從選單中選擇Product > Scheme > New Scheme,以新增一個新的Scheme

    • Scheme 描述了 Xcode 如何執行不同的動作。在本指南中,範例flavorscheme命名為freefree scheme 中的建置組態具有 -free 後綴。
  3. 複製建置組態,以區分已存在的預設組態和 free scheme 的新組態。

    • Configurations下拉式清單末端的Info標籤下,按一下加號按鈕並複製每個組態名稱(Debug、Release 和 Profile)。為每個環境複製現有的組態一次。

    Step 3 Xcode image

  4. 為了符合免費 flavor,請在每個新組態名稱的末尾新增 -free

  5. 變更 free scheme 以符合已建立的建置組態。

    • Runner 專案中,按一下 Manage Schemes…,就會開啟一個快顯視窗。
    • 按兩下 free scheme。在下一步(如螢幕擷取畫面所示)中,您將修改每個 scheme 以符合其免費建置組態

    Step 5 Xcode image

在 iOS 和 macOS 中使用 Flavors

#

現在您已設定好免費 flavor,例如,您可以為每個 flavor 新增不同的產品 bundle 識別碼。bundle 識別碼會唯一識別您的應用程式。在此範例中,我們將 Debug-free 值設定為等於 com.flavor-test.free

  1. 變更應用程式 bundle 識別碼以區分不同的 schemes。在 Product Bundle Identifier 中,在每個 -free scheme 值中附加 .free

    Step 1 using flavors image.

  2. Build Settings 中,設定 Product Name 值以符合每個 flavor。例如,新增 Debug Free。

    Step 2 using flavors image.

  3. 將顯示名稱新增至 Info.plist。將 Bundle Display Name 值更新為 $(PRODUCT_NAME)

    Step 3 using flavors image.

現在您已在 Xcode 中建立一個 free scheme 並設定該 scheme 的建置組態,來設定您的 flavor。

如需更多資訊,請跳至本文件末尾的啟動應用程式 Flavors章節。

外掛程式設定

#

如果您的應用程式使用 Flutter 外掛程式,您需要更新 ios/Podfile(如果為 iOS 開發)和 macos/Podfile(如果為 macOS 開發)。

  1. ios/Podfilemacos/Podfile 中,變更 DebugProfileRelease 的預設值,以符合 free scheme 的 Xcode 建置組態。
ruby
project 'Runner', {
  'Debug-free' => :debug,
  'Profile-free' => :release,
  'Release-free' => :release,
}

在 Android 中使用 Flavors

#

在 Android 中設定 Flavors 可以在專案的 build.gradle 檔案中完成。

  1. 在您的 Flutter 專案內,導覽至 android/app/build.gradle

  2. 建立一個 flavorDimension 來將您新增的產品 Flavors 分組。Gradle 不會合併共用相同 dimension 的產品 Flavors。

  3. 新增一個具有所需 Flavors 的 productFlavors 物件,以及 dimensionresValueapplicationIdapplicationIdSuffix 的值。

    • 每個建置的應用程式名稱位於 resValue 中。
    • 如果您指定 applicationIdSuffix 而不是 applicationId,它會附加到「基礎」應用程式 ID。
build.gradle.kts
kotlin
android {
    // ...
    flavorDimensions += "default"

    productFlavors {
        create("free") {
            dimension = "default"
            resValue(type = "string", name = "app_name", value = "free flavor example")
            applicationIdSuffix = ".free"
        }
    }
}
build.gradle
groovy
android {
    // ...
    flavorDimensions "default"

    productFlavors {
        free {
            dimension "default"
            resValue "string", "app_name", "free flavor example"
            applicationIdSuffix ".free"
        }
    }
}

設定啟動設定

#

接下來,新增一個 launch.json 檔案;這可讓您執行命令 flutter run --flavor [環境名稱]

在 VSCode 中,如下所示設定啟動設定

  1. 在專案的根目錄中,新增一個名為 .vscode 的資料夾。
  2. .vscode 資料夾內,建立一個名為 launch.json 的檔案。
  3. launch.json 檔案中,為每個 flavor 新增一個組態物件。每個組態都有一個 namerequesttypeprogramargs 鍵。
json
{
  "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

#
  1. 一旦設定好 Flavors,請修改 lib/main.dart 中的 Dart 程式碼以使用 Flavors。
  2. 在命令列或 IDE 中使用 flutter run --flavor free 測試設定。

如需 iOSmacOSAndroid 的建置 Flavors 範例,請查看 Flutter 儲存庫中的整合測試範例。

在執行時擷取應用程式的 Flavor

#

在您的 Dart 程式碼中,您可以使用 appFlavor API 來判斷您的應用程式使用哪個 flavor 進行建置。

根據 Flavor 有條件地綁定資產

#

如果您不熟悉如何將資產新增至您的應用程式,請參閱新增資產和圖片

如果您有僅在應用程式的特定 flavor 中使用的資產,您可以將它們設定為僅在為該 flavor 建置時才綁定到您的應用程式中。這可防止您的應用程式 bundle 大小因未使用資產而膨脹。

以下是一個範例

yaml
flutter:
  assets:
    - assets/common/
    - path: assets/free/
      flavors:
        - free
    - path: assets/premium/
      flavors:
        - premium

在此範例中,當在 flutter runflutter build 期間建置應用程式時,assets/common/ 目錄中的檔案將始終被綁定。--flavor 選項設定為 free 時,才會綁定 assets/free/ 目錄中的檔案。同樣地,--flavor 設定為 premium 時,才會綁定 assets/premium 目錄中的檔案。

更多資訊

#

如需有關建立和使用 Flavors 的更多資訊,請查看以下資源

套件

#

如需支援建立 Flavors 的套件,請查看以下內容