ChatGPT解决这个技术问题 Extra ChatGPT

找不到与包名称匹配的客户端 (Google Analytics) - 多个 productFlavors & buildTypes

语境:

我正在尝试为我的应用设置 Google Analytics。 (有 4 个自定义 buildTypes 和多个 productFlavors

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

我按照 offical devguide 进行设置。

Build Variants Tab(具有不同的 applicationId(包名称))中选择任何其他构建变体时,我得到的错误如下:

错误:任务“:app:processAllcategoriesDebugfreeGoogleServices”执行失败。找不到与包名称“com.my.app.package.name.debug”匹配的客户端

错误信息说明:

在上面的错误消息中的任务名称中,Debugfree 是我的自定义 buildType,而 Allcategories 是我的 productFlavors 之一。

我理解错误并且知道包名称与我在生成 json 时使用的名称不同,但这就是我想要解决的问题。

问题:

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

问题:

我的自定义 byildType 用于调试后缀 .debug 到 applicationId(包名称)。有没有办法让它与具有我的发布 applicationId 的 google-services.json 一起工作(即没有后缀 .debug)有没有办法在同一个 google-services.json 文件中配置多个产品风格而不使用单独的文件和任务将所需的文件复制到 app 文件夹。我知道可以使用本文中提到的任务来完成。有没有一种更简单的方法来只拥有一个文件或根据 gradle 配置选择正确的文件?我看到 google-services.json 中的 package_name 字段具有包名称 com.my.app.package.name。我可以手动添加多个包名称以适用于所有构建变体吗?如果是,该怎么做?在文档中找不到任何说明。

您是否特别针对第三个问题找到了解决方案?
我也有类似的情况。我只需要对产品发布风味版本之一的分析支持。我可以 limit added dependency 到 prod-flavour 但它仍然会搜索正确的包作为子文件的一部分。任何建议!
我也遇到了同样的问题,请问有没有人解决这个问题?
就我而言,我只是更改了包名
如果您在应用程序中使用 Firebase,则将您的新应用程序 ID 添加为子应用程序(添加应用程序)问题将得到解决

M
Muhammed Fasil

检查您的 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 Explorer 的帮助下找到这个文件(例如)。应该由通常的编辑器编辑这个文件。
要找到它,请转到 Android Studio 中的项目视图并在您的应用程序包中搜索
不......我们都知道google-services.json在这个问题上是无效的......我们想要的是如何在构建变体情况下解决这个问题!
如果您的活动位于子包中,例如:com.example.aaron.myproject22.Activities.... 您需要进入 google-services.json 并将 client_info 的 package_name 更改为 com.example.aaron.myproject22 还要确保您在 build.grade (模块应用程序)的底部应用了 plugin:'com.google.gms.google-services'
谢谢它为我工作@WHOATEMYNOODLES
C
ChrisF

发现这个:

google-services.json 文件通常放在 app/ 目录中,但从 2.0.0-alpha3 版本开始,为构建类型添加了插件支持,这将使以下目录结构有效:app/src/main/ google-services.json dogfood/google-services.json mytype1/google-services.json ...

Source

Source 2


有什么方法可以轻松禁用构建类型的分析?我想为调试禁用它?我认为如果我不添加 google-services 文件它将被禁用,但即使我禁用它,它仍然会要求提供 google-services 文件。
每个风味中添加的每个 josn 文件有什么区别?
是否有可能在模块内使用谷歌服务(两个应用程序共享)......因为我什至无法在没有该包的谷歌服务文件的情况下进行 gradle-sync ......嵌入应用程序应该提供 json,但是不是模块。这有可能吗?
当我将 google-service.json 移动到名为 staging 的新文件夹时,我收到此错误:File google-services.json is missing. The Google Services Plugin cannot function without it. 。我只需要用于分期的firebase,仍然 - 这并不能解决问题:(
u
user5854648

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

应用等级:

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"
    }

谷歌服务.json

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

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


作者正在询问解决方法。他们有不同的构建类型和不同的 applicationId
你已经给出了最有效的解决方案。致敬男人!!
应用 gradle 中的 application id 做到了
这是正确的答案。只需确保 package_name = applicationId。就我而言,我创建了一个具有新名称 (A) 的新项目,并从名为 (B) 的旧项目中复制旧代码。在项目 B 中,package_name 是我在 firebase 控制台上选择的名称,但没关系,我们不需要匹配我们在 SDK 安装说明中设置的名称。
U
Usman

我找到了解决方案:

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

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


这是最好的答案,因为一个 json 文件可以涵盖所有产品风格。无需创建其他源集。
请注意,您必须在同一个项目中创建应用程序。左上角的项目概览有一个设置图标。按下它,它将打开常规选项卡,向下滚动并在您的应用程序部分下有一个按钮添加应用程序
当您忘记更改 google-service.json 并将其推送到 prod 时,将会发生最大的问题。
c
cahit beyaz

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


为新项目分叉回购时的常见问题。
是的,如果两个包名称不同,则它不起作用
R
Ravi Vaniya

每当您创建或更新包名称时,请确保您的包名称完全相同 [大写和小写都很重要]

执行以下步骤。

1). 在应用级 gradle 文件中检查 applicationId

2). 在您的 google-services.json 文件中检查 package_name

3). 在您的 AndroidManifest 文件中检查 package

为了完全确认,请确保您的工作包目录名称 ie("com.example.app") 也是相同的。

编辑 [任何在 productFlavour 场景中遇到此问题的人,请查看 Droid Chris 的解决方案]


