目次
前提
## ローカル開発環境
$ flutter run --debug --flavor dev --dart-define=app.flavor=dev
## 開発環境ビルド
$ flutter build apk --debug --flavor dev --dart-define=app.flavor=dev
## 本番環境ビルド
$ flutter build apk --release --flavor prod --dart-define=app.flavor=prod
上記のコマンドで各環境を切り替えるようにする
--debug
と--release
でbuild.gradleのsigningConfigsを切り替える--flavor
で build.gradleのproductFlavorsを切り替える--dart-define=app.flavor
でFlutter内のコードを切り替える
方法(Android側の設定)
key.propertiesの追加
- debugのための
key.properties
をdevelop.key.properties
として、同じディレクトリに保存する - 上で追加したファイルを.gitignoreに追加(android/.gitignore)
android/app/build.gradle のファイルを修正
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
// debugためのdevelopKeystorePropertiesを追加
def developKeystoreProperties = new Properties()
def developKeystorePropertiesFile = rootProject.file('develop.key.properties')
if (developKeystorePropertiesFile.exists()) {
developKeystoreProperties.load(new FileInputStream(developKeystorePropertiesFile))
}
– androidの中の設定項目
defaultConfig {
...
signingConfig signingConfigs.develop
}
signingConfigs {
// --releaseの設定
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
// --debugの設定
develop {
keyAlias developKeystoreProperties['keyAlias']
keyPassword developKeystoreProperties['keyPassword']
storeFile developKeystoreProperties['storeFile'] ? file(developKeystoreProperties['storeFile']) : null
storePassword developKeystoreProperties['storePassword']
}
}
flavorDimensions "default"
productFlavors {
dev {
dimension "default"
applicationIdSuffix ".dev"
versionNameSuffix ".dev"
// アプリケーション名を変更したい場合
resValue "string", "app_name", "名前(dev)"
resValue "string", "facebook_app_id", "..........."
resValue "string", "fb_login_protocol_scheme", "..........."
}
prod {
dimension "default"
// アプリケーション名を変更したい場合
resValue "string", "app_name", "名前"
resValue "string", "facebook_app_id", "..........."
resValue "string", "fb_login_protocol_scheme", "..........."
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
android/app/src/main/AndroidManifest.xml の変更
- 名前が直書きされている箇所を
@string/app_name
に変更 - 他に
app_name
が定義されている場合(android/app/src/main/res/values/strings.xml)、コメントアウトする必要がある
<application
android:name="io.flutter.app.FlutterApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher">
google-services.jsonの各環境の切り替え
以下に開発環境、本番環境、それぞれのファイルを保存する。
– android/app/src/develop/dev/google-services.json
– android/app/src/release/prod/google-services.json
方法(Flutter側での切り替え)
--dart-define
が以下のコード取得できるので、環境ごとに変更することが可能
const flavor = String.fromEnvironment('app.flavor');
if (flavor == 'dev') {
...
} else {
...
}