找不到与包名称匹配的客户端(Google Analytics(分析))-多个productFlavors和buildTypes [关闭]


383

内容:

我正在尝试为我的应用设置Google Analytics(分析)。(具有4个自定义功能,buildTypes并且不止几个productFlavors

当我选择了它工作正常,Build Variant它具有applicationId设置为com.my.app.package.name(生成时使用的包名google-services.json)。但是,我的其他口味具有不同的applicationIds。

我按照官方的devguide进行了设置。

当选择了另一个构建变体Build Variants Tab(具有不同的applicationId(程序包名称)时,出现以下错误:

错误:任务':app:processAllcategoriesDebugfreeGoogleServices'的执行失败。

找不到与包名称'com.my.app.package.name.debug'匹配的客户端

错误消息说明:

在上面错误消息中的任务名称中,这Debugfree是我的自定义内容buildTypeAllcategories也是我的其中一项productFlavors

我理解该错误,并且知道包名称与生成json时使用的包名称不同,但这就是我试图解决的方法。

问题:

现在,这些google-services.json驻留在app文件夹中,因此我无法通过将它们放入特定于风味的源集文件夹中来针对每种产品风味将它们分开。

问题:

  1. byildType用于调试的自定义后缀.debugapplicationId(程序包名称)。有什么办法可以使它与google-services.json已发布的版本一起工作applicationId(即没有后缀.debug
  2. 有没有一种方法可以在同一google-services.json文件中配置多个产品风味,而无需使用单独的文件和任务将所需的文件复制到app文件夹。我知道这是可以做到用task作为中提到的这个帖子。是否有更简单的方法来基于gradle配置仅拥有一个文件或选择正确的文件?
  3. 我看到其中的package_name字段google-services.json具有包名称com.my.app.package.name。我可以手动添加多个软件包名称以适用于所有构建版本吗?如果是,该怎么做?在文档中找不到任何说明。

1
您是否找到了特别针对第三个问题的意见?
伴侣

我处于类似情况。我仅需要针对产品发布风味版本之一的分析支持。我可以将添加的依赖项限制为prod-flavor,但是它仍然在子文件中搜索正确的包。任何建议!
CoDe

1
我也面临着同样的问题,让我知道是否有人找到解决方案?
Deepanshu Sinha

Answers:


381

google-services.json中检查您的软件包名称 该名称应与您的应用的本地软件包名称相同

"client_info": {
    "mobilesdk_app_id": "1:6596814400689:android:65d6f25f5006145",
    "android_client_info": {
      "package_name": "com.my.app.package.name"
    }

在这种情况下,我的本地软件包名称是com.my.app.package.name,所以我也用本地软件包名称更改了google-services.json中的软件包名称


google-services.json是一个文件!!!在应用程序目录中。应该在Windows资源管理器的帮助下找到该文件(例如)。应该由通常的编辑器编辑此文件。
user_MGU

找到这里到Android Studio中项目视图和你的应用程序包内搜索
加斯顿Saillén

12
不,我们都知道google-services.json在此问题中是无效的...我们想要的是如何在构建变体情况下解决此问题!
MJ Studio

欢迎Yudi因果报应
穆罕默德·法希尔

如果您的活动位于子包中,例如:com.example.aaron.myproject22.Activities...。则需要进入google-services.json并将client_info的package_name更改为com.example.aaron.myproject22。您已在build.grade(模块应用)底部应用了插件:“ com.google.gms.google-services”
WHOATEMYNOODLES,2016年

224

发现了这一点:

google-services.json文件通常放置在app /目录中,但是自版本2.0.0-alpha3起,已为构建类型添加了对插件的支持,这将使以下目录结构有效:

app/src/
    main/google-services.json
    dogfood/google-services.json
    mytype1/google-services.json
    ...

资源

来源2


16
有什么方法可以轻松禁用构建类型的分析吗?我想禁用它以进行调试吗?我以为如果不添加google-services文件将被禁用,但是即使禁用,它仍然会要求提供google-services文件。
Gokhan Arik

2
每个josn文件在每种样式中添加的区别是什么?
Android

2
是否有可能在模块(两个应用共享)中使用Google服务...导致我什至在没有该包的Google服务文件的情况下也无法进行Gradle同步...嵌入应用应提供json,但不是模块。这有可能吗?
Georg

99

找不到与包名称'com.tf'匹配的客户端。 我很确定google-services.json中的“ package_name”与应用gradle中的“ applicationId”不匹配。

应用程式gradle:

defaultConfig {
        applicationId "com.tf" //replace with the package_name in google-services.json =
        minSdkVersion 23
        targetSdkVersion 26
        versionCode 7
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

google-services.json

"client_info": {
        "mobilesdk_app_id": "1:23978655351:android:2b2fece6b961cc70",
        "android_client_info": {
          "package_name": "in.ac.geu.debug"
        }
      },

解决方案:只需确保package_nameapplicationId必须相同。


4
作者在询问有关此问题的解决方法。他们具有不同的构建类型和不同的applicationId
Dmitry Guselnikov

您提供了最有效的解决方案。荣誉的人!
Devansh sadhotra,

application id在应用gradle这个钉它
BLACKPEARL

69

确保您在“ google-services.json”文件中的软件包名称与应用程序的软件包名称相同。


4
分叉新项目的回购时的常见问题。
Zapnologica

1
是,如果两个软件包名称都不相同或无法正常使用
-Priya,

63

我找到了解决方案:

我们必须在firebase项目中创建两个“应用程序”,然后才能从任何一个应用程序下载json文件(我是从调味应用程序下载的)。它将包含两个应用程序的数据。我们可以简单地将json文件复制到应用程序的根目录。

来源:https//firebase.googleblog.com/2016/08/organizing-your-firebase-enabled-android-app-builds.html


10
这是最好的答案,因为所有产品口味都可以被一个json文件覆盖。无需创建其他资源集。
Tash Pemhiwa'2

2
请注意,您必须在同一项目中创建应用程序。左上角的项目概述具有一个设置图标。按下它将打开“常规”选项卡,向下滚动,在“您的应用”部分下,有一个按钮“添加应用”
galaxigirl

当您忘记更改google-service.json并将其推送到产品时,将发生最大的问题。
Edgar Khimich

36

您需要google-services.json放入app/目录。对于每种构建类型,app/src文件夹中都应该有一致的主管 。

例如,如果您具有发布和调试功能:

app/google-services.json
app/src/debug/google-services.json

在所有google-services.json文件中,您应指定正确的 package_name根据构建类型。

例如,在debug dir中,它应该像 {com.myapp}.debug


5
显然,您甚至可以在"client"'数组中复制主集合的元素(在元素之间添加逗号),并仅更改"package_name"新元素的's值以包括.debug后缀。然后重建。它适用于AS 2.3.3。
et_l

36

当您在项目中下载了Google Services Json文件,且其Package name 与Project的package name不匹配时,就会发生此错误。

最近重命名了该项目的包名称?

它会更新所有类,不会更新Gradle File。因此,请检查您的Gradle中的包名是否正确,以及清单是否也正确。


1
谢谢你,这是有帮助的
Sirwan Rahimi 19/12/4

32

每当您创建或更新时,package name请确保您的软件包名称完全相同[大小写无关]

请执行以下步骤。

1)。applicationId入应用级别gradle文件,

2)。package_namegoogle-services.json文件,

3)。packageAndroidManifest文件

为了进行完整确认,请使您的工作包目录名称ie(“ com.example.app”)也相同。


2
感谢弟兄它为我工作。在应用级gradle这个文件我的包是不同的。当我改变它为我工作
法齐尔

欢迎来到@fazil
拉维·瓦尼亚

您无需更改package清单(以及所有软件包中的所有文件),因为applicationId会更改应用程序ID。
CoolMind

22

首先,在Gradle的应用程序包中添加一个后缀:

yourFlavor {
   applicationIdSuffix "yourFlavor"
}

这将导致您的包裹被命名

com.domain.yourapp.yourFlavor

然后转到当前项目下的Firebase,并使用此程序包名称向其添加另一个android应用。

然后将现有的google-services.json文件替换为您使用新应用生成的新文件。

然后,您将获得包含多个“ client_info”部分的内容。因此,您应该以如下形式结束:

"client_info": {
    "mobilesdk_app_id": "YOUR APP INFO",
    "android_client_info": {
      "package_name": "com.domain.yourapp"
    }
  }

"client_info": {
    "mobilesdk_app_id": "YOUR APP INFO - will be different then other app info",
    "android_client_info": {
      "package_name": "com.domain.yourapp.yourFlavor"
    }
  }

这是正确的答案!您需要在google-services.json文件中同时使用两个应用程序(id)。
Bojan Hrnkas '19

就是这样 +1,这是与此问题相关的旧讨论
lasec0203

简单直接。
Umair

20

检查client_idpackage_name谷歌,services.json根据你的包名有一个正确的值。

您应该将所提到的文件添加到flavors目录中,client_id并且在and package_name字段中具有相应的包名称。


20

1.验证软件包名称应用程序ID应该相同

2.验证google-services.json包名称,该名称可在应用程序文件夹中找到



17

打开您的Google-services.json文件,然后在文件中查找此部分:

"client": [
{
  "client_info": {
    "mobilesdk_app_id": "1:857242555489:android:46d8562d82407b11",
    "android_client_info": {
      "package_name": "com.example.duke_davis.project"
    }
  }

检查软件包是否与您的软件包名称相同。我的与众不同,因此我对其进行了更改,并且它起作用了。


工作:)谢谢
解决方案精神

11

我来自本地人,但我认为这也适用于这个问题。要指定。

在文件中android/app/build.gradle搜索applicationId(内androiddefaultConfig

并确保该值与此相同

client[0]client_info.android_client_info.package_name

作为内的价值google-services.json


我也是,这也是最适用的
杰森·塞布林



5

我认为您已在新文件中添加了Firebase json文件“ google-services” .json。确保创建一个新文件,检查有关如何从firebase创建json文件的链接,该链接应与您的软件包名称匹配

第二件事是,如果要更改程序包名称,则在从下拉菜单中选择项目时,在文件下单击鼠标右键时,请使用选项“在路径中替换”。您必须在整个项目中搜索包名称并替换它!

希望这可以帮助 !


4

如果没有一个适合你们,那么我的问题是软件包名称不是以'com'开头的。更改了它,现在可以使用了。

希望能有所帮助


为我工作,谢谢
Hasan Shouman '17

4
android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.package.name"
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

确保Gradle.app的applicationId与您的软件包名称相同。我的问题是这个,我这样解决了


3

转到您的项目目录,并在app / src路径上创建名为产品口味(例如Alpha,Beta,Store或口味名称)的文件夹。然后将您的google-services.json文件复制到每个文件夹。不要忘记更改子文件夹中每种产品口味的google-services.json文件上的“ package_name”字段。


3

转到google-services.json文件,然后在客户端部分检查程序包名称,如果它们与应用程序包名称不同,则将其与应用程序包名称进行比较,然后根据您的应用程序包名称更改客户端程序包名称,这对我来说很幸运。

google-services.json文件->“ package_name”:“ com.example.application.tracker”

应用包名称->包“ com.example.application.tracker”;


2

我通过制作两个资源集解决了这个问题,一个是免费的,一个是付费的。这两个文件夹都将包含必需的Java代码和资源文件,将根据特定风味的要求对其进行编辑。例如,您想从Java类和布局文件中删除付费中的AdMob代码。


2

我通过重新同步文件解决了相同的问题google-services.json

工具> Firebase>连接到Firebase>同步


你在哪做的 它到底能代替什么?屏幕截图?
Nasenbaer

您可以在Android Studio中执行此操作(必须启用Firebase插件)。它更新文件google-services.json
Nabin Bhandari

2

我解决了相同的问题,这里是一个简单的解决方案:创建Firebase连接时,请遵循以下准则:

  • 在Firebase中添加您的应用程序名称

  • 添加您的应用程序包装名称(写相同的包装名称,您正在应用中使用)

  • 当火力化妆谷歌,services.json文件只是下载它,并粘贴在你的app文件夹

  • 同步您的项目问题已解决:)

    谢谢


2

更改应用程序的程序包名称时,也会出现此问题。

在您的android studio项目中找到“ google-services.json”文件。打开它。并检查您的应用程序的软件包名称是否与此文件中的名称相同。

您的应用程序的软件包名称和写在“ google-services.json”文件中的软件包名称必须相同。


1

这意味着您的google-services.json文件不属于您的应用程序(您是否已为其他应用程序下载了google-services.json吗?)...因此,请执行以下操作:

1:登录Firebase并打开您的项目。2:单击设置图标,然后选择项目设置。3:在“您的应用”卡中,从列表中选择您需要配置文件的应用程序的软件包名称。4:点击google-services.json。 下载完成后,将新的google-services.json添加到您的项目根文件夹中,替换现有的..或仅删除旧的文件夹。为您的第一个项目下载google-services.json是非常正常的,然后假设或忘记此特定的google-services.json仅针对您当前的项目进行了量身定制,因为所有其他项目都具有唯一的包名称,因此没有别的选择。



1

您可以这样做来解决这个问题。

在此处输入图片说明


3
这将掩盖问题而不是解决问题。查看其他答案以获取解决方案。
Vadim Kotov

请使用代码而不是屏幕截图,因为我只想创建应用程序克隆的“模型”,所以您的回答对我而言是很好的。
user2078023

-1

很简单。从Android Studio注销,然后将其完全关闭。重新打开Android Studio,然后再次登录Android Studio。

然后尝试从Android Studio IDE连接到Firebase。这个程序对我有用。


如果google-services.json存在,则无法使用。我们必须删除google-services.json(如果存在)。
迪卡

在更改json文件中的程序包名称后,此操作也将起作用一次,并且在保存之前,您需要关闭android studio,然后保存json文件并重新启动Studio。
阿尼丝·库玛

-1

解决这个问题很简单:只需确保app / build.gradle文件中的软件包名称与App Manifest文件中的软件包名称相同即可。并确保软件包名称正确。那应该解决这个

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.