⚡
【Flutter】ビルドバリアントとフレーバーとdart-define【Flavor】
アプリのビルド時にバージョンや実装を分けたいケースはよくあります。
Flutterでは、Andoridネイティブアプリと同様に、Flavor
の指定が可能です。
さらに、dart-define
というAPIを使用することで、Dartからも簡単に参照できます。
ビルドバリアント
公式ドキュメントの説明は以下です。
各ビルド バリアントは、ビルド可能なさまざまなバージョンのアプリを表しています。たとえば、コンテンツが制限された無料版のアプリと、多くのコンテンツが含まれた有料版のアプリを作成することができます。API レベルまたは他のデバイスのバリエーションに基づいて、異なるデバイスをターゲットとするアプリの異なるバージョンをビルドすることもできます。
同じアプリで、本番/開発 など分けることができます。
Flavor / フレーバー
ビルドバリアントは、以下の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