Не найдено подходящего клиента для имени пакета (Google Analytics) - несколько productFlavors & buildTypes [закрыто]


383

Контекст:

Я пытаюсь настроить Google Analytics для своего приложения. (имея 4 пользовательских buildTypesи более чем несколькоproductFlavors )

Он работает нормально, когда я выбираю для Build Variantкоторого applicationIdустановлено значение com.my.app.package.name(имя пакета, используемое при созданииgoogle-services.json ). Но другие мои ароматы имеют разные идентификаторы применения.

Я последовал за официальным инструктором, чтобы настроить его.

Ошибка, которую я получаю, когда выбран любой другой вариант сборки Build Variants Tab(который отличается applicationId(имя пакета)), выглядит следующим образом:

Ошибка: не удалось выполнить задачу ': app: processAllcategoriesDebugfreeGoogleServices'.

Не найдено подходящего клиента для имени пакета 'com.my.app.package.name.debug'

Объяснение сообщения об ошибке:

В названии задачи в сообщении об ошибке выше Debugfreeмой обычай buildTypeи Allcategoriesодин из моих productFlavors.

Я понимаю ошибку и знаю, что имя пакета отличается от того, которое я использовал при создании json, но это то, что я пытаюсь обойти.

Проблема:

Теперь они google-services.jsonнаходятся в appпапке, и, следовательно, я не могу выделить их для каждого продукта, поместив их в папку с исходным набором продуктов.

Вопросов:

  1. Мой кастом byildTypeдля отладки суффиксов .debugк applicationId(имя пакета). Есть ли способ, которым я могу заставить это работать с тем, у google-services.jsonкоторого есть мой выпуск applicationId(то есть без суффикса .debug)
  2. Есть ли способ настроить несколько вариантов продукта в одном google-services.jsonфайле, не используя отдельные файлы и задачи, чтобы скопировать нужный файл в appпапку. Я знаю, что это можно сделать, используя, taskкак указано в этом посте . Существует ли более простой способ иметь один файл или выбрать нужный файл в зависимости от конфигурации Gradle?
  3. Я вижу, что package_nameполе google-services.jsonимеет имя пакета com.my.app.package.name. Могу ли я добавить несколько имен пакетов вручную, чтобы работать для всех вариантов сборки? Если да, то как это сделать? Не удалось найти никаких инструкций в документации.

1
Вы нашли решение специально для вашего третьего вопроса?
— Mate

Я в похожих ситуациях. Мне нужна поддержка аналитики только для одной версии версии prod-release. Я мог бы ограничить добавленную зависимость для prod-flavor, но он все еще ищет нужный пакет как часть файла son. Любое предложение !
— Код

1
Я также сталкиваюсь с той же проблемой, дайте мне знать, если кто-нибудь найдет решение для этого?
— Дипаншу Синха

Ответы:


382

Проверьте название пакета в вашем 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 и
— выполните

12
Нет ... мы все знаем, что google-services.json недействителен в этом вопросе ... Что мы хотим, так это как решить эту проблему в ситуации варианта сборки !!
— MJ Studio

добро пожаловать Юди Карма
— Мухаммед Фасил

Если ваша деятельность находится в подпакете, например: com.example.aaron.myproject22.Activities .... вам нужно перейти в google-services.json и изменить имя_пакета client_info на com.example.aaron.myproject22. Также убедитесь, что у вас есть плагин: «com.google.gms.google-services» внизу build.grade (модуль)
— WHOATEMYNOODLES

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.
— Гохан Арик

2
Какая будет разница в каждом josn-файле, добавленном в каждый аромат ??
— Android

2
Есть ли возможность использовать службы Google внутри модуля (который совместно используется двумя приложениями) ... потому что я не могу даже синхронизировать данные без наличия файла службы Google для этого пакета ... приложение для встраивания должно предоставлять json, но не модуль. это так или иначе возможно?
— Георг

99

Не найдено подходящего клиента для имени пакета «com.tf». Я уверен, что «имя_пакета» в google-services.json не соответствует вашему «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_nameи applicationIdдолжно быть одинаковым.


4
Автор спрашивал об обходном пути к этому. У них разные типы сборки с разными applicationId
— Дмитрий Гусельников

Вы дали наиболее правильное решение. Слава человеку !!
— Деванш садхотра

В 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. Нет необходимости создавать другие исходники.
— Таш Пемхива

2
Обратите внимание, что вы должны создавать приложения внутри одного проекта. Обзор проекта в левом верхнем углу имеет значок настроек. Нажмите на нее, и она откроется на вкладке «Общие», прокрутите вниз и в разделе «Ваши приложения» есть кнопка «Добавить приложение»
— galaxigirl

Самая большая проблема произойдет, если вы забудете изменить свой google-service.json и отправите его в prod.
— Эдгар Химич

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"значение нового элемента, чтобы включить .debugсуффикс. Затем восстановите. У меня это работало на AS 2.3.3.
— et_l

36

Эта ошибка возникает, когда в ваш проект загружен файл Json Служб Google, имя пакета которого не совпадает с именем пакета вашего проекта .

Недавно переименовали название пакета проекта?

Он обновляет все классы, но не Gradle File . Так что проверьте правильность имени вашего пакета в вашем Gradle, а также, возможно, и Manifest.


1
спасибо, это было полезно
— Сирван Рахими

32

Всякий раз, когда вы создаете или обновляете, package nameубедитесь, что имя вашего пакета точно такое же (прописные и строчные буквы имеют значение)

Делай ниже шаг.

1). Проверьте applicationIdв gradleфайле уровня приложения ,

2). Проверьте package_nameв вашем google-services.jsonфайле,

3). Проверьте packageв вашем AndroidManifestфайле

