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

时间:2016-01-25 10:37:23

标签: android android-studio gradle google-analytics android-productflavors

上下文

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

当我选择Build Variant设置为applicationId的{​​{1}}(生成com.my.app.package.name时使用的包名称)时,它可以正常工作。但是,我的其他风格有不同的applicationIds。

我按照offical devguide进行设置。

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

  

错误:任务执行失败   ':应用程序:processAllcategoriesDebugfreeGoogleServices'。

     
    

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

  

错误消息说明:

applicationId上方的错误消息中的任务名称中,我的自定义DebugfreebuildType是我的Allcategories之一。

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

问题:

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

问题:

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

32 个答案:

答案 0 :(得分:243)

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 更改了我的包名称本地包名称

答案 1 :(得分:184)

发现这个:

  

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

答案 2 :(得分:59)

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

答案 3 :(得分:51)

我找到了解决方案:

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

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

答案 4 :(得分:37)

没有找到与包名'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必须相同。

答案 5 :(得分:29)

  

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

执行以下步骤。

1)。检查应用级applicationId文件中的gradle

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

3)。检查package文件中的AndroidManifest

并且为了完全确认,您的工作包目录名称​​即。(“com.example.app”)也是相同的。

答案 6 :(得分:28)

您需要将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

答案 7 :(得分:14)

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

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

答案 8 :(得分:14)

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

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

检查包是否与包名相同。我的情况有所不同,所以我改变了它并且有效。

答案 9 :(得分:12)

确保在重命名包

后重命名Gradle文件中的ApplicationId

答案 10 :(得分:11)

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

在文件android/app/build.gradle内搜索applicationIdandroiddefaultConfig

并确保该值与此

相同

client[0]client_info.android_client_info.package_name

作为google-services.json中的值。

答案 11 :(得分:8)

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

答案 12 :(得分:8)

您还需要在 google-services.json

中更改包名称

答案 13 :(得分:7)

首先,在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"
    }
  }

答案 14 :(得分:5)

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

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

希望这有帮助!

答案 15 :(得分: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与您的软件包名称相同。我的问题是这个,我这样解决了

答案 16 :(得分:4)

如果有人更改了他们现有的包名称,那么有时会出现这样的问题,因此您应该更改本地包名称、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 文件有多个包名,因此请全部更改

答案 17 :(得分:4)

如果它们对你们中的任何人都没有用,那么我的问题就是包名并不是以'开头的。 改变它,现在它有效。

希望有所帮助

答案 18 :(得分:3)

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

答案 19 :(得分:2)

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

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

App package name-> package" com.example.application.tracker";

答案 20 :(得分:2)

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

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

  • 添加您的应用程序包名称(在app中使用相同的pakage名称)

  • 当firebase将 google-services.json 文件下载时,粘贴文件放在您的应用文件夹中

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

    谢谢

答案 21 :(得分:2)

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

  

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

答案 22 :(得分:2)

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

答案 23 :(得分:1)

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

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

答案 24 :(得分:1)

当我更改应用程序的包名时,我也遇到了这个问题。

在你的android工作室项目中找到" google-services.json"文件。 打开它。 并检查您的应用程序的包名是否与此文件中的相同。

您在#34; google-services.json"中写的应用程序和程序包名称的程序包名称文件必须相同。

答案 25 :(得分:1)

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

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

答案 26 :(得分:0)

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

答案 27 :(得分:0)

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

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

答案 28 :(得分:0)

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

enter image description here

答案 29 :(得分:0)

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

答案 30 :(得分:-1)

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

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

答案 31 :(得分:-1)

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