Не найдено подходящего клиента для имени пакета (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поиск applicationIdandroid, 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.