【Flutter】ビルドバリアントとフレーバーとdart-define【Flavor】

2022/11/01に公開

アプリのビルド時にバージョンや実装を分けたいケースはよくあります。
Flutterでは、Andoridネイティブアプリと同様に、Flavorの指定が可能です。
さらに、dart-defineというAPIを使用することで、Dartからも簡単に参照できます。

ビルドバリアント

https://developer.android.com/studio/build/build-variants#product-flavors

公式ドキュメントの説明は以下です。

各ビルド バリアントは、ビルド可能なさまざまなバージョンのアプリを表しています。たとえば、コンテンツが制限された無料版のアプリと、多くのコンテンツが含まれた有料版のアプリを作成することができます。API レベルまたは他のデバイスのバリエーションに基づいて、異なるデバイスをターゲットとするアプリの異なるバージョンをビルドすることもできます。

同じアプリで、本番/開発 など分けることができます。

Flavor / フレーバー

ビルドバリアントは、以下の2つに細分化できます。

  1. ビルドタイプ(リリース/開発...など)
  2. フレーバー(有料版/無料版...など)

ビルドタイプとフレーバーの組み合わせで、どういったビルドにするか決定することが可能です。

Flavorの設定

iOS

Flutter/〇〇.xcconfigファイルを作成し、適用したい設定値を変更します。作成するフレーバーが複数あればその分ファイルを複数作成します。

Dev.xcconfig
FLUTTER_FLAVOR=Dev
PRODUCT_BUNDLE_IDENTIFIER=com.app-name-dev
DISPLAY_NAME=APPNAME Dev
FLUTTER_TARGET=lib/main.dart
CUSTOM_URL_SCHEME=abcabc

Android

app/build.gladle ファイル内に設定を行います。

app/build.gladle
android {
    ...
    defaultConfig {...}
    buildTypes {
        debug{...}
        release{...}
    }
    // Specifies one flavor dimension.
    flavorDimensions "version"
    productFlavors {
        demo {
            // Assigns this product flavor to the "version" flavor dimension.
            // If you are using only one dimension, this property is optional,
            // and the plugin automatically assigns all the module's flavors to
            // that dimension.
            dimension "version"
            applicationIdSuffix ".demo"
            versionNameSuffix "-demo"
        }
        full {
            dimension "version"
            applicationIdSuffix ".full"
            versionNameSuffix "-full"
        }
    }
}

dart-define

同じく、ビルド時にパラメータを渡す方法として、dart-defineがあります。

以下のように指定できます。

--dart-define=ENVIRONMENT_NAME=value

以下のように使います。

$ flutter run --debug --dart-define=ENVIRONMENT_NAME=value

Dartからビルド時変数を参照するには、以下のように書きます。

const value = String.fromEnvironment('ENVIRONMENT_NAME');
print(value) // dev

まとめ

  • Flutterでは、Andoridネイティブアプリと同様に、Flavorの指定が可能。
  • dart-defineというAPIを使用することで、Dartからビルド時のパラメータを参照できる。

Discussion