и для полного подтверждения укажите имя каталога вашего рабочего пакета, т. е. ("com.example.app") также то же самое.


2
Спасибо, Бро, это сработало для меня. В файле gradle уровня приложения мой пакет был другим. Когда я изменил, он сработал для меня
— fazil

добро пожаловать @fazil
— Рави Вания

Вам не нужно менять packageманифест (и все файлы во всех пакетах), так как applicationIdизменится идентификатор приложения.
— 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.
— Боян Хрнкас

это способ. +1, вот старая дискуссия, которая относится к этому вопросу
— lasec0203

Просто и прямо.
— Умайр

20

проверьте, если client_idи package_nameв google-services.json указано правильное значение в соответствии с именем вашего пакета.

Вы должны добавить упомянутый файл в каталог flavors с соответствующим именем пакета в поле client_idand package_name.


20

1. Убедитесь, что имя пакета и идентификатор приложения должны совпадать

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

проверьте, совпадает ли пакет с именем вашего пакета. Мой был другим, поэтому я изменил его, и это сработало.


Работал :) Спасибо
— Solution Spirit

11

Я родом из Реакции, но думаю, что это относится и к этому вопросу. Указать.

В файле android/app/build.gradleпоиск applicationId(в android, defaultConfig)

и убедитесь, что это значение одинаково

client[0]client_info.android_client_info.package_name

как значение внутри google-services.json.


Я тоже, спасибо, это наиболее применимо
— Джейсон Себринг,


8

Если имя вашего пакета в файле Google-services.json в порядке, перейдите в файл gradle.properties. Затем измените свой APPLICATION_ID = "com.yourpackage.name"


5

Я думаю, что вы добавили FireBase JSON-файл "google-services" .json с новым файлом. Убедитесь, что для создания нового файла проверьте ссылку о том, как создать файл JSON из Firebase и он должен совпадать с именем вашего пакета

Во-вторых, если вы меняете имя пакета, используйте опцию «заменить в пути», когда вы щелкаете правой кнопкой мыши по файлам, когда выбираете проект из выпадающего списка. Вы должны найти имя пакета во всем проекте и заменить его!

Надеюсь это поможет !


4

если ни один из них не сработал для одного из вас, ребята, моя проблема заключалась в том, что имя пакета не начиналось с 'com'. поменял, теперь работает.

надеюсь, это поможет


работал на меня, спасибо
— Хасан Шуман

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 совпадает с именем вашего пакета. моя проблема была в этом, и я решил таким образом


3

Перейдите в каталог вашего проекта и создайте в каталоге app / src папки с именами вкусов вашего продукта (например, Alpha, Beta, Store или как их называют). затем скопируйте файл google-services.json в каждую папку. не забудьте изменить поле "имя_пакета" в файле google-services.json вашего продукта, который вы вложили.


3

Перейдите в файл google-services.json и в клиентской части проверьте имя пакета и сравните его с именем пакета приложения, если они отличаются, затем измените имя пакета клиента в соответствии с именем пакета приложения, которое мне сработало.

google-services.json file-> "имя_пакета": "com.example.application.tracker"

Имя пакета приложения-> пакет "com.example.application.tracker";


2

Я решил это, сделав два исходных кода, один бесплатный и один платный. Обе эти папки будут содержать необходимый код Java и файлы ресурсов, которые будут отредактированы в соответствии с требованиями конкретного варианта. Например, вы хотели бы удалить код AdMob в платной как из классов Java, так и из файлов макетов.


2

Я решил ту же проблему, повторно синхронизировав файл google-services.json.

Инструменты> Firebase> Подключиться к Firebase> Синхронизация


где ты это сделал? чем он точно заменяет? Скриншот?
— Nasenbaer

Вы можете сделать это в Android Studio (плагин Firebase должен быть включен). Обновляет файл google-services.json.
— Набин Бхандари

2

Я решил ту же проблему, вот простое решение: при создании соединения Firebase следуйте этим рекомендациям:

  • Добавьте имя вашего приложения в firebase

  • Добавьте имя пакета вашего приложения (напишите то же имя пакета, которое вы используете в приложении)

  • когда firebase создаст файл google-services.json, просто скачайте его и вставьте в папку своего приложения

  • Синхронизировать ваш проект Проблема решена :)

    Спасибо


2

Я также получаю эту проблему, когда я изменяю имя пакета моего приложения.

В вашем проекте студии android найдите файл "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

Проверьте это applicationIdSuffixв файле build.gradle вашего приложения. Посмотрите, соединяет ли он какой-либо текст с вашим applicationId. Если так, удалите это.


1

Вы можете сделать это для решения этой проблемы.

введите описание изображения здесь


3
Это замаскирует проблему, а не решит ее. Смотрите другие ответы для решения.
— Вадим Котов

Пожалуйста, используйте код вместо скриншота, ваш ответ в моем случае хорош, потому что я хочу создать только «макет» клона приложения.
— user2078023

-1

Просто. Выйдите из Android Studio, закройте его полностью. Откройте Android-студию и снова войдите в Android-студию.

Затем попробуйте подключиться к firebase из IDE студии Android. Эта процедура сработала для меня.


это не работает, если существует google-services.json. мы должны удалить google-services.json, если он существует.
— Дика

это сработает один раз после того, как вы измените имя пакета в файле json, а перед тем, как сохранить его, вам нужно закрыть студию android, а затем сохранить файл json и перезапустить студию.
— Аниш Кумар

-1

Это легко решить: убедитесь, что имя пакета в вашем файле app / build.gradle совпадает с именем пакета в файле манифеста приложения. и убедитесь, что имя пакета указано правильно. Это должно решить это

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.