【Android】Flavor毎にアプリ名とアプリアイコンを変更する

Androidアプリ開発時に、開発環境・ステージング環境・本番環境 などの環境毎にFlavorを設定することがあるかと思います。
環境が違うアプリをひと目で見分けられるように、アプリ名とアプリアイコンを変更する方法をまとめておきます。

# Flavorを設定する

アプリの `build.gradle` にFlavorの設定を行います。
今回は例として、 `dev`(開発)・`stg`(ステージング)・`prod`(本番) の３つの環境を用意するものとします。

```gradle:build.gradle
android {

    // 省略

    // ここから追加
    flavorDimensions "environment"
    productFlavors {
        dev {
            dimension "environment"
            applicationIdSuffix ".dev"
            versionNameSuffix ".dev"
        }
        stg {
            dimension "environment"
            applicationIdSuffix ".stg"
            versionNameSuffix ".stg"
        }
        prod {
            dimension "environment"
        }
    }
    // ここまで追加
}
```

# Flavor毎にアプリ名を変更する

Flavor毎に `strings.xml` ファイルを作成します。
下記のように、「res/valuesを右クリック -> New -> Values Resource File」を選択します。
![スクリーンショット 2020-10-30 1.54.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279032/b01de77e-513d-9ce6-3e78-4f795411e4b5.png)

次に、 `File name` を `strings` にして、 `Source set` に `dev` を選択します。
この `dev` は先程Flavorで設定したものです。
![スクリーンショット 2020-10-30 1.55.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279032/89e31f2a-6a49-60ff-9957-932995a4a0dc.png)

これによって、 `dev` 環境用の `strings.xml` が作成されます。
![スクリーンショット 2020-10-30 1.56.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279032/442f81fa-a108-5517-9538-02caf0c6b103.png)

この `strings.xml` の `app_name` に環境毎のアプリ名を設定することにより、アプリ名の変更が可能です。
![スクリーンショット 2020-10-30 2.02.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279032/7b7fbede-346a-478f-bad8-016d5ee8592e.png)

同様に `stg` 用の `strings.xml` も作成し、アプリ名を設定します。
（`Build Variants` を `stgDebug` にしないと `strings.xml(stg)` は表示されません）
`prod` 環境はデフォルトの `string.xml` を使用したいため、別途 `strings.xml` は作成しません。

下記のように、環境毎にアプリ名が変更されていればOKです。
![スクリーンショット 2020-10-30 2.11.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279032/1cabe3ec-4e4b-de51-9800-e597d1c24de9.png)

# Flavor毎にアプリアイコンを変更する

今回は、[easylauncher-gradle-plugin](https://github.com/akaita/easylauncher-gradle-plugin) というライブラリを使用しました。

まずは、プロジェクトの `build.gradle` に設定を追加します。

```gradle:build.gradle
buildscript {
    
    // 省略

    dependencies {

        // 省略

        classpath 'com.akaita.android:easylauncher:1.3.1'  // <- ここを追加
    }
}
```

次に、アプリの `build.gradle` に設定を追加します。

```gradle:build.gradle
plugins {

    // 省略

    id 'com.akaita.android.easylauncher'  // <- ここを追加
}

android {

    // 省略

    // 先程追加したFlavor設定
    flavorDimensions "environment"
    productFlavors {
        dev {
            dimension "environment"
            applicationIdSuffix ".dev"
            versionNameSuffix ".dev"
        }
        stg {
            dimension "environment"
            applicationIdSuffix ".stg"
            versionNameSuffix ".stg"
        }
        prod {
            dimension "environment"
        }
    }
}

// ここから追加
easylauncher {
    iconNames "@mipmap/ic_launcher_foreground"
    foregroundIconNames "@mipmap/ic_launcher_foreground"

    defaultFlavorNaming = true

    buildTypes {
        debug {}
        release {}
    }

    productFlavors {
        dev {
            filters = grayRibbonFilter()
        }
        stg {
            filters = greenRibbonFilter()
        }
        prod {
            enable false  // 本番ではラベルをつけない
        }
    }
}
// ここまで追加

// 省略

```

ここまで設定すると、アプリ毎にアイコンが変更されます。
今回、適当なアイコンも設定しています。
![スクリーンショット 2020-10-30 3.01.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279032/0689a114-aec8-4bfe-557e-7b6c43874ab2.png)

とてもわかりやすくなりましたね！
ライブラリのその他の設定は[ドキュメント](https://github.com/akaita/easylauncher-gradle-plugin#usage)を参照してください。