Не знайдено відповідного клієнта для назви пакета (Google Analytics) - декілька продуктівFlavors & buildTypes [closed]


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
Ви знайшли сутін, особливо для свого третього запитання?
Мате

Я в подібних ситуаціях. Мені потрібна підтримка аналітики лише для однієї версії аромату-продукту. Я міг би обмежити додаткову залежність від prod-taste, але він все ще шукає правильний пакет у складі файлу son. Будь-яка пропозиція!
CoDe

1
Я також зіткнувся з тим же питанням. Повідомте мене, якщо хтось знайде рішення для цього?
Deepanshu Sinha

Відповіді:


381

Перевірте ім'я свого пакета на своєму 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 та знайдіть у своєму пакеті програм
Gastón Saillén

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 зазвичай розміщується у додатку / каталозі, але на версію 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 всередині модуля (що ділиться двома програмами) ... тому що я не можу навіть Gradle-синхронізувати, не маючи файл служби Google для цього пакету ... додаток для вбудовування повинен надавати json, але не модуль. чи все це можливо?
Георг

99

Не знайдено відповідного клієнта для імені пакета 'com.tf' Я майже впевнений, що "ім'я_пакету" в google-services.json не відповідає вашому "applicationId" в додатку gradle.

додаток 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
Автор запитував про вирішення цього питання. У них різні типи збірки з різним застосуваннямId
Дмитро Гусельников

ви дали найбільш прийнятне рішення. Кудо людина!
Деванш Садхотра

У 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 і натиснути його на додаток.
Едгар Хіміч

36

Потрібно помістити google-services.jsonв app/реж. І для кожного типу збірки повинен бути відповідний директор у app/srcпапці.

Наприклад, якщо у вас є реліз та налагодження:

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

У всіх файлах google-services.json слід вказати правильні package_name відповідно до типу збірки.

Наприклад, всередині dir-dir це має бути схожим {com.myapp}.debug


5
Мабуть, ви навіть можете просто дублювати елемент основного набору в "client"масиві s (додати кому між елементами) і змінити лише "package_name"нове значення нового елемента, щоб включити .debugсуфікс. Потім відбудуйте. Це працювало для мене на AS 2.3.3.
et_l

36

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

Нещодавно перейменований на ім'я пакета проекту?

Він оновлює всі класи, але не файл Gradle . Тому перевірте, чи правильно вказано ім'я вашого пакета у вашому Gradle, а також, можливо, також Manifest.


1
дякую, що це було корисно
Сірван Рахімі

32

Всякий раз , коли ви створюєте або оновлення package nameПереконайтеся , що ваше ім'я пакета точно так же [випадок Верхнього і нижніми питання випадку]

Зробіть нижче кроку.

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

2). Перевірте package_nameу своєму google-services.jsonфайлі,

3). Перевірте packageу своєму AndroidManifestфайлі

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


2
Дякую Бро, він працював на мене. У файлі Gradle на рівні програми мій пакет був іншим. Коли я змінив, він працював на мене
fazil

wel come @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.
Bojan Hrnkas

це шлях. +1, ось старе обговорення, яке стосується цього питання
lasec0203

Простий і прямий вперед.
Умаїр

20

перевірити , якщо client_idі package_nameв Google-services.json має правильне значення в відповідно до імені вашого пакета.

Ви повинні додати згаданий файл у каталог ароматів із відповідною назвою пакета у полі client_idта 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

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

Я думаю, ви додали файл json firebase "google-services" .json з новим файлом. Не забудьте створити новий файл. Перевірте посилання про те, як створити файл json з firebase, і він повинен відповідати імені вашого пакета

Друга річ, що якщо ви змінюєте назву пакета, використовуйте опцію "Замінити в шляху", коли клацніть правою кнопкою миші під файлами, коли ви виберете проект зі спадного меню. Ви повинні шукати назву пакета у всьому проекті та замінювати його!

Сподіваюся, це допомагає!


4

якщо жоден з них не працював для когось із вас, хлопці, моя проблема полягала в назві пакета, який не починався з "com". змінив його, тепер він працює.

сподівання, що допомагає


працював на мене, дякую
Hasan Shouman

4
android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.package.name"
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

переконайтесь, що applicationId Gradle.app однакова назва вашого пакета. моя проблема була в цьому, і я вирішив таким чином


3

перейдіть до каталогу проектів і створіть папки на шляху app / src, які назвали аромати вашого продукту (наприклад, Альфа, Бета, Магазин або те, що колись називається вашим ароматом). потім скопіюйте файл google-services.json у кожну папку. не забудьте змінити поле "ім'я_пакету" у файлі google-services.json для кожного аромату продукту, який ви розмістили в підпапках.


3

Перейдіть у файл google-services.json і в частині клієнта перевірте ім'я пакета та порівняйте його з назвою пакета програми, якщо вони різні, а потім змініть назву пакета клієнта відповідно до назви вашого пакета додатків, який він працював для мене найкраще.

google-services.json file-> "package_name": "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
Це замаскує проблему замість її вирішення. Дивіться інші відповіді на рішення.
Вадим Котов

Будь ласка, використовуйте код замість скріншота, у моєму випадку ваша відповідь хороша, оскільки я хочу створити лише «макет» клону програми.
користувач2078023

-1

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

Потім спробуйте підключитися до firebase від Android IDE студії. Ця процедура спрацювала для мене.


це не працює, якщо існує google-services.json. ми повинні видалити google-services.json, якщо він існує.
Діка

це спрацює один раз після того, як ви зміните ім'я пакета у файлі json і перед тим, як зберегти це, вам потрібно закрити андроїд-студію, а потім зберегти файл json та перезапустити студію.
Аніш Кумар

-1

Вирішити це досить просто: просто переконайтесь, що ім'я пакету у вашому файлі програми / build.gradle - це те саме ім’я пакету, що і те, що є у вашому файлі програми Manifest. і переконайтесь, що назва пакета правильна. Це має вирішити це

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.