Android Google Services 3.0.0和Maps api key in build.gradle中缺少api_key/current key

Android Google Services 3.0.0和Maps api key in build.gradle中缺少api_key/current key,android,google-maps,android-gradle-plugin,google-play-services,Android,Google Maps,Android Gradle Plugin,Google Play Services,我的问题与之非常相似,但更为复杂 今天早上,我将我的应用程序更新到com.google.gms:google services:3.0.0和所有play services 9.0.0依赖项 compile 'com.google.android.gms:play-services-analytics:9.0.0' compile 'com.google.android.gms:play-services-ads:9.0.0' compile 'com.google.android.gms:pla

我的问题与之非常相似,但更为复杂

今天早上,我将我的应用程序更新到com.google.gms:google services:3.0.0和所有play services 9.0.0依赖项

compile 'com.google.android.gms:play-services-analytics:9.0.0'
compile 'com.google.android.gms:play-services-ads:9.0.0'
compile 'com.google.android.gms:play-services-identity:9.0.0'
compile 'com.google.android.gms:play-services-gcm:9.0.0'
现在我得到了一个臭名昭著的错误

错误:任务:hotelsclick:ProcessDebuggGoogleServices的执行失败。“>缺少api_键/当前_键对象

这似乎是由于google-services.json文件中缺少一个API密钥(有人告诉我)。我从中获得了一个新的API密钥,并在其中找到了以下字段

  "api_key": [],
我想我应该把我的Google Maps API密钥放在那里,但我遇到了两个问题:

1-如果我尝试将密钥放在该字段中,它将不起作用。我两个都试过了

  "api_key": [{ "current_key": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-AE" }],

错误保持不变

2-为了使用动态建筑,我一直在使用gradle。我在模块build.gradle中添加了以下内容:

buildTypes {
    release {
        minifyEnabled true
        shrinkResources true
        debuggable false
        resValue "string", "google_maps_api_key", "ABCDEFGHILMNO... my maps release API key"
        proguardFiles getDefaultProguardFile('proguard-android.txt'),
                'proguard-rules.pro'
        zipAlignEnabled true
    }
    debug {
        resValue "string", "google_maps_api_key", "ZNTMRNCDNR... my google maps debug API key"
        debuggable true
        proguardFiles getDefaultProguardFile('proguard-android.txt'),
                'proguard-rules.pro'
    }
}
在Androidmanifest.xml文件中

    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/google_maps_api_key" />

现在,它一直在工作,直到我更新到谷歌服务3.0.0,我不明白为什么它现在不工作。它不应该从编译的build.gradle文件中获取正确的API密钥并将其放入清单中吗

所以我的双重问题是:为什么动态API密钥获取不再有效?我怎样才能解决这个问题


谢谢

您是否尝试按如下方式放置空的“当前_键”:

"api_key": [{ "current_key": "" }]
看看情况如何

编辑:
您应该将“api_-key”:[](位于“客户端”)替换为“api_-key”:[{“当前_-key”:“}]

使用新的构建工具
classpath'com.google.gms:google services:3.0.0'
后您将面临的问题


只需重新创建“googleservices.json”。希望能解决这个问题

您必须启用云消息传递,即使您不使用它并生成新的json文件。当您启用云消息传递时,您将获得API密钥,并且需要它

可能您还需要其他服务,请参见:

在中,有构建类型和风格的概念,您可以使用它们来获得所需的内容。构建类型是应用程序的不同版本,功能相同,但调试代码可能不同。默认情况下,所有Android Gradle项目都有调试和发布构建类型

此外,您可以添加到您的项目和Android Studio将为您生成必要的文件,您只需插入您的

由于您使用的是gradle,因此可以执行以下操作:

build.gradle

AndroidManifest.xml

这样,您只有一个AndroidManifest.xml,并且可以根据构建类型设置值


您还可以检查此清单占位符:

如果您意外删除了密钥或无法取回密钥,请创建一个新的api凭据并准确地将其命名为“Android密钥(由谷歌服务自动创建)”。这将使您的凭证返回到google services json。

我能够通过这些步骤解决此问题,但这里没有回答。这个答案不是启用云消息传递,它只是检索其服务器密钥。(澄清是因为我的答案被删除了,因为它是“重复的”,而事实并非如此)

首先,转到Firebase控制台,然后转到项目设置,然后单击选项卡“云消息传递”。查看显示“服务器密钥”的位置,如果没有显示长密钥(不是“发件人ID”编号),请单击“重新生成密钥”,此时应显示一个长密钥。复制该密钥并将其放在您的google-services.json文件中:
“api\u key”:[{“current\u key”:“key goes here”}]


当其他方法都不起作用时,这个方法帮助了我,所以希望它能帮助别人。

但这会给你一个服务器api密钥,而不是你应该放在json文件中的密钥。我也做了同样的事情,启用了gcm,但里面没有api_密钥是的,我不知道为什么,但在我的例子中,启用云消息时,我在JSON文件中获得了这个api密钥。我通过启用云消息api在JSON文件中获得了api密钥。api_密钥条目已填充。“api_key”:[{“current_key”:“the_api_key”}但仍然不起作用。我真的不知道它出了什么问题……我手动将所有
api_key
对象替换为
“api_key”:[{“current_key”:“your_key”}]
错误消失了。我猜配置文件生成器有问题。对我来说不起作用--谢谢d.datul,这正是我所做的:-)而且一直有效到昨天。我开始怀疑我遇到错误的API键不是GoogleMaps,而是另一个,可能是云消息(尽管我没有使用云消息)。正如您在其他评论中所看到的,我使用Google Messaging API生成了一个新的JSON文件,但不起作用。Woot!对我来说是可行的。一个临时解决方案,但确实使我能够构建。看起来这些更新可能非常棘手,因为有这么多不同的依赖项和部分。要获取API_密钥,您可能需要将您的Google项目导入到firebase从下面的链接开始。从那里,你可以从那里创建一个google_services.json文件。@Nitrodbz你是对的,这是有效的。我只需要在添加它之后执行一个清理/重建,一个简单的构建是不够的。非常感谢!我应该把这个字符串放在哪里?你应该把它放在google-services.json中。在这里,你应该替换
“api_-key”:[]
(位于“客户端”)与
“api_-key”:[{“current_-key”:“}]
一起工作!!!我想知道您是否先添加数据库,问题是否会消失?
"api_key": [{ "current_key": "" }]
android {
.. .. ...
buildTypes {
debug {
resValue "string", "google_maps_api_key", "[YOUR DEV KEY]"
}
release {
resValue "string", "google_maps_api_key", "[YOUR PROD KEY]"
}
}
}
meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="@string/google_maps_api_key"/>