Flutter 動態配置多環境 - Android Gradle 配置

接著要實作更進一步的版本切換機制。
為每個版本,設定各別的 app 名稱和套件名稱。

在 Gradle 新增組態


 

在 VSCode 對著 android 資料夾點擊右鍵,在選單中點擊 Open in Android Studio。
在 Android Studio 是在選單中點擊 Flutter -> Open Android module in Android Studio。

在 android/app/build.gradle 的 android 區塊內新增以下程式:

android {
//....

	flavorDimensions "app"

    productFlavors {
        prod {
            dimension "app"
            resValue "string", "app_name", "Build Flavor"
            applicationId = "com.dispy.buildflavor"
        }
        beta {
            dimension "app"
            resValue "string", "app_name", "Build Flavor Beta"
            applicationId = "com.dispy.buildflavor.beta"
        }
        dev {
            dimension "app"
            resValue "string", "app_name", "Build Flavor Dev"
            applicationId = "com.dispy.buildflavor.dev"
        }
    }
}

 

本例支援 prod、beta、dev 這 3 種組態,所以會寫入這些區塊。以名稱為區塊的開頭。

Dimension 的值與 flavorDimensions 呼應,支援名為「app」的維度。

resValue 是在建置時,在自動產生的資源檔案寫入資料,本例是在 strings.xml 寫入名為「app_name」的參數,值為各種不同的字串(參考上方範例)。

修改 IDE 的建置參數

Flutter 指令有一個參數「--flavor」直接對應 Gradle 的 productFlavors 區塊,所以裡面的區塊名稱要與 flavor 的值相符。

故之前提到的 IDE 配置,需要為此做變更,完成後如下:

在 VS Code 的 launch.json ,要在 args 陣列新增 --flavor 和 對應的名稱,與 --dart-define 雷同。

在 Android Studio 的編輯設定,是在 Build flavor 欄位新增組態的名稱。
這裡以 prod 為例,其他的亦同。 

以上動作等同於在終端機下達以下指令:

flutter run --dart-define=DART_DEFINE_APP_ENV=prod --flavor=prod

自訂 app 名稱


在 AndroidManifest,變更 android:label 的值為「@string/app_name」,套用從 Gradle 產生的資源檔。


 

建置後就會發現,app 的名字會跟著設定而變動。

也因為變更了 applicationId(套件名稱),使不同版本的產品有不同的套件名稱,不會取代彼此。

 

留言

這個網誌中的熱門文章

Azure 建立 Windows 虛擬機器