LoginSignup
8

More than 5 years have passed since last update.

flavorDimensionsが複数あるときのgoogle-services.jsonの設定方法

Posted at

Too long, Don't read

  • アプリに必要なgoogle-services.jsonは開発用と本番用の二種類だけでいい
  • productFlavors、flavorDimensionsがそれぞれ2種類以上ある
  • フレーバーの組み合わせすべてのフォルダにgoogle-services.jsonを置かなきゃいけない:angel_tone2:
  • だるい
  • そんなときの解消法

サンプルのbuild.gradle

build.gradle
android {
// 略
    flavorDimensions "mode", "api"
    productFlavors {
        dev {
            dimension "mode"
            applicationIdSuffix '.dev'
        }
        prd {
            dimension "mode"
        }

        minApi23 {
            dimension "api"
            minSdkVersion '23'
        }

        minApi21 {
            dimension "api"
            minSdkVersion '21'
        }
    }

    buildTypes {
        debug {
           // 略
        }
        release {
           // 略
        }
    }
}
// 略
apply plugin: "com.google.gms.google-services"

app/src/フレーバー名/の直下にgoogle-services.jsonを配置すれば拾ってくれるようになりましたが、
実際に使いたいgoogle-services.jsonは開発用(dev)と本番用(prd)の二種類だけだったとします

しかし、この全部のフレーバーの組み合わせ
[dev/prd]×[minApi23/minApi21]×[debug/release] = 2 × 2 × 2 = 8
だけあるので、各フォルダにgoogle-services.jsonを配置しなきゃいけない

やってられんですね。

解決法

  • app/src以下にdevとprdのフォルダを切る
  • それぞれのフォルダ直下にgoogle-services.jsonを配置
  • gradleのbeforeTaskでdevかprdに応じてgoogle-services.jsonをコピーする
gradle.taskGraph.beforeTask { Task task ->
    if (task.name ==~ /process.*GoogleServices/) {
        android.applicationVariants.all { variant ->
            if (task.name ==~ /(?i)processDev.*GoogleServices/) {
                copy {
                    from "src/dev"
                    into "."
                    include "google-services.json"
                }
            } else {
                copy {
                    from "src/prd"
                    into "."
                    include "google-services.json"
                }
            }
        }
    }
}

GoogleServicesを読み込むプロセス名は
process${productFlavorName}GoogleServicesとなるので、
productFlavorNameの頭がdevかprdかでgoogle-service.jsonのコピー元を判別してコピーしてます

そんだけっちゃそんだけなんですが、やってらんねー!な人がこれ以上増えないように書いときます。

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
8