Tidak ada klien yang cocok dengan nama paket (Google Analytics) - beberapa productFlavours & buildTypes [ditutup]

383

Konteks:

Saya mencoba menyiapkan Google Analytics untuk aplikasi saya. (memiliki 4 kebiasaan buildTypesdan lebih dari beberapa productFlavors)

Ini berfungsi dengan baik ketika saya memilih Build Variantyang memiliki applicationIdset ke com.my.app.package.name(nama paket yang digunakan saat membuat google-services.json). Tapi, rasa saya yang lain memiliki applicationIds yang berbeda.

Saya mengikuti devguide resmi untuk mengaturnya.

Kesalahan yang saya dapatkan saat varian build lain dipilih Build Variants Tab(yang memiliki applicationId(nama paket) berbeda adalah sebagai berikut:

Kesalahan: Eksekusi gagal untuk tugas ': aplikasi: processAllcategoriesDebugfreeGoogleServices'.

Tidak ditemukan klien yang cocok untuk nama paket 'com.my.app.package.name.debug'

Penjelasan Pesan Kesalahan:

Dalam tugas nama dalam pesan kesalahan di atas Debugfreeadalah kebiasaan saya buildTypedan Allcategoriesmerupakan salah satu dari saya productFlavors.

Saya mengerti kesalahan dan tahu nama paket berbeda dari apa yang saya gunakan saat membuat json, tapi itulah yang saya coba cari jalan keluar.

Masalah:

Sekarang, google-services.jsonberada di appfolder dan karenanya saya tidak dapat memisahkan mereka untuk setiap rasa produk dengan menjatuhkan mereka di folder set sumber rasa khusus.

Pertanyaan:

  1. Kustom saya byildTypeuntuk debugging sufiks .debugke applicationId(nama paket). Apakah ada cara saya dapat membuatnya bekerja dengan google-services.jsonyang memiliki rilis saya applicationId(yaitu tanpa akhiran .debug)
  2. Apakah ada cara untuk mengkonfigurasi beberapa rasa produk dalam google-services.jsonfile yang sama tanpa menggunakan file dan tugas terpisah untuk menyalin file yang diperlukan ke appfolder. Saya tahu itu bisa dilakukan menggunakan taskseperti yang disebutkan dalam posting ini . Apakah ada cara yang lebih sederhana untuk hanya memiliki satu file atau memilih file yang tepat berdasarkan konfigurasi gradle?
  3. Saya melihat package_namebidang dalam google-services.jsonmemiliki nama paket com.my.app.package.name. Bisakah saya menambahkan beberapa nama paket secara manual agar berfungsi untuk semua varian versi? Jika ya, bagaimana cara melakukannya? Tidak dapat menemukan petunjuk dalam dokumentasi.
AndroidMechanic - Viral Patel
sumber
1
Apakah Anda menemukan soution khusus untuk pertanyaan ketiga Anda?
Mate
Saya dalam situasi yang sama. Saya memerlukan dukungan analitik untuk salah satu versi rasa prod-release saja. Saya dapat membatasi ketergantungan yang ditambahkan pada rasa, tetapi masih mencari paket yang tepat sebagai bagian dari file anak. Ada saran !
CoDe
1
Saya juga menghadapi masalah yang sama, Beritahu saya jika ada yang menemukan solusi untuk ini?
Deepanshu Sinha

Jawaban:

382

Periksa nama paket Anda di google-services.json Anda harus sama dengan nama paket lokal aplikasi Anda

Contoh

"client_info": {
    "mobilesdk_app_id": "1:6596814400689:android:65d6f25f5006145",
    "android_client_info": {
      "package_name": "com.my.app.package.name"
    }

Dalam hal ini nama paket lokal saya adalah com.my.app.package.name demikian juga saya telah mengubah nama paket saya di google-services.json dengan nama paket lokal saya

Muhamad Fasil
sumber
google-services.json adalah file !!! dalam direktori aplikasi. Harus menemukan file ini dengan bantuan Windows Explorer (misalnya). Harus mengedit file ini oleh editor yang biasa.
user_MGU
untuk menemukan ini, buka Project view di Android Studio dan cari di dalam paket aplikasi Anda
Gastón Saillén
12
Tidak ... kita semua tahu google-services.json tidak valid dalam masalah ini ... Apa yang kita inginkan adalah bagaimana menyelesaikan masalah ini dalam membangun situasi varian !!
MJ Studio
selamat datang Yudi karma
Muhammed Fasil
Jika aktivitas Anda berada dalam subpackage seperti: com.example.aaron.myproject22.Activities .... Anda harus masuk ke google-services.json dan mengubah package_ame client_info menjadi com.example.aaron.myproject22 Juga pastikan Anda telah menerapkan plugin: 'com.google.gms.google-services' di bagian bawah build.grade (aplikasi Modul)
WHOATEMYNOODLES
224

Menemukan ini:

File google-services.json umumnya ditempatkan di app / direktori, tetapi pada versi 2.0.0-alpha3 dukungan plugin ditambahkan untuk tipe build , yang akan membuat struktur direktori berikut ini valid:

app/src/
    main/google-services.json
    dogfood/google-services.json
    mytype1/google-services.json
    ...

Sumber

Sumber 2

AndroidMechanic - Viral Patel
sumber
16
Apakah ada cara untuk menonaktifkan analitik dengan mudah untuk tipe build? Saya ingin menonaktifkannya untuk Debug? Saya pikir itu akan dinonaktifkan jika saya tidak menambahkan file layanan Google, tetapi bahkan jika saya menonaktifkan, masih meminta file layanan Google.
Gokhan Arik
2
Apa perbedaan masing-masing file Joseph yang ditambahkan dalam setiap rasa ??
Android
2
Apakah ada kemungkinan untuk menggunakan layanan google di dalam sebuah modul (yang dibagikan oleh dua aplikasi) ... karena saya bahkan tidak dapat menyelaraskan sinkronisasi tanpa memiliki file layanan google untuk paket itu ... aplikasi embedding harus menyediakan json, tetapi bukan modul. apakah ini mungkin?
Georg
99

Tidak ada klien yang cocok dengan nama paket 'com.tf' Saya cukup yakin bahwa "package_name" di google-services.json tidak cocok dengan "applicationId" Anda di app gradle.

tingkat aplikasi:

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

Solusi : Pastikan saja package_namedan applicationIdharus sama.

Kailash Karki
sumber
4
Penulis bertanya tentang solusi untuk ini. Mereka memiliki tipe build yang berbeda dengan applicationId yang berbeda
Dmitry Guselnikov
Anda telah memberikan solusi yang paling valid. Kudos man !!
Devansh sadhotra
The application iddi app Gradle dipaku itu
Blackpearl
69

pastikan nama paket Anda di file "google-services.json" sama dengan nama paket aplikasi Anda.

cahit beyaz
sumber
4
masalah umum ketika forking repo untuk proyek baru.
Zapnologica
1
ya jika kedua nama paket tidak sama daripada tidak berfungsi
Priya
63

Saya telah menemukan solusinya:

Kita harus membuat dua "aplikasi" di proyek firebase, dan kemudian kita dapat mengunduh file json dari satu aplikasi apa pun (saya mengunduh dari aplikasi yang diberi rasa). Ini akan berisi data untuk kedua aplikasi. Kami cukup menyalin file json ke direktori root aplikasi.

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

Usman
sumber
10
Ini adalah jawaban terbaik karena semua rasa produk dapat dicakup oleh satu file json. Tidak perlu membuat sumber lain.
Tash Pemhiwa
2
Harap dicatat, Anda harus membuat aplikasi di dalam proyek yang sama. Tinjauan Proyek di sudut kiri atas memiliki ikon pengaturan. Tekan dan itu akan terbuka ke tab General, gulir ke bawah dan di bawah bagian Aplikasi Anda ada tombol Tambah Aplikasi
galaxigirl
Masalah terbesar akan terjadi ketika Anda lupa mengubah google-service.json dan mendorongnya ke prod.
Edgar Khimich
36

Anda perlu menempatkan google-services.jsonke app/dir. Dan untuk setiap tipe build, harus ada director yang sesuai di app/srcfolder.

Misalnya, jika Anda memiliki rilis dan debug:

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

Di semua file google-services.json Anda harus menentukan yang benar package_namesesuai dengan tipe build.

Misalnya, di dalam direktori debug harus seperti {com.myapp}.debug

Bogdan Ustyak
sumber
5
Tampaknya Anda bahkan dapat menduplikasi elemen set utama "client"di array (tambahkan koma di antara elemen) dan ubah hanya "package_name"nilai elemen baru untuk menyertakan .debugakhiran. Kemudian bangun kembali. Ini bekerja untuk saya di AS 2.3.3.
et_l
36

Kesalahan ini terjadi ketika Anda memiliki file Google Services Json yang diunduh di proyek Anda yang nama paketnya tidak cocok dengan nama paket proyek Anda .

Baru-baru ini berganti nama menjadi nama paket proyek?

Itu memperbarui semua kelas tetapi bukan File Gradle . Jadi periksa apakah nama paket Anda benar di Gradle Anda, dan mungkin Manifest juga.

devDeejay
sumber
1
terima kasih itu membantu
Sirwan Rahimi
32

Setiap kali Anda membuat atau memperbarui, package namepastikan nama paket Anda persis sama [Huruf besar dan huruf kecil]

Lakukan langkah di bawah ini.

1). Periksa applicationIddi gradlefile tingkat Aplikasi ,

2). Periksa package_namedi google-services.jsonfile Anda ,

