設定 Android 版 Flutter Flavors
如何針對不同的釋出型別或開發環境建立特定的構建 Flavor。
本指南向你展示如何為 Android 應用建立 Flutter Flavor。
概述
#當與 Android 一起使用時,Flutter Flavor 是各種平臺特定功能的一個統一術語。例如,Flavor 可以決定與應用特定版本關聯的圖示、應用名稱、API 金鑰、功能標誌 (feature flag) 和日誌級別。
如果你想為 Android 應用建立 Flutter Flavor,可以在 Flutter 中完成。在 Android 中,Flutter Flavor 被稱為 product flavor (產品 Flavor)。
下圖展示了當 Android 應用具有兩個產品 Flavor(staging、production)和兩個構建型別(debug、release)時所建立的 Android 構建變體 (build variants) 的示例:
| 產品 Flavor | 構建型別 | 生成的構建變體 |
|---|---|---|
| staging | debug | stagingDebug stagingRelease |
| production | release | productionDebug productionRelease |
配置你的產品 Flavor
#完成以下步驟,為一個名為 flavors_example 的新 Flutter 專案新增兩個名為 staging 和 production 的 Android 產品 Flavor,然後測試你的專案以確保 Flavor 按預期工作。
-
建立一個名為
flavors_example的新 Flutter 專案,並將 Kotlin 作為首選 Android 語言。預設情況下,該專案包含debug和releaseAndroid 構建型別。控制檯flutter create --android-language kotlin flavors_example -
將名為
staging和production的產品 Flavor 新增到flavors_example專案中。在
flavors_example專案中,導航到android/app/目錄並開啟build.gradle.kts。在
android {}程式碼塊內新增flavorsDimension屬性和productFlavors屬性。確保android {}程式碼塊中也包含預設的debug和release構建型別。build.gradle.ktskotlinandroid { ... buildTypes { getByName("debug") {...} getByName("release") {...} } ... flavorDimensions += "default" productFlavors { create("staging") { dimension = "default" applicationIdSuffix = ".staging" } create("production") { dimension = "default" applicationIdSuffix = ".production" } } }
-
為了確保你已正確設定所有內容,請在 Android 產品 Flavor 上執行你的應用。由於配置設定尚未更改,你不會看到任何差異,但你需要確保應用能夠執行。
啟動 Android 模擬器或連線啟用了開發者選項的物理裝置。
在控制檯中,導航到
flavors_example目錄並輸入以下命令來測試stagingFlavor:控制檯flutter run --flavor staging對
productionFlavor 重複上一步。
-
如果一切執行正常,你就可以自定義配置了。有關更多資訊,請參閱 自定義配置。
啟動 Flavor
#為 Android 應用建立產品 Flavor 後,你可以透過 Flutter 啟動特定的產品 Flavor。
你可以按照以下步驟使用 Flutter CLI 啟動產品 Flavor:
-
啟動 Android 模擬器或連線啟用了開發者選項的物理裝置。
-
在控制檯中,導航到
flavors_example目錄並輸入以下命令:
flutter (run | build <subcommand>) --flavor <flavor_name>
-
(run | build <subcommand>):將其替換為以下其中之一:run:在除錯模式下執行應用。build:構建 APK 或 App Bundle。<subcommand>:apk或appbundle。
-
<flavor_name>:將其替換為你的 Android 產品 Flavor 名稱(例如:staging、production)。
示例
flutter build apk --flavor staging
在 Flutter 程式碼中使用 Flavor
#配置完產品 Flavor 後,你可以根據活動的 Flavor 更改應用的行為,例如指向不同的 API 端點或更改主題。
Flutter 框架提供了 appFlavor 常量,它將當前 Flavor 的名稱作為 String 檢索。此值與 flutter run 或 flutter build 過程中傳遞給 --flavor 標誌的 Flavor 名稱匹配。
訪問當前 Flavor
#-
匯入 services 庫:要訪問
appFlavor常量,請將以下匯入新增到你的 Dart 檔案中:dartimport 'package:flutter/services.dart'; -
檢查 Flavor 值:在你的應用邏輯(通常在
main()中)中使用appFlavor常量來處理特定於 Flavor 的配置:dartvoid main() { // appFlavor will match the flavor name from build.gradle.kts if (appFlavor == 'production') { // Logic for production environment Config.apiUrl = 'https://api.flavors_example.com'; } else if (appFlavor == 'staging') { // Logic for staging environment Config.apiUrl = 'https://staging.api.flavors_example.com'; } runApp(const MyApp()); }
自定義配置
#新增產品 Flavor 後,你可以為你的 Android 應用自定義它們。
建立不同的應用顯示名稱
#如果你有多個產品 Flavor,不同的應用名稱可以讓你快速識別部署的應用正在使用哪個 Flavor。
以下步驟展示瞭如何為一個名為 flavors_example 的專案中的兩個產品 Flavor(staging 和 production)新增不同的應用顯示名稱。
-
在 IDE 中更新
build.gradle.kts在
flavors_example專案中,導航到android/app/目錄並開啟build.gradle.kts。在
flavorsDimension程式碼塊中,為staging和productionFlavor 新增一個名為app_name的resValue()屬性:build.gradle.ktskotlinandroid { ... flavorDimensions += "default" productFlavors { create("staging") { dimension = "default" resValue( type = "string", name = "app_name", value = "Flavors staging") applicationIdSuffix = ".staging" } create("production") { dimension = "default" resValue( type = "string", name = "app_name", value = "Flavors production") applicationIdSuffix = ".production" } }
-
在 IDE 中更新
AndroidManifest.xml在
flavors_example專案中,導航到android/app/src/main並開啟AndroidManifest.xml。將
android:label的值替換為@string/app_name。AndroidManifest.xmlxml<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <application android:label="@string/app_name" ... /> />
-
為每個產品 Flavor(
staging、production)啟動應用,並檢查確保每個應用顯示名稱都已更改。要啟動產品 Flavor,請參閱 啟動 Flavor 中的步驟。
在 Android 應用模擬器中,轉到應用列表。你應該能看到
Flavors p...和Flavors s...的應用。要檢視
Flavors p...或Flavors s...的更多資訊,請長按其中一個圖示並選擇App info (應用資訊)。
建立不同的應用圖示
#如果你有多個產品 Flavor,為每個配置設定不同的圖示可以幫助你快速識別部署的應用正在使用哪個 Flavor。
![]()
以下步驟展示瞭如何為一個名為 flavors_example 的專案中的兩個產品 Flavor(staging 和 production)新增不同的圖示。
-
準備你的圖示
在你選擇的設計工具中設計你的
staging圖示和production圖示。按以下尺寸生成
staging圖示和production圖示的 PNG 版本:- mipmap-mdpi (48x48 畫素)
- mipmap-hdpi (72x72 畫素)
- mipmap-xhdpi (96x96 畫素)
- mipmap-xxhdpi (144x144 畫素)
- mipmap-xxxhdpi (192x192 畫素)
-
建立特定於 Flavor 的資源目錄
導航到
android/app/src目錄。建立一個名為
staging/res的目錄。導航到
staging/res目錄。建立以下
mipmap目錄並將staging圖示的版本移動到其中:mipmap-mdpi/48x48_staging.pngmipmap-hdpi/72x72_staging.pngmipmap-xhdpi/96x96_staging.pngmipmap-xxhdpi/144x144_staging.pngmipmap-xxxhdpi/192x192_staging.png
對
productionFlavor 的目錄和圖示重複上述步驟。將所有圖示重新命名為
ic_launcher.png。
-
在 IDE 中仔細檢查
AndroidManifest.xml中的配置在
flavors_example專案中,導航到android/app/src/main並開啟AndroidManifest.xml。確保
android:icon的值為@mipmap/ic_launcher。
-
為每個產品 Flavor(
staging、production)啟動應用,並檢查確保每個應用圖示都已更改。要啟動產品 Flavor,請參閱 啟動 Flavor 中的步驟。
打包資源
#如果你的應用中有僅在特定 Flavor 中使用的資源,你可以將它們配置為僅在啟動該 Flavor 時打包進應用。這可以防止你的應用包體積因未使用的資源而增大。要為每個 Flavor 打包資源,請將 flavors 子欄位新增到專案 pubspec 中的 assets 欄位。要了解更多資訊,請參閱 Flutter pubspec 選項 中的 assets 欄位。
設定預設 Flavor
#你可以在不指定 Flavor 的情況下啟動應用時,讓應用使用特定的 Flavor。為此,你需要將 default-flavor 欄位新增到專案的 pubspec 中。要了解更多資訊,請參閱 Flutter pubspec 選項 中的 default-flavor 欄位。
新增獨特的構建設定
#如果你有其他想要為特定的 Android 產品 Flavor 配置的構建設定,請參閱 Android 的 配置構建變體 (Configure build variants)。
雖然可以在產品 Flavor 中設定 abiFilters,但不建議這樣做。建議在構建型別 (build types) 中設定 abiFilters。在產品 Flavor 中設定 abiFilters 時,執行 flutter build 或 flutter run 時必須使用 -Pdisable-abi-filtering 標誌。
更多資訊
#有關建立和使用 Flavor 的更多資訊,請檢視以下資源: