使用 Flavor 切分 Flutter App 發布環境

BoShi Lee 
Flutter Taipei
4 min readMay 14, 2020

--

本篇教學是透過不同的 flavor 來發佈到各自不同的商店,假設今天有 debug (以下皆用 dev) 以及 production (以下皆用 prod) ,來做環境的控制,那在發佈時,會希望個別的版本有不一樣的 key 去做簽署,而不互相衝突,以下的教學都是以尚未發布到 play store 的 app 為前提

使用 Flavor 可以參考此篇教學,不再贅述:

以下教學參照官方教學,再依照 flavor 另作些微修改,使用前應先熟悉個步驟的意義為何

產生簽署用 keystore

Android 上架需要先產生 keystore 來簽署,會由開發者自行保管,首先產生 dev 環境用 keystore

在 terminal 輸入以下指令

keytool -genkey -v -keystore ~/dev_key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias dev

~/dev-key.jks 為存放 dev key 的位置,這裡可以直接存放到 <appdir>/android/app/dev-key.jks

keystore 放置目錄參考
  • -alias dev 為 key 的別名,稍後會使用到,可以用自己習慣的名字
  • 產 key 的過程會產生 6 位數以上的密碼,請保留住後續會使用到
  • 另外 prod 環境是將 dev-key.jks 改為 prod-key.jks, -alias dev 改為 -alias prod

產生 keystore 參考用檔案

建立一個 key.properties 放在<app dir>/android/key.properties 並在此檔案輸入以下內容

storePassword=password
keyPassword=password
devKeyAlias=dev
prodKeyAlias=prod

storePassword, keyPassword 為剛剛產生 keystore 輸入的密碼

key.properties 放置目錄參考

調整 gradle 的 signingConfigs

打開 app 級別的 bulild.gradle 目錄為 android/app/build.gradle

  1. 在 android 區塊最前面輸入新程式碼

2. 在 buildTypes 前修改 signingConfigs 區塊

3. 在 buildTypes 區塊裡修改為

4. 在 productFlavor 裡新增以下

輸出 AppBundle

這是最後一步也是最重要的一步了,在 termainl 輸入

flutter build appbundle --release --flavor=prod --target lib/main.dart

--flavor=prod 為你想輸出的環境

--target lib/main.dart 為主檔案,像我本身的專案有分 main.dart(prod) 以及 main_dev.dart (dev)

--

--