flavorDimensions가 여러 개인 경우 google-services.json을 설정하는 방법

Too long, Don't read


  • 앱에 필요한 google-services.json은 개발용과 프로덕션 용의 2 종류만으로 좋다
  • productFlavors, flavorDimensions가 각각 2종류 이상 있다
  • 풍미 조합 모든 폴더에 google-services.json을 넣어야합니다
  • 까다로운
  • 그럴 때의 해소법

  • 샘플 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 를 배치하면 주워주게 되었습니다만,
    실제로 사용하고 싶다.

    그러나 이 모든 맛의 조합
    [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를 로드하는 프로세스 이름은google-services.json 이므로,
    productFlavorName의 머리가 dev인지 prd인지 google-service.json의 복사 원본을 결정하고 복사합니다.

    그렇게만 그렇습니다만, 해주지 않아-! 한 사람이 더 이상 증가하지 않도록 쓸 때.
  • 좋은 웹페이지 즐겨찾기