谢谢兄弟,它对我有用。在应用程序级别的 gradle 文件中,我的包不同。当我改变它对我有用
欢迎来到@fazil
您不必更改清单中的 package(以及所有包中的所有文件),因为 applicationId 将更改应用程序 ID。
这不是作者要问的
d
devDeejay

当您在项目中下载的 Google Services Json 文件的包名称与您的项目的包名称不匹配时,会发生此错误。

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

它确实更新了所有类,但不更新 Gradle 文件。所以检查你的包名在你的 Gradle 中是否正确,也可能是 Manifest。


D
Droid Chris

首先,在 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)。
这就是方法。 +1,这里有一些与此问题相关的old discussion
简单直接。
这应该被标记为关于构建变体的正确答案
即使我在这里回答了这个问题 [stackoverflow.com/a/50906585/4696610],但对于 productFlavour 场景,这是最好的解决方案,我一定会将您的答案链接到我的答案中以帮助未来的开发人员,谢谢 +1
י
ישו אוהב אותך

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

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

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

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

例如,在调试目录中它应该像 {com.myapp}.debug


显然,您甚至可以在 "client" 的数组中复制主集的元素(在元素之间添加一个逗号)并仅更改新元素的 "package_name" 的值以包含 .debug 后缀。然后重建。它在 AS 2.3.3 上对我有用。
J
John Ruban Singh

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

2.验证app文件夹中的google-services.json包名


我也必须 Invalidate Caches / Restart... 才能使其正常工作。
S
Shayan Amani

根据您的软件包名称检查 google-services.json 中的 client_idpackage_name 是否具有正确的值。

您应该将提到的文件添加到风味目录中,并在 client_idpackage_name 字段中使用相应的包名称。


M
Michal Zhradnk Nono3551

就我而言,我忘记了应用程序根目录中的 google-services.json ,这是为了不同的风格。默认情况下使用它,而不是使用存储在风味文件夹中的 json。这个搞砸了插件,因为包名不匹配它失败了。

我教的智慧,当出现这个问题时,检查你的项目结构中的所有 google-services.json。


S
Syed Arsalan Shah

重命名包后,确保在 gradle 文件中重命名 ApplicationId


救了我。谢谢。
很高兴它帮助了某人
也解决了我的问题!
P
Pang

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

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

检查包是否与您的包名相同。我的不一样,所以我改变了它并且它起作用了。


工作:)谢谢
P
Papel

如果有人更改了他们现有的包名,那么有时会出现这样的问题,所以你应该更改本地包名、build.gradle 文件包名,如果你的项目有任何 google-services.json 文件,那么你只需要更改 JSON 文件包名也是。

旧文件看起来像这样

"client": [
{
  "client_info": {
    "mobilesdk_app_id": "1:517104510151:android:8b7ed3989db24a6f928ae2",
    "android_client_info": {
      "package_name": "com.techsajib.oldapp"
    }
  },

新文件看起来像这样

"client": [
{
  "client_info": {
    "mobilesdk_app_id": "1:517104510151:android:8b7ed3989db24a6f928ae2",
    "android_client_info": {
      "package_name": "com.techsajib.newapp"
    }
  },

注意:有时 JSON 文件有多个包名,因此请全部更改


T
ThomasReggi

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

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

并确保该值与此相同

client[0]client_info.android_client_info.package_name

作为 google-services.json 内的值。


S
Syed Hussain Mehdi

您还需要更改 google-services.json 中的包名称


D
Dulal Kisku

如果您在 Google-services.json 文件中的包名没有问题,请转到 gradle.properties 文件。然后更改您的 APPLICATION_ID="com.yourpackage.name"


A
Ashok Kumar K R

我认为您已在新文件中添加了 firebase json 文件“google-services”.json。确保创建一个新文件 check the link on how to create json file from firebase,它应该与您的包名称匹配

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

希望这可以帮助 !


e
eiran

如果这对你们中的任何一个都不起作用,那么我的问题是一个不以“com”开头的包名。改变了它,现在它可以工作了。

希望有帮助


N
Nabin Bhandari

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

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


你在哪里做的?它究竟取代了什么?截屏?
您可以在 Android Studio 中执行此操作(必须启用 Firebase 插件)。它更新文件 google-services.json
O
Osman Yalın

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


S
Shah Rukh

转到 google-services.json 文件并在客户端部分检查包名称并将其与应用包名称进行比较(如果它们不同),然后根据您的应用包名称更改客户端包名称,祝我好运..

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

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


D
Desdenova
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 与您的包名称相同。我的问题是这个,我用这种方式解决了


A
Abhiroj Panwar

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


C
Chaudhary Nouman

我在这里解决了同样的问题是简单的解决方案:当您创建 firebase 连接时,请遵循以下准则:

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

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

当 firebase 制作 google-services.json 文件时,只需下载它并将其粘贴到您的应用程序文件夹中

同步你的项目问题解决了:)谢谢


m
mehmoodnisar125

当我更改应用程序的包名称时,我也会遇到此问题。

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

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


指尖上的Android

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

https://i.stack.imgur.com/gg07q.png


这将掩盖问题而不是解决问题。请参阅其他答案以获取解决方案。
请使用代码而不是屏幕截图,您的回答对我来说很好,因为我只想创建应用程序克隆的“模型”。
共享代码而不是屏幕截图会更有用。
R
RileyManda

这意味着您的 google-services.json 文件不属于您的应用程序(您是否为另一个应用程序下载了 google-services.json?)...所以要解决此问题,请执行以下操作:

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


S
Syed Arsalan Kazmi

在应用的 build.gradle 文件中检查 applicationIdSuffix。查看它是否将任何文本连接到您的 applicationId。如果是这样,请将其删除。