3). Periksa packagedi AndroidManifestfile Anda

dan untuk konfirmasi penuh buat nama direktori paket kerja Anda yaitu ("com.example.app") juga sama.

Ravi Vaniya
sumber
2
Terima kasih, Bro bekerja untuk saya. Pada tingkat aplikasi file tingkat paket saya berbeda. Ketika saya mengubahnya berfungsi untuk saya
fazil
selamat datang @fazil
Ravi Vaniya
Anda tidak perlu mengubah packagemanifes (dan semua file di semua paket), karena applicationIdakan mengubah id aplikasi.
CoolMind
22

Pertama, tambahkan akhiran ke paket aplikasi di Gradle:

yourFlavor {
   applicationIdSuffix "yourFlavor"
}

Ini akan menyebabkan paket Anda dinamai

com.domain.yourapp.yourFlavor

Lalu buka Firebase di bawah proyek Anda saat ini dan tambahkan aplikasi android lain dengan nama paket ini.

Kemudian ganti file google-services.json yang ada dengan yang baru yang Anda hasilkan dengan aplikasi baru di dalamnya.

Maka Anda akan berakhir dengan sesuatu yang memiliki beberapa bagian "client_info". Jadi Anda harus berakhir dengan sesuatu seperti ini:

"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"
    }
  }
Droid Chris
sumber
Ini adalah jawaban yang benar! Anda memerlukan kedua Aplikasi (id) di file google-services.json.
Bojan Hrnkas
ini caranya. +1, inilah beberapa diskusi lama yang terkait dengan masalah ini
lasec0203
Sederhana dan lurus ke depan.
Umair
20

periksa apakah client_iddan package_namedi google-services.json memiliki nilai yang benar sesuai dengan nama paket Anda.

Anda harus menambahkan file yang disebutkan ke direktori rasa dengan nama paket yang sesuai di bidang client_iddan package_name.

Shayan Amani
sumber
20

1. Verifikasi nama Paket dan ID Aplikasi harus sama

2. Verifikasikan nama paket google-services.json yang tersedia di folder aplikasi

John Ruban Singh
sumber
18

Pastikan Anda mengganti nama ApplicationId dalam file gradle setelah mengganti nama paket Anda

Arsalan Shah
sumber
2
Menyelamatkan saya. Terima kasih.
VipulKumar
senang itu membantu seseorang
Arsalan Shah
1
Terima kasih! yang memecahkan masalah saya.
Riddhi
Memecahkan masalah saya juga!
Kanagalingam
17

Buka file Google-services.json Anda dan cari bagian ini di file:

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

periksa apakah paket itu sama dengan nama paket Anda. Punyaku berbeda, jadi aku mengubahnya dan berhasil.

