android - Android gradle - 使用不同目录为配置文件设置产品风格,查看所有目录,而不仅仅是 1
问题描述
对于转移到 firebase 的现有应用程序,我正在尝试设置开发构建和生产构建。我在firebase中使用了两个不同的项目,因此有两个不同的google.services.json。我主要遵循这个例子。
剥离 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”创建了一个版本,然后尝试将其与“prod”文件夹中的文件匹配,该文件不使用该 applicationId。如何阻止它查看两个文件夹?
解决方案
问题在于风味和发布名称之间的组合。根据提供的 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
包含所有包名称的文件,而不是每个风味和/或构建组合都有一个文件。通常,这在可维护性方面更加整洁(一个文件与构建类型 * 风格的数量)
推荐阅读
- java - 是否可以用多个公钥包装一个密钥?
- javascript - Puppeteer - 错误:未定义窗口 - 在 page.evaluate 嵌套函数中
- python - YouTube Analytics API - 按频道分组的内容所有者的总观看次数
- javascript - 在节点上应用评估:Javascript
- mysql - 对 MySQL 选择命令的结果进行算术运算
- canvg - 无法将 SVG 图像转换为画布 3.0.7
- flutter - 有没有办法使用格式(样式)将文本复制到剪贴板?
- asp.net-core-webapi - ASP.net core Odata 从响应中删除“@odata.context”和“value”
- google-apps-script - 复制公式并粘贴到特定范围,然后再次粘贴为值
- google-apps-script - 如何使用应用程序脚本或 importxml 获取表格内容?