Android Gradle-使用不同目录配置文件来设置产品口味,在所有目录中查找,而不仅仅是1

时间:2019-02-25 13:12:12

标签: android firebase gradle

对于正在转移到Firebase的现有应用程序,我试图建立一个开发版本和一个生产版本。我在firebase中使用了两个不同的项目,因此有两个不同的google.services.json。我主要关注this example

剥离的Gradle文件,请注意buildTypes和productFlavors:

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "nl.my_project.cwo_app"
        (...)
    }

    buildTypes {
        release {
        }
        debug {
            applicationIdSuffix ".debug"
        }
    }


    // This is used to ensure the right version of google-services.json is used.
    flavorDimensions "version"
    productFlavors {
        dev {
            dimension "version"
            versionNameSuffix "-dev"
        }
        prod {
            dimension "version"
            versionNameSuffix "-prod"
        }
    }
}

dependencies {
     ...
}

我具有以下目录结构:

app/
    src/
        main/
        dev/
            google-services.json (for dev only)
        prod/
            google-services.json (for prod only)

据我所知,应该确保一旦以dev风格构建任何东西,它都将使用dev文件夹中的google-services.json。但是,当我构建项目时(在选择构建变体后,例如devDebug),它给出了一个错误,指出应用程序ID不适合。调查表明这实际上同时使用了google-services.json。我该如何更改?

构建日志:

14:00:55: Executing task 'build'...

Executing tasks: [build]


> Configure project :app

> Task :app:preBuild UP-TO-DATE
> Task :app:preDevDebugBuild UP-TO-DATE
> Task :app:compileDevDebugAidl NO-SOURCE
(...) 

> Task :app:processDevDebugGoogleServices
Parsing json file: E:\projecten\CWO_app\app\src\dev\google-services.json

(...)     
> Task :app:processProdDebugGoogleServices FAILED
Parsing json file: E:\projecten\CWO_app\app\src\prod\google-services.json

FAILURE: Build failed with an exception.
Execution failed for task ':app:processProdDebugGoogleServices'.
> No matching client found for package name 'nl.my_project.cwo_app.debug'

如您所见,它会创建一个带有applicationIdSuffix“ .debug”的版本,然后尝试将其与不使用那个applicationId的'prod'文件夹中的文件进行匹配。如何阻止它同时查看两个文件夹?

1 个答案:

答案 0 :(得分:0)

问题取决于风味名称和发行名称之间的组合。根据提供的gradle文件,当构建类型为“ debug”时,将添加后缀.debug,因此,如果您的google-services.json文件没有声明的结果包名称,则将失败。

可用的软件包名称组合为:

  • nl.my_project.cwo_app.debug(用于调试构建类型)
  • nl.my_project.cwo_app(用于发行版类型)

如何解决此问题

签入google-services.json中可用的软件包名称。如果未在其中声明上述任何组合,请从Firebase控制台添加它们,并将新的json文件更新到您的项目中。

提示: 您可以拥有一个包含所有程序包名称的单个google-services.json文件,而不是每种口味和/或版本组合都只有一个文件。通常,在可维护性方面(一个文件vs生成类型*风味数量)更整洁