DAVIS BENNY 15MIS0426
sumber
Bekerja :) Terima kasih
Solution Spirit
11

Saya datang dari reaksi asli tetapi saya pikir ini berlaku untuk pertanyaan ini juga. Untuk menentukan.

Dalam android/app/build.gradlepencarian file untuk applicationId(dalam android, defaultConfig)

dan memastikan bahwa nilainya sama dengan ini

client[0]client_info.android_client_info.package_name

sebagai nilai di dalamnya google-services.json.

ThomasReggi
sumber
Saya juga, terima kasih ini yang paling berlaku
Jason Sebring
9

Anda juga perlu mengubah nama paket di google-services.json

SH Mehdi
sumber
8

Jika nama paket Anda pada file Google-services.json tidak apa-apa, Buka file gradle.properties. Kemudian ubah APPLICATION_ID = "com.yourpackage.name" Anda

Dulal Kisku
sumber
5

Saya pikir Anda telah menambahkan file json firebase "google-services" .json dengan file baru. Pastikan untuk membuat file baru periksa tautan tentang cara membuat file json dari firebase dan itu harus sesuai dengan nama paket Anda

Hal kedua adalah bahwa jika Anda mengubah nama paket gunakan opsi "ganti di jalur" ketika Anda mengklik kanan di bawah file ketika Anda memilih proyek dari drop down. Anda harus mencari nama paket di seluruh proyek dan menggantinya!

Semoga ini membantu !

Ashok Kumar KR
sumber
4

jika tidak ada yang berhasil untuk salah satu dari kalian, masalah saya adalah dengan nama paket yang tidak dimulai dengan 'com'. mengubahnya, sekarang berfungsi.

berharap itu bisa membantu

Eiran
sumber
bekerja untuk saya, terima kasih
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"
    }

pastikan applicationId Gradle.app sama dengan nama paket Anda. masalah saya adalah ini dan saya menyelesaikannya dengan cara ini

Bayar Şahintekin
sumber
3

buka direktori proyek Anda dan buat folder di jalur app / src yang menamai rasa produk Anda (seperti Alpha, Beta, Store atau apa pun nama rasanya). lalu salin file google-services.json Anda ke setiap folder. jangan lupa untuk mengubah bidang "package_name" pada file google-services.json setiap rasa produk Anda yang Anda subfolder.

Osman Yalın
sumber
3

Buka file google-services.json dan di bagian klien periksa nama paket dan bandingkan dengan nama paket Aplikasi jika berbeda maka ubah nama paket klien sesuai dengan nama paket aplikasi Anda.

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

Nama paket aplikasi-> paket "com.example.application.tracker";

Shah Rukh
sumber
2

Saya menyelesaikannya dengan membuat dua sumber, satu gratis dan satu dibayar. Kedua folder ini akan berisi kode java dan file sumber daya yang diperlukan, yang akan diedit dengan persyaratan rasa tertentu. Misalnya, Anda ingin menghapus Kode AdMob di Paid baik dari Java Classes dan Layout Files.

Abhiroj Panwar
sumber
2

Saya memecahkan masalah yang sama dengan menyinkronkan kembali file google-services.json.

Alat> Firebase> Sambungkan ke Firebase> Sinkronisasi

Nabin Bhandari
sumber
dimana kamu melakukan itu apa yang sebenarnya diganti? Tangkapan layar?
Nasenbaer
Anda dapat melakukannya di Android Studio (plugin Firebase harus diaktifkan). Itu memperbarui file google-services.json.
Nabin Bhandari
2

Saya memecahkan masalah yang sama di sini adalah solusi sederhana: ketika Anda membuat koneksi firebase ikuti panduan ini:

  • Tambahkan nama aplikasi Anda di firebase

  • Tambahkan nama pakage aplikasi Anda (tulis nama pakage yang sama, yang Anda gunakan di aplikasi)

  • ketika firebase membuat file google-services.json cukup unduh dan tempel di folder aplikasi Anda

  • Sinkronkan proyek Anda Masalah sudah dipecahkan :)

    Terima kasih

Chaudhary Nouman
sumber
2

Saya juga mendapatkan masalah ini ketika saya mengubah nama paket aplikasi saya.

Di proyek studio android Anda, temukan file "google-services.json". Buka. dan periksa apakah nama paket aplikasi Anda sama dengan yang tertulis dalam file ini.

Nama paket aplikasi Anda dan nama paket yang ditulis dalam file "google-services.json" harus sama.

mehmoodnisar125
sumber
1

Ini berarti file google-services.json Anda juga bukan milik aplikasi Anda (Apakah Anda mengunduh google-services.json untuk aplikasi lain?) ... jadi untuk menyelesaikannya lakukan hal berikut:

1: Masuk ke Firebase dan buka proyek Anda. 2: Klik ikon Pengaturan dan pilih Pengaturan proyek. 3: Di kartu Aplikasi Anda, pilih nama paket aplikasi yang Anda perlukan untuk file konfigurasi dari daftar. 4: Klik google-services.json. Setelah unduhan selesai, tambahkan google-services.json baru ke folder root proyek Anda, ganti yang sudah ada..atau hapus saja yang lama. Sangat normal untuk mengunduh google-services.json untuk proyek pertama Anda dan kemudian menganggap atau melupakan bahwa google-services.json khusus ini dirancang untuk proyek Anda saat ini saja, karena tidak ada yang lain karena semua proyek memiliki nama paket yang unik.

RileyManda
sumber
1

Periksa applicationIdSuffixfile build.gradle aplikasi Anda. Lihat apakah itu menggabungkan teks apa pun dengan Anda applicationId. Jika demikian, hapus.

Arsalan Shah
sumber
1

Anda dapat melakukannya untuk menyaring masalah ini.

masukkan deskripsi gambar di sini

指尖 上 的 Android
sumber
3
Ini akan menutupi masalah alih-alih menyelesaikannya. Lihat jawaban lain untuk solusinya.
Vadim Kotov
Silakan gunakan kode alih-alih tangkapan layar, jawaban Anda baik dalam kasus saya karena saya hanya ingin membuat "mockup" klon aplikasi.
user2078023
-1

Sederhana saja. Keluar dari Android Studio, tutup sepenuhnya. Buka kembali Android studio dan sekali lagi Masuk ke Android Studio.

Kemudian coba sambungkan ke firebase dari IDE studio Android. Prosedur ini berhasil untuk saya.

Prakash P
sumber
ini tidak berfungsi jika google-services.json ada. kita harus menghapus google-services.json jika ada.
Dika
ini akan berfungsi sekali setelah Anda mengubah nama paket di file json juga dan sebelum menyimpan itu, Anda perlu menutup studio android dan kemudian menyimpan file json dan me-restart studio.
Anish Kumar
-1

Mudah untuk menyelesaikannya: pastikan nama paket di file app / build.gradle Anda adalah nama paket yang sama dengan yang ada di file App Manifest Anda. dan memastikan nama paket sudah benar. Itu harus menyelesaikan ini

James Idowu
sumber