LoginSignup
3
1

Flutter Androidの開発環境 切替設定

Last updated at Posted at 2023-05-29

AndroidのアプリケーションIDとアプリケーション名を
開発環境と本番環境に応じて切り替える設定方法を紹介します。

.vscodeの設定

プロジェクト直下に.vscodeフォルダを作り、その中にlaunch.jsonファイルを作成する

launch.json
{
  "configurations": [
    {
      "name": "開発環境デバッグビルド",
      "request": "launch",
      "type": "dart",
      "args": [
        "--dart-define=FLAVOR=dev"
      ]
    },
    {
      "name": "本番環境デバッグビルド",
      "request": "launch",
      "type": "dart",
      "args": [
        "--dart-define=FLAVOR=prod"
      ]
    },
    {
      "name": "開発環境リリースビルド",
      "request": "launch",
      "type": "dart",
      "flutterMode": "release",
      "args": [
        "--dart-define=FLAVOR=dev"
      ]
    },
    {
      "name": "本番環境リリースビルド",
      "request": "launch",
      "type": "dart",
      "flutterMode": "release",
      "args": [
        "--dart-define=FLAVOR=prod"
      ]
    },
  ]
}

もっと細かく設定もできるので詳しくは下記参照

Androidの設定

android/app/build.gradleを開いて追記していきます。
※ android/build.gradleと間違えないように注意!

Dartの環境変数を使用できるようにする おまじない

build.gradle
// Gradleビルドスクリプト内でDartの環境変数を使用できるようにするための初期設定
def dartEnvironmentVariables = [:];
if (project.hasProperty('dart-defines')) {
    // カンマ区切りかつBase64でエンコードされているdart-definesの値をデコードして変数に格納する。
    dartEnvironmentVariables = dartEnvironmentVariables + project.property('dart-defines')
        .split(',')
        .collectEntries { entry ->
            def pair = new String(entry.decodeBase64(), 'UTF-8').split('=')
            [(pair.first()): pair.last()]
        }
}

dart-definesはlaunch.jsonファイルの"args": []内で設定した変数名です。
これの値をdartEnvironmentVariablesに格納してます。
こうすることでdartEnvironmentVariables.FLAVORがビルドした環境に応じてdev or prodを出力するようになります。

アプリケーションIDを切り替える

build.gradle
android {
    defaultConfig {
        applicationId "com.sample.sample_app"
        minSdkVersion 28
        targetSdkVersion 33
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName

        // prod 以外の場合はアプリケーションIDにフレーバー名を追加
        if (dartEnvironmentVariables.FLAVOR != 'prod') {
            applicationIdSuffix ".${dartEnvironmentVariables.FLAVOR}"
        }
    }
}

本番環境以外の場合はアプリケーションIDの末尾にFlavorの値をつけるようにしてます。
つまり今回の例だと
本番環境のときは com.sample.sample_app
開発環境のときは com.sample.sample_app.dev
となります。
このように分けることで本番環境と開発環境を別々のアプリとしてビルドできるようになります。

アプリケーション名を切り替える

build.gradle
android {
    defaultConfig {
        applicationId "com.sample.sample_app"
        minSdkVersion 28
        targetSdkVersion 33
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
        if (dartEnvironmentVariables.FLAVOR != 'prod') {
            applicationIdSuffix ".${dartEnvironmentVariables.FLAVOR}"
        }

        // アプリケーション名の設定
        resValue "string", "app_name", "自身のアプリ名" +
            (dartEnvironmentVariables.FLAVOR == 'prod' ? '' : ".${dartEnvironmentVariables.FLAVOR}")
    }
}

resValueは、リソース値を定義するためのGradle関数です。
第1引数はリソースの種類
第2引数はリソースの名前
第3引数はリソースの値
を示しています。

今回の例ではapp_nameをAndroidアプリケーションのstringリソースとして
本番環境のときは 自身のアプリ名、開発環境のときは 自身のアプリ名.devとなるように値を定義しています。
こうすることでAndroidアプリケーション内のコードやXMLリソースファイルから直接参照することができるようになります。

アプリケーション名を設定する

android/app/src/main/AndroidManifest.xmlを開く

AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application
        android:label="@string/app_name"

先程build.gradleで定義したリソース値はxmlファイル内では@string/app_nameで呼び出すことができます。
android:labelに指定することでビルド環境に応じてアプリ名が切り替わるようになります!

参考URL

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1