提问者:小点点

Android gradle-使用配置文件的不同目录设置产品风格,查看所有目录,而不仅仅是1个目录


对于正在转移到Firebase的现有应用程序,我正在尝试设置开发构建和生产构建。我在Firebase中使用了两个不同的项目,因此有两个不同的google.services.json.我主要遵循这个例子。

剥离的Gradle文件,注意构建类型

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)

据我所知,这应该确保一旦我用开发风格构建任何东西,它就会使用开发文件夹中的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的版本,然后尝试将其与“prod”文件夹中的文件相匹配,该文件夹不使用该applicationId。如何阻止它同时查看这两个文件夹?


共1个答案

匿名用户

问题在于口味和发布名称之间的组合。根据提供的gradle文件,当构建类型为“debug”时,后缀。添加了debug,因此如果您的谷歌服务。json文件没有声明的结果包名称,则将失败。

可用的包名称组合有:

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

如何解决这个问题

查看您的谷歌服务。json可用的包名称。如果上面描述的任何组合没有在这里声明,那么从Firebase控制台添加它们,并将新的json文件更新到您的项目中。

提示:你可以拥有一个谷歌服务。json文件,其中包含所有包名,而不是每个flavor和/或build组合有一个文件。通常,这在可维护性方面更为简洁(一个文件vs构建类型*风格数量)