更新:GCM已弃用,使用FCM
我正在实现新的谷歌云消息,遵循从谷歌开发人员页面这里的指南
我已经成功地运行并测试了它。但我现在的问题是,我有不同的产品口味,具有不同的applicationId/packageName和不同的谷歌云消息传递项目Id。谷歌服务。Json必须放在/app/google-services。Json,而不是flavor文件夹。
有没有办法让谷歌的服务。Json配置不同的许多口味?
更新:GCM已弃用,使用FCM
我正在实现新的谷歌云消息,遵循从谷歌开发人员页面这里的指南
我已经成功地运行并测试了它。但我现在的问题是,我有不同的产品口味,具有不同的applicationId/packageName和不同的谷歌云消息传递项目Id。谷歌服务。Json必须放在/app/google-services。Json,而不是flavor文件夹。
有没有办法让谷歌的服务。Json配置不同的许多口味?
我目前在同一个应用程序包中使用两个GCM项目Id。我加入了谷歌服务。我的第一个GCM项目的json,但我从第一个切换到第二个只改变SENDER_ID:
String token = instanceID.getToken(SENDER_ID,GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
(在这一点上,我认为谷歌的服务。Json不是强制性的)
你有很多口味,所以这意味着你会有很多不同的包装id,对吧?所以,只需转到您设置/生成json文件和配置每个包名的页面。所有这些都将添加到json文件中。
我现在很懒发布照片,但基本上:
访问https://developers.google.com/mobile/add 选择平台 选择你的应用 重要:输入你的口味包名称字段“android包名称” ... 继续获取配置文件。下载它!
当配置文件时,您可以看到谷歌向您显示服务器API密钥+发送方ID。所有包装(口味)都是一样的
最后,您只需要一个json文件来处理所有类型。
这里还有一个问题,当你注册获得注册令牌时,你必须测试,检查每个口味是否有差异。我没有触及它,但它认为应该是不同的。现在太晚了,我很困:)希望它能帮助!
我也遇到了同样的问题,但找不到完美的解决方案。这只是个变通办法。 我在想谷歌怎么就没想过口味呢?我希望他们能尽快提出更好的解决方案。
我在做什么:
我有两种风格,在每一种风格中我都放入了相应的google服务。Json: src/flavor1/google-services。Json和src/flavor2/google-services。json。
然后在构建gradle中,我根据应用程序/目录的口味复制文件:
android {
// set build flavor here to get the right gcm configuration.
//def myFlavor = "flavor1"
def myFlavor = "flavor2"
if (myFlavor.equals("flavor1")) {
println "--> flavor1 copy!"
copy {
from 'src/flavor1/'
include '*.json'
into '.'
}
} else {
println "--> flavor2 copy!"
copy {
from 'src/flavor2/'
include '*.json'
into '.'
}
}
// other stuff
}
限制:每次你想运行一个不同的口味时,你必须在gradle中手动更改myFlavor(因为它是硬编码的)。
我尝试了很多方法来获得当前的构建风格,比如afterEvaluate关闭…直到现在都找不到更好的解决办法了。
更新,另一个解决方案:一个谷歌服务。Json的所有口味:
你也可以,为每个口味有不同的包名,然后在谷歌开发控制台,你不需要为每个口味创建两个不同的应用程序,只需要在同一个应用程序中创建两个不同的客户端。 那么你就只有一个google服务了。Json,包含你的两个客户端。 当然,这取决于你如何实现你的口味的后端。如果它们没有分开,那么这个解决方案就不能帮助你。
根据ahmed_khan_89的回答,您可以将“复制代码”放在产品风味中。
productFlavors {
staging {
applicationId = "com.demo.staging"
println "Using Staging google-service.json"
copy {
from 'src/staging/'
include '*.json'
into '.'
}
}
production {
applicationId = "com.demo.production"
println "Using Production google-service.json"
copy {
from 'src/production/'
include '*.json'
into '.'
}
}
}
这样你就不必手动切换设置了。
写了一篇关于这个问题的文章。
有一个类似的问题(使用BuildTypes而不是flavour),并像这样修复了它。
利用Gradle的依赖管理系统。我创建了两个任务switchToDebug和switchToRelease。要求在运行assemblerrelease时,也运行switchToRelease。调试也是一样。
def appModuleRootFolder = '.'
def srcDir = 'src'
def googleServicesJson = 'google-services.json'
task switchToDebug(type: Copy) {
def buildType = 'debug'
description = 'Switches to DEBUG google-services.json'
from "${srcDir}/${buildType}"
include "$googleServicesJson"
into "$appModuleRootFolder"
}
task switchToRelease(type: Copy) {
def buildType = 'release'
description = 'Switches to RELEASE google-services.json'
from "${srcDir}/${buildType}/"
include "$googleServicesJson"
into "$appModuleRootFolder"
}
afterEvaluate {
processDebugGoogleServices.dependsOn switchToDebug
processReleaseGoogleServices.dependsOn switchToRelease
}
编辑:使用processDebugFlavorGoogleServices/processReleaseFlavorGoogleServices任务在每个flavor级别上修改它。
根据@ZakTaccardi的回答,并且假设您不想在两个版本中都使用一个项目,请将此添加到构建的末尾。gradle文件:
def appModuleRootFolder = '.'
def srcDir = 'src'
def googleServicesJson = 'google-services.json'
task switchToStaging(type: Copy) {
outputs.upToDateWhen { false }
def flavor = 'staging'
description = "Switches to $flavor $googleServicesJson"
delete "$appModuleRootFolder/$googleServicesJson"
from "${srcDir}/$flavor/"
include "$googleServicesJson"
into "$appModuleRootFolder"
}
task switchToProduction(type: Copy) {
outputs.upToDateWhen { false }
def flavor = 'production'
description = "Switches to $flavor $googleServicesJson"
from "${srcDir}/$flavor/"
include "$googleServicesJson"
into "$appModuleRootFolder"
}
afterEvaluate {
processStagingDebugGoogleServices.dependsOn switchToStaging
processStagingReleaseGoogleServices.dependsOn switchToStaging
processProductionDebugGoogleServices.dependsOn switchToProduction
processProductionReleaseGoogleServices.dependsOn switchToProduction
}
你需要src/staging/google-services文件。Json和src/production/google-services.json。替换您所使用的风味名称。
我发现google-services插件对于想要添加GCM的项目来说是非常无用的。它只生成以下文件,简单地将您的项目ID添加为字符串资源:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Your API key would be on the following line -->
<string name="gcm_defaultSenderId">111111111111</string>
</resources>
似乎只有在直接从Cloud Messaging for Android指南复制样例代码时才需要它。下面是示例行:
String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId), GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
解决方案
如果您希望能够为不同的构建类型或产品风格切换API项目,您只需定义自己的常量,并在调用getToken() API时选择适当的常量。
private static final String SENDER_ID = "111111111111";
private static final String SANDBOX_SENDER_ID = "222222222222";
String token = instanceID.getToken(
BuildConfig.DEBUG ? SENDER_ID : SANDBOX_SENDER_ID,
GoogleCloudMessaging.INSTANCE_ID_SCOPE,
null);
产品口味
上面的代码用于在调试和发布版本之间切换。对于产品类型,您可以在java源文件中定义不同的API键,并将这些文件放在相应的产品类型目录中。参考:Gradle Build variables
Google -services插件的目的是简化谷歌特性的集成。
因为它只从google服务中生成android资源。json文件,过于复杂的gradle逻辑否定了这一点,我认为。
因此,如果google文档没有说明特定的google特性需要哪些资源,我建议为每个相关的buildtype/flavor生成json文件,看看插件生成了哪些资源,然后手动将这些资源放入各自的src/buildtypeORflavor/res目录中。
删除对google-services插件和json文件的引用,就完成了。
有关google-services gradle-plugin内部工作原理的详细信息,请参阅我的另一个答案:
https://stackoverflow.com/a/33083898/433421
受到上面@ahmed_khan_89答案的启发。我们可以直接这样保存在gradle文件中。
android{
// set build flavor here to get the right Google-services configuration(Google Analytics).
def currentFlavor = "free" //This should match with Build Variant selection. free/paidFull/paidBasic
println "--> $currentFlavor copy!"
copy {
from "src/$currentFlavor/"
include 'google-services.json'
into '.'
}
//other stuff
}
不需要任何额外的gradle脚本。
谷歌开始在'android_client_info'的名称中添加不同的包名。它在google-services.json中如下所示
"android_client_info": {
"package_name": "com.android.app.companion.dev"
}
因此,以下步骤足以拥有不同的谷歌服务。json的选择。
有两种口味 在谷歌分析配置页面添加一个新的开发风格的包,并下载google-services.json。 注意在新的配置文件中,两个flavor的包id都在那里 准备你的调味料。
就是这样!
谷歌服务。Json文件是不必要的接收通知。只要在你的构建中为每种味道添加一个变量。gradle文件:
buildConfigField "String", "GCM_SENDER_ID", "\"111111111111\""
使用这个变量BuildConfig。GCM_SENDER_ID代替getString(R.string.gcm_defaultSenderId)注册时:
instanceID.getToken(BuildConfig.GCM_SENDER_ID, GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
谷歌在play服务插件的2.0版本中包含了对不同口味的支持。由于这个版本的gradle插件com.google.gms:google-services:2.0.0-alpha3
你可以这样做
第一步:添加到gradle
// To auto-generate google map api key of google-services.json
implementation 'com.google.android.gms:play-services-maps:17.0.0'
第二步:在应用程序标签中添加到AndroidManifest.xml
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_api_key" />
第三步:从firebase下载每个flavor JSON文件并添加
app/src/
flavor1/google-services.json
flavor2/google-services.json
3.0.0版本的插件在这些位置搜索JSON文件(考虑到你有一个flavor flavor1和一个构建类型调试):
/app/src/debug/google-services.json
/app/src/debug/flavor1/google-services.json
/app/google-services.json
即使使用flavorDimensions,我也能做到。一个维度是免费和付费,另一个维度是模拟和刺激。我还有3个构建类型:调试、发布和登台。这是它在我的FreeProd项目中的外观:
有多少谷歌服务?json文件将取决于你的项目的特点,但你将需要至少一个json文件为每个谷歌项目。
如果你想了解更多关于这个插件如何处理这些JSON文件的细节,下面是: https://github.com/googlesamples/google-services/issues/54#issuecomment-165824720
官方文档链接: https://developers.google.com/android/guides/google-services-plugin
更新信息的博客文章:https://firebase.googleblog.com/2016/08/organizing-your-firebase-enabled-android-app-builds.html
去这里查看这个插件的最新版本:https://mvnrepository.com/artifact/com.google.gms/google-services?repo=google
我正在使用谷歌服务。json文件,从这里创建:https://developers.google.com/mobile/add?platform=android&cntapi=gcm&cnturl=https:%2F%2Fdevelopers.google.com%2Fcloud-messaging%2Fandroid%2Fclient&cntlbl=Continue%20Adding%20GCM%20Support&%3Fconfigured%3Dtrue
在json结构中,有一个称为客户机的json数组。如果你有多种口味,只需在这里添加不同的属性。
{
"project_info": {
"project_id": "PRODJECT-ID",
"project_number": "PROJECT-NUMBER",
"name": "APPLICATION-NAME"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:PROJECT-NUMBER:android:HASH-FOR-FLAVOR1",
"client_id": "android:PACKAGE-NAME-1",
"client_type": 1,
"android_client_info": {
"package_name": "PACKAGE-NAME-1"
}
},
"oauth_client": [],
"api_key": [],
"services": {
"analytics_service": {
"status": 1
},
"cloud_messaging_service": {
"status": 2,
"apns_config": []
},
"appinvite_service": {
"status": 1,
"other_platform_oauth_client": []
},
"google_signin_service": {
"status": 1
},
"ads_service": {
"status": 1
}
}
},
{
"client_info": {
"mobilesdk_app_id": "1:PROJECT-NUMBER:android:HASH-FOR-FLAVOR2",
"client_id": "android:PACKAGE-NAME-2",
"client_type": 1,
"android_client_info": {
"package_name": "PACKAGE-NAME-2"
}
},
"oauth_client": [],
"api_key": [],
"services": {
"analytics_service": {
"status": 1
},
"cloud_messaging_service": {
"status": 2,
"apns_config": []
},
"appinvite_service": {
"status": 1,
"other_platform_oauth_client": []
},
"google_signin_service": {
"status": 1
},
"ads_service": {
"status": 1
}
}
}
],
"client_info": [],
"ARTIFACT_VERSION": "1"
}
在我的项目中,我使用相同的项目id,当我在上面的url中添加第二个package-name时,谷歌为我提供了一个包含json-data中的多个客户端的文件。
我们对调试构建有不同的包名(*.debug),所以我想要一些基于flavor和buildType的东西,而不必在processDebugFlavorGoogleServices的模式中编写任何与flavor相关的东西。
我在每个版本中创建了一个名为“google-services”的文件夹,包含了json文件的调试版本和发布版本:
在gradle文件的buildTypes部分,添加以下内容:
applicationVariants.all { variant ->
def buildTypeName = variant.buildType.name
def flavorName = variant.productFlavors[0].name;
def googleServicesJson = 'google-services.json'
def originalPath = "src/$flavorName/google-services/$buildTypeName/$googleServicesJson"
def destPath = "."
copy {
if (flavorName.equals(getCurrentFlavor()) && buildTypeName.equals(getCurrentBuildType())) {
println originalPath
from originalPath
println destPath
into destPath
}
}
}
当你切换构建变量时,它会自动在你的应用模块的根处复制正确的json文件。
在build.gradle的根中添加这两个被调用的方法,以获取当前风格和当前构建类型
def getCurrentFlavor() {
Gradle gradle = getGradle()
String tskReqStr = gradle.getStartParameter().getTaskRequests().toString()
Pattern pattern;
if( tskReqStr.contains( "assemble" ) )
pattern = Pattern.compile("assemble(\\w+)(Release|Debug)")
else
pattern = Pattern.compile("generate(\\w+)(Release|Debug)")
Matcher matcher = pattern.matcher( tskReqStr )
if( matcher.find() ) {
println matcher.group(1).toLowerCase()
return matcher.group(1).toLowerCase()
}
else
{
println "NO MATCH FOUND"
return "";
}
}
def getCurrentBuildType() {
Gradle gradle = getGradle()
String tskReqStr = gradle.getStartParameter().getTaskRequests().toString()
if (tskReqStr.contains("Release")) {
println "getCurrentBuildType release"
return "release"
}
else if (tskReqStr.contains("Debug")) {
println "getCurrentBuildType debug"
return "debug"
}
println "NO MATCH FOUND"
return "";
}
就是这样,你不必担心从你的gradle文件中删除/添加/修改口味,它得到调试或发布谷歌服务。自动json。
更新:下面的解释是针对一个Android Studio项目,该项目中有一个Firebase项目和不同的Firebase应用程序。 如果目标是在同一个Android Studio项目中的不同Firebase项目中为不同的Firebase应用程序提供不同的JSON文件,(或者如果你不知道有什么区别)请查看这里。
每个Android应用程序ID(通常是包名)需要一个Firebase应用程序。通常每个Gradle构建变体都有一个Application ID(如果你使用Gradle构建类型和Gradle构建风格,这可能会发生)
在谷歌服务3.0和使用Firebase时,不需要为不同的口味创建不同的文件。为不同的口味创建不同的文件可能不清楚或直接,如果你有productflavors和Build类型相互组合。
在同一个文件中,您将拥有所有构建类型和风格所需的所有配置。
在Firebase控制台中,您需要为每个包名称添加一个应用程序。假设您有两种风格(开发和实时)和两种构建类型(调试和发布)。这取决于你的配置,但很可能你有4个不同的包名,比如:
Com.stackoverflow.example(实时发布) dev (live - dev) debug (debug - release) debug (debug - dev)
在Firebase控制台中需要4个不同的Android应用程序。(在每一台计算机上,您需要添加SHA-1用于调试和运行您正在使用的每台计算机)
当你下载谷歌服务时。Json文件,实际上从哪个应用下载并不重要,它们都包含与所有应用相关的相同信息。
现在你需要在应用程序级别(app/)中定位这个文件。
如果您打开该文件,您将看到If包含所有包名称的所有信息。
一个痛点曾经是插件。为了让它工作,你需要在你的文件底部找到插件。这条线。
apply plugin: 'com.google.gms.google-services'
...需要在你的应用构建的底部。gradle文件。
对于这里所说的大多数,它也适用于以前的版本。我从来没有为不同的配置准备过不同的文件,但现在使用Firebase控制台更容易了,因为它们提供了一个文件,其中包含所有配置所需的所有内容。
重火力点文档 Firebase云消息 重火力点控制台
简化@Scotti说的话。您需要为特定项目创建多个具有不同包名的应用程序,具体取决于产品风格。
假设您的项目是ABC,具有不同的产品风味X,Y,其中X有一个包名com。x和Y有一个包名为com。然后在firebase控制台中,你需要创建一个项目ABC,其中你需要创建2个包名为com的应用程序。X和com.y。然后你需要下载谷歌服务。Json文件中有2个client-info对象,其中包含这些包,你就可以开始了。
json的代码片段如下所示
{
"client": [
{
"client_info": {
"android_client_info": {
"package_name": "com.x"
}
{
"client_info": {
"android_client_info": {
"package_name": "com.y"
}
]
}
1)。谷歌提供什么服务?Json真的有用吗?
关注这个:https://stackoverflow.com/a/31598587/2382964
2)。谷歌是如何服务的。Json文件影响你的android工作室项目?
关注这个:https://stackoverflow.com/a/33083898/2382964
简单来说就是第二个url,如果你添加google-services。Json在你的项目中必须有一个自动生成的google-services文件夹在这个路径下调试变量
app/build/generated/res/google-services/debug/values/values.xml
3)。该怎么做,才能把事情做好?
在project_level构建中添加google-services依赖项。Gradle,如果你使用app_compact库,你也可以使用3.0.0版本。
// Top-level build.gradle file
classpath 'com.google.gms:google-services:2.1.2'
现在在app_level build中。你必须在底部添加Gradle。
// app-level build.gradle file
apply plugin: 'com.google.gms.google-services'
注意:在gradle文件底部添加这一行非常重要。否则Gradle构建不会给你任何错误,但它不能正常工作。
4)。谷歌服务该放在哪里?Json文件在你的结构。
如果你没有build_flavor,就把它放在inside /app/google-service中。json文件夹。
情况2.)如果你有多个build_flavor并且你有不同的google_services。Json文件放在app/src/build_flavor/google-service.json中。
情况3.)如果你有多个build_flavor和单个google_services。Json文件放在app/google-service.json中。
Firebase现在支持多个应用程序id和一个google-services。json文件。
这篇博文详细描述了它。
您将在Firebase中创建一个父项目,用于您的所有变体。然后在Firebase项目下为每个应用程序id创建单独的Android应用程序。
当你创建了所有的变体,你可以下载一个google-services。支持所有应用程序id的Json。当需要单独查看数据时(例如崩溃报告),你可以用下拉菜单进行切换。
放置你的“谷歌服务”。Json”文件分别在app/src/flavors下 然后是构建。Gradle的应用程序,在android下添加以下代码
gradle.taskGraph.beforeTask { Task task ->
if (task.name ==~ /process.*GoogleServices/) {
android.applicationVariants.all { variant ->
if (task.name ==~ /(?i)process${variant.name}GoogleServices/) {
copy {
from "/src/${variant.flavorName}"
into '.'
include 'google-services.json'
}
}
}
}
}
事实上,只有一个谷歌——服务。MyApp/app/目录下的com.google.gms:google-services:3.0.0是很好的,不需要额外的脚本。但是要小心删除文件google-services。为了避免错误类型为“:app:processDebugGoogleServices”的任务执行失败,请从应用目录MyApp/app/src/flavor1/res/”中删除。没有为包找到匹配的客户端
所以如果你想通过编程复制google的服务。Json文件从你的所有变体到你的根文件夹。当你切换到特定的变体时,这里有一个解决方案
android {
applicationVariants.all { variant ->
copy {
println "Switches to $variant google-services.json"
from "src/$variant"
include "google-services.json"
into "."
}
}
}
这种方法有一个警告,那就是你需要有谷歌服务。Json文件在你的每个变体文件夹这里是一个例子。
根据Firebase文档,你也可以使用字符串资源来代替google-services.json。
因为这个提供者只是读取已知名称的资源,另一种选择是直接将字符串资源添加到应用程序中,而不是使用谷歌Services gradle插件。你可以这样做: 从根build.gradle中移除google-services插件 删除google服务。来自项目的Json 直接添加字符串资源 删除应用插件:'com.google.gms。你的应用build.gradle中的Google-services
示例strings.xml:
<string name="google_client_id">XXXXXXXXX.apps.googleusercontent.com</string>
<string name="default_web_client_id">XXXX-XXXXXX.apps.googleusercontent.com</string>
<string name="gcm_defaultSenderId">XXXXXX</string>
<string name="google_api_key">AIzaXXXXXX</string>
<string name="google_app_id">1:XXXXXX:android:XXXXX</string>
<string name="google_crash_reporting_api_key">AIzaXXXXXXX</string>
<string name="project_id">XXXXXXX</string>
简短的回答:
实现: 默认情况下,您应该复制google-services。Json到app dir。
如果想要获得其他效果,可以复制谷歌的服务。Json到app/src/{flavor-name}目录
测试: 尝试构建,打开构建选项卡,然后使用解析json文件检查输出消息:.....
...
gradle.taskGraph.beforeTask { Task task ->
if (task.name ==~ /process.*GoogleServices/) {
android.applicationVariants.all { variant ->
if (task.name ==~ /(?i)process${variant.flavorName}(Debug|Release)GoogleServices/) {
copy {
from "src/tenants/${variant.flavorName}"
include 'google-services.json'
into '.'
}
}
}
}
}
gradle.taskGraph.afterTask { Task task ->
if (task.name ==~ /process.*GoogleServices/) {
android.applicationVariants.all { variant ->
if (task.name ==~ /(?i)process${variant.flavorName}(Debug|Release)GoogleServices/) {
delete fileTree(".").matching {
include 'google-services.json'
}
}
}
}
}
remove the existing google-services.json from your project. Build > Clean Project compile and run your app look at the error message that comes up to figure out where you can put your google-services.json..mine looked like this File google-services.json is missing. The Google Services Plugin cannot function without it. Searched Location: C:\Users\username\Desktop\HelloWorld\app\src\devSuffixYes_EnvQaApistaging_\google-services.json C:\Users\username\Desktop\HelloWorld\app\src\debug\google-services.json C:\Users\username\Desktop\HelloWorld\app\src\devSuffixYes_EnvQaApistaging_Debug\google-services.json C:\Users\username\Desktop\HelloWorld\app\src\dev\google-services.json C:\Users\username\Desktop\HelloWorld\app\src\devDebug\google-services.json C:\Users\username\Desktop\HelloWorld\app\src\devSuffixYes_EnvQaApistaging_\debug\google-services.json C:\Users\username\Desktop\HelloWorld\app\src\debug\devSuffixYes_EnvQaApistaging_\google-services.json C:\Users\username\Desktop\HelloWorld\app\src\dev\debug\google-services.json C:\Users\username\Desktop\HelloWorld\app\src\dev\suffix\google-services.json C:\Users\username\Desktop\HelloWorld\app\src\dev\suffixDebug\google-services.json C:\Users\username\Desktop\HelloWorld\app\src\dev\suffix\debug\google-services.json C:\Users\username\Desktop\HelloWorld\app\src\dev\suffix\yes_\google-services.json C:\Users\username\Desktop\HelloWorld\app\src\dev\suffix\yes_Debug\google-services.json C:\Users\username\Desktop\HelloWorld\app\src\dev\suffix\yes_\debug\google-services.json C:\Users\username\Desktop\HelloWorld\app\src\dev\suffix\yes_\env\google-services.json C:\Users\username\Desktop\HelloWorld\app\src\dev\suffix\yes_\envDebug\google-services.json C:\Users\username\Desktop\HelloWorld\app\src\dev\suffix\yes_\env\debug\google-services.json C:\Users\username\Desktop\HelloWorld\app\src\dev\suffix\yes_\env\qa\google-services.json C:\Users\username\Desktop\HelloWorld\app\src\dev\suffix\yes_\env\qaDebug\google-services.json C:\Users\username\Desktop\HelloWorld\app\src\dev\suffix\yes_\env\qa\debug\google-services.json C:\Users\username\Desktop\HelloWorld\app\src\dev\suffix\yes_\env\qa\apistaging_\google-services.json C:\Users\username\Desktop\HelloWorld\app\src\dev\suffix\yes_\env\qa\apistaging_Debug\google-services.json C:\Users\username\Desktop\HelloWorld\app\src\dev\suffix\yes_\env\qa\apistaging_\debug\google-services.json C:\Users\username\Desktop\HelloWorld\app\google-services.json
注意:它还关心flavorDimensions中声明的顺序。我的是flavorDimensions“dev_suffix”,“environment”
我知道,你怀疑谷歌的服务。Json文件应该放在根应用程序文件夹,是吗?我将打破这个神话——不一定。你可以写谷歌服务。Json文件到flavor文件夹中。是这样的: