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

And*_*tel 324 android google-analytics gradle android-studio android-productflavors

语境:

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

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

我按照官方偏离进行设置.

选择任何其他构建变体时Build Variants Tab(我有一个不同的applicationId(包名)如下所示的错误如下:

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

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

错误消息的说明:

在上面的错误消息中的任务名称Debugfree是我的自定义buildType,Allcategories是我的一个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.我可以手动添加多个包名称以适用于所有构建变体吗?如果是的话,怎么做?在文档中找不到任何说明.

Muh*_*sil 316

google-services.json上查看您的包裹名称, 它应与您应用的本地包裹名称相同

"client_info": {
    "mobilesdk_app_id": "1:6596814400689:android:65d6f25f5006145",
    "android_client_info": {
      "package_name": "com.my.app.package.name"
    }
Run Code Online (Sandbox Code Playgroud)

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

  • 不...我们都知道google-services.json **在此问题中无效...我们想要的是如何在构建变体情况下解决此问题! (6认同)

And*_*tel 203

发现这个:

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

app/src/
    main/google-services.json
    dogfood/google-services.json
    mytype1/google-services.json
    ...
Run Code Online (Sandbox Code Playgroud)

资源

来源2

  • 有没有办法轻松地为构建类型禁用分析?我想为Debug禁用它?如果我不添加google-services文件,我认为它将被禁用,但即使我禁用,它仍然要求google-services文件. (12认同)
  • 每种味道中每个josn文件添加的差异是什么? (2认同)
  • 是否有可能在模块(两个应用共享)中使用Google服务...导致我什至在没有该包的Google服务文件的情况下也无法进行Gradle同步...嵌入应用应提供json,但不是模块。这有可能吗? (2认同)
  • 当我将“google-service.json”移动到名为“staging”的新文件夹时,出现此错误:“文件 google-services.json 丢失”。如果没有它,Google 服务插件就无法运行。``。我只需要 firebase 来进行分阶段,但这仍然不能解决问题:( (2认同)

小智 70

找不到包名称'com.tf'的匹配客户端 我非常确定google-services.json中的"package_name"与app gradle中的"applicationId"不匹配.

app 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"
    }
Run Code Online (Sandbox Code Playgroud)

谷歌,services.json

"client_info": {
        "mobilesdk_app_id": "1:23978655351:android:2b2fece6b961cc70",
        "android_client_info": {
          "package_name": "in.ac.geu.debug"
        }
      },
Run Code Online (Sandbox Code Playgroud)

解决方案:确保package_name并且applicationId必须相同.

  • 作者正在询问解决方法。他们有不同的构建类型和不同的 applicationId (12认同)
  • app gradle 中的“application id”解决了这个问题 (3认同)
  • 您已经给出了最有效的解决方案。值得称赞的人! (2认同)
  • 这是正确的答案。只需确保 package_name = applicationId 即可。就我而言,我创建了一个具有新名称 (A) 的新项目,并从名为 (B) 的旧项目中复制旧代码。在项目B中,package_name是我在firebase控制台上选择的名称,但这没关系,我们不需要与我们在SDK安装说明上设置的名称相匹配。 (2认同)

cah*_*yaz 67

确保"google-services.json"文件中的包名与您应用的包名相同.

  • 分叉新项目的回购时的常见问题。 (4认同)

Usm*_*man 60

我找到了解决方案:

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

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

  • 这是最佳答案,因为所有产品风格都可以由一个json文件覆盖.无需创建其他源集. (9认同)
  • 请注意,您必须在同一个项目中创建应用程序。左上角的项目概览有一个设置图标。按下它,它将打开常规选项卡,向下滚动,在您的应用程序部分下有一个按钮添加应用程序 (2认同)

Bog*_*yak 31

你需要google-services.json放入app/dir.对于每种构建类型,app/src文件夹中应该有一致的导演 .

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

app/google-services.json
app/src/debug/google-services.json
Run Code Online (Sandbox Code Playgroud)

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

例如,在debug dir里面应该是这样的 {com.myapp}.debug

  • 显然你甚至可以在``client'的数组中复制主集的元素(在元素之间添加一个逗号)并只更改新元素的``package_name'的值以包含`.debug `后缀.然后重建.它在AS 2.3.3上对我有用. (5认同)

Rav*_*iya 31

每当您创建或更新时package name确保您的包名称完全相同[大写和小写事项]

在下面步骤.

1).applicationId入应用级gradle文件,

2).检查package_name你的google-services.json文件,

3).检查package你的AndroidManifest文件

并且为了完全确认,使您的工作包目录名称("com.example.app")也相同.

  • 谢谢兄弟,它为我工作.在应用程序级gradle文件我的包是不同的.当我改变它为我工作 (2认同)

小智 17

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

"client": [
{
  "client_info": {
    "mobilesdk_app_id": "1:857242555489:android:46d8562d82407b11",
    "android_client_info": {
      "package_name": "com.example.duke_davis.project"
    }
  }
Run Code Online (Sandbox Code Playgroud)

检查包是否与包名相同.我是不同的,所以我改变它,它的工作.


Sha*_*ani 16

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

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


Ars*_*hah 15

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

  • 救了我.谢谢. (2认同)

Dro*_*ris 15

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

yourFlavor {
   applicationIdSuffix "yourFlavor"
}
Run Code Online (Sandbox Code Playgroud)

这将导致您的包被命名

com.domain.yourapp.yourFlavor
Run Code Online (Sandbox Code Playgroud)

然后转到当前项目下的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"
    }
  }
Run Code Online (Sandbox Code Playgroud)

  • 这应该被标记为关于构建变体的正确答案 (4认同)
  • 这是正确的答案!您需要 google-services.json 文件中的两个应用程序 (ids)。 (3认同)
  • 简单直接。 (2认同)

小智 13

只需两个简单的步骤即可更改包名称:

  1. 打开“build.gradle”文件 在此输入图像描述

  2. 然后在“applicationId”中添加新的包名称,然后单击“立即同步”项目。

在此输入图像描述

注意:如果您的“google-services.json”文件已添加到项目中,请在“client_info”内更改您的名称包名称

在此输入图像描述

“google-services.json”内的包名称

在此输入图像描述

就这样。无需在其他地方更改包名称。


Mic*_*551 12

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

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


Tho*_*ggi 11

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

在文件内android/app/build.gradle搜索applicationId(内android,defaultConfig)

并确保该值与此相同

client[0]client_info.android_client_info.package_name

作为内在的价值google-services.json.


dev*_*jay 10

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

最近重命名了该项目的包名称?它会更新所有类,不会更新Gradle File。因此,请检查您的Gradle中的包名是否正确,以及清单是否也正确。


小智 9

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


Joh*_*ngh 9

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

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


小智 8

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


小智 5

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

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

希望这可以帮助 !


小智 5

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

旧文件看起来像那样

"client": [
{
  "client_info": {
    "mobilesdk_app_id": "1:517104510151:android:8b7ed3989db24a6f928ae2",
    "android_client_info": {
      "package_name": "com.techsajib.oldapp"
    }
  },
Run Code Online (Sandbox Code Playgroud)

新文件看起来像这样

"client": [
{
  "client_info": {
    "mobilesdk_app_id": "1:517104510151:android:8b7ed3989db24a6f928ae2",
    "android_client_info": {
      "package_name": "com.techsajib.newapp"
    }
  },
Run Code Online (Sandbox Code Playgroud)

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