Không tìm thấy ứng dụng khách phù hợp cho tên gói (Google Analytics) - nhiều sản phẩmFlavors & buildTypes [đã đóng]


383

Bối cảnh:

Tôi đang cố gắng thiết lập Google Analytics cho ứng dụng của mình. (có 4 tùy chỉnh buildTypesvà nhiều hơn một vài productFlavors)

Nó hoạt động tốt khi tôi chọn Build Variantcái có applicationIdcài đặt com.my.app.package.name(tên gói được sử dụng khi tạo google-services.json). Nhưng, các hương vị khác của tôi có các ứng dụng khác nhau.

Tôi đã đi theo chính thức để thiết lập nó.

Lỗi tôi gặp khi bất kỳ biến thể xây dựng nào khác được chọn trong Build Variants Tabđó (có applicationIdtên gói (tên gói) khác nhau như sau:

Lỗi: Thực thi không thành công cho nhiệm vụ ': app: process ALLc chuyên mụcDebugfreeGoogleService'.

Không tìm thấy ứng dụng khách phù hợp với tên gói 'com.my.app.package.name.debug'

Giải thích về thông báo lỗi:

Trong tên tác vụ trong thông báo lỗi ở trên Debugfreelà tùy chỉnh của tôi buildTypeAllcategorieslà một trong số tôi productFlavors.

Tôi hiểu lỗi và biết tên gói khác với những gì tôi đã sử dụng khi tạo json, nhưng đó là những gì tôi đang cố gắng tìm cách.

Vấn đề:

Bây giờ, các google-services.jsoncư trú trong appthư mục và do đó tôi không thể tách chúng ra cho mỗi hương vị sản phẩm bằng cách thả chúng vào thư mục bộ nguồn cụ thể hương vị.

Câu hỏi:

  1. Tùy chỉnh của tôi byildTypeđể gỡ lỗi hậu tố .debugcho applicationId(tên gói). Có cách nào tôi có thể làm cho nó hoạt động với google-services.jsonbản phát hành của mình không applicationId(tức là không có hậu tố .debug)
  2. Có cách nào để có nhiều hương vị sản phẩm được cấu hình trong cùng một google-services.jsontệp mà không sử dụng các tệp và tác vụ riêng biệt để sao chép tệp cần thiết vào appthư mục. Tôi biết nó có thể được thực hiện bằng cách sử dụng tasknhư được đề cập trong bài viết này . Có cách nào đơn giản hơn để chỉ có một tệp hoặc chọn đúng tệp dựa trên cấu hình lớp?
  3. Tôi thấy các package_namelĩnh vực trong google-services.jsoncó tên gói com.my.app.package.name. Tôi có thể thêm nhiều tên gói theo cách thủ công để làm việc cho tất cả các biến thể xây dựng không? Nếu có, làm thế nào để làm điều đó? Không thể tìm thấy bất kỳ hướng dẫn trong tài liệu.

1
Bạn đã tìm thấy một soution đặc biệt cho câu hỏi thứ ba của bạn?
Mate

Tôi đang ở trong tình huống tương tự. Tôi cần hỗ trợ phân tích cho một trong những phiên bản hương vị phát hành prod. Tôi có thể hạn chế sự phụ thuộc vào hương vị sản phẩm nhưng nó vẫn tìm kiếm gói đúng như một phần của tệp con trai. Bất cứ đề nghị nào !
CoDe

1
Tôi cũng đang đối mặt với cùng một vấn đề, Hãy cho tôi biết nếu có ai tìm ra giải pháp cho việc này?
Deepanshu Sinha

Câu trả lời:


381

Kiểm tra tên gói của bạn trên google-services.json của nó giống với tên gói địa phương của ứng dụng của bạn

Thí dụ

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

Trong trường hợp này, tên gói địa phương của tôi là com.my.app.package.name vì vậy tôi cũng đã thay đổi tên gói của mình trong google-services.json với tên gói địa phương của tôi


google-services.json là một tệp !!! trong một thư mục ứng dụng. Nên tìm tệp này với sự trợ giúp của Windows Explorer (ví dụ). Nên chỉnh sửa tập tin này bởi các biên tập viên thông thường.
user_MGU

để tìm thấy điều này, hãy vào Chế độ xem dự án trong Android Studio và tìm kiếm bên trong gói ứng dụng của bạn
Gastón Saillén

12
Không ... tất cả chúng ta đều biết google-services.json không hợp lệ trong vấn đề này ... Điều chúng tôi muốn là làm thế nào để giải quyết vấn đề này trong tình huống biến thể xây dựng !!
MJ Studio

chào mừng nghiệp Yudi
Muhammed Fasil 23/07/19

Nếu hoạt động của bạn nằm trong một gói con, chẳng hạn như: com.example.aaron.myproject22. Hoạt động .... bạn cần truy cập vào google-services.json và thay đổi gói_name của client_info thành com.example.aaron.myproject22 Cũng đảm bảo bạn đã áp dụng plugin: 'com.google.gms.google-services' ở cuối build.THER (Ứng dụng mô-đun)
WHOATEMYNOODLES

224

Tìm thấy điều này:

Tệp google-services.json thường được đặt trong ứng dụng / thư mục, nhưng kể từ phiên bản 2.0.0-alpha3 của hỗ trợ plugin đã được thêm cho các loại bản dựng , điều này sẽ làm cho cấu trúc thư mục sau hợp lệ:

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

Nguồn

Nguồn 2


16
Có cách nào để vô hiệu hóa phân tích dễ dàng cho loại bản dựng không? Tôi muốn tắt nó để gỡ lỗi? Tôi nghĩ rằng nó sẽ bị vô hiệu hóa nếu tôi không thêm tệp dịch vụ google, nhưng ngay cả khi tôi tắt, nó vẫn yêu cầu tệp dịch vụ google.
Gokhan Arik

2
Điều gì khác biệt mỗi tập tin josn được thêm vào trong mỗi hương vị ??
Android

2
Có khả năng sử dụng các dịch vụ của google trong một mô-đun (hai ứng dụng chia sẻ) ... vì tôi thậm chí không thể đồng bộ hóa lớp mà không có tệp dịch vụ google cho gói đó ... ứng dụng nhúng sẽ cung cấp json, nhưng không phải mô-đun. điều này là có thể?
Georg

99

Không tìm thấy ứng dụng khách phù hợp nào cho tên gói 'com.tf' Tôi chắc chắn rằng "gói_name" trong google-services.json không khớp với "applicationId" của bạn trong lớp ứng dụng.

lớp ứng dụng:

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

Giải pháp : Chỉ cần chắc chắn rằng package_nameapplicationIdphải giống nhau.


4
Tác giả đã hỏi về một cách giải quyết cho vấn đề này. Chúng có các kiểu xây dựng khác nhau với ứng dụng khác nhau
Dmitry Guselnikov 7/2/19

bạn đã đưa ra giải pháp hợp lệ nhất. Người đàn ông Kudos !!
Devansh sadhotra

Lớp application idtrong ứng dụng đóng đinh nó
BlackPearl

69

đảm bảo tên gói của bạn trong tệp "google-services.json" giống với tên gói của ứng dụng của bạn.


4
vấn đề phổ biến khi yêu cầu repo cho một dự án mới.
Zapnologica

1
có nếu cả hai tên gói không giống nhau nhưng nó không hoạt động
Priya

63

Tôi đã tìm được giải pháp:

Chúng tôi phải tạo hai "ứng dụng" trong dự án firebase và sau đó chúng tôi có thể tải xuống tệp json từ bất kỳ ứng dụng nào (tôi đã tải xuống từ ứng dụng có hương vị). Nó sẽ chứa dữ liệu cho cả hai ứng dụng. Chúng ta chỉ cần sao chép tệp json vào thư mục gốc của ứng dụng.

Nguồn: https://firebase.googleblog.com/2016/08/organizing-your-firebase-enables-android-app-builds.html


10
Đây là câu trả lời tốt nhất vì tất cả các hương vị sản phẩm có thể được bao phủ bởi một tệp json. Không cần phải tạo các nguồn khác.
Tash Pemhiwa

2
Xin lưu ý, bạn phải tạo các ứng dụng trong cùng một dự án. Tổng quan dự án ở góc trên bên trái có biểu tượng cài đặt. Nhấn vào nó và nó sẽ mở ra tab Chung, cuộn xuống và bên dưới phần Ứng dụng của bạn có nút Thêm ứng dụng
galaxigirl

Vấn đề lớn nhất sẽ xảy ra khi bạn quên thay đổi google-service.json và đẩy nó sang prod.
Edgar Khimich

36

Bạn cần phải đặt google-services.jsonvào app/dir. Và đối với mỗi loại bản dựng, cần có giám đốc phù hợp trong app/srcthư mục.

Ví dụ: nếu bạn đã phát hành và gỡ lỗi:

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

Trong tất cả các tệp google-services.json, bạn nên chỉ định đúng package_nametheo loại bản dựng.

Ví dụ, bên trong thư mục gỡ lỗi, nó sẽ giống như {com.myapp}.debug


5
Rõ ràng, bạn thậm chí có thể nhân đôi phần tử của tập hợp chính trong "client"mảng (thêm dấu phẩy giữa các phần tử) và chỉ thay đổi "package_name"giá trị của phần tử mới để bao gồm .debughậu tố. Sau đó xây dựng lại. Nó làm việc cho tôi trên AS 2.3.3.
et_l

36

Lỗi này xảy ra khi bạn tải xuống tệp Json của Google Services trong dự án có tên Gói không khớp với tên gói của Dự án .

Gần đây đổi tên tên gói của dự án?

Nó cập nhật tất cả các lớp nhưng không phải là tệp Gradle . Vì vậy, hãy kiểm tra xem tên gói của bạn có đúng trong Gradle của bạn không, và cũng có thể là Manifest nữa.


1
cảm ơn bạn thật hữu ích
Sirwan Rahimi

32

Bất cứ khi nào bạn tạo hoặc cập nhật package nameHãy chắc chắn rằng tên gói của bạn giống hệt nhau [Vấn đề chữ hoa và chữ thường]

Làm dưới bước.

1). Kiểm tra tệp applicationIdcấp độ ứng dụng gradle,

2). Kiểm tra tập tin package_namecủa bạn google-services.json,

3). Kiểm tra hồ sơ packagecủa bạnAndroidManifest

và để xác nhận đầy đủ, làm cho tên thư mục gói làm việc của bạn tức là ("com.example.app") cũng giống như vậy.


2
Cảm ơn Bro nó đã làm việc cho tôi. Trong tệp cấp độ ứng dụng, gói của tôi khác. Khi tôi thay đổi, nó hoạt động với tôi
fazil

chào mừng bạn đến @fazil
Ravi Vaniya

Bạn không phải thay đổi packagetrong bảng kê khai (và tất cả các tệp trong tất cả các gói), vì applicationIdsẽ thay đổi id ứng dụng.
CoolMind

22

Trước hết, thêm một hậu tố vào gói ứng dụng trong Gradle:

yourFlavor {
   applicationIdSuffix "yourFlavor"
}

Điều này sẽ khiến gói của bạn được đặt tên

com.domain.yourapp.yourFlavor

Sau đó, đi đến Firebase trong dự án hiện tại của bạn và thêm một ứng dụng Android khác vào đó với tên gói này.

Sau đó thay thế tệp google-services.json hiện tại bằng tệp mới mà bạn tạo bằng ứng dụng mới trong đó.

Sau đó, bạn sẽ kết thúc với một cái gì đó có nhiều phần "client_info". Vì vậy, bạn nên kết thúc với một cái gì đó như thế này:

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

Đây là câu trả lời đúng! Bạn cần cả hai Ứng dụng (id) trong tệp google-services.json.
Bojan Hrnkas

đây là cách +1, đây là một số cuộc thảo luận cũ liên quan đến vấn đề này
lasec0203

Đơn giản và thẳng tiến.
Umair

20

kiểm tra xem client_idpackage_nametrong google-services.json có giá trị chính xác theo tên gói của bạn không.

Bạn nên thêm tệp được đề cập vào thư mục hương vị với tên gói tương ứng trong trường client_idpackage_name.


20

1. Xác minh tên góiID ứng dụng phải giống nhau

2.Xác minh tên gói google-services.json có sẵn trong thư mục ứng dụng


18

Đảm bảo bạn đổi tên ApplicationId trong tệp lớp sau khi đổi tên gói của bạn


2
Cứu tôi. Cảm ơn.
VipulKumar

rất vui vì nó đã giúp được ai đó
Arsalan Shah

1
cảm ơn! đã giải quyết vấn đề của tôi.
Riddhi

Giải quyết vấn đề của tôi quá!
Kanagalingam

17

Mở tệp Google-services.json của bạn và tìm phần này trong tệp:

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

kiểm tra xem gói đó có giống với tên gói của bạn không Của tôi là khác nhau, vì vậy tôi đã thay đổi nó và nó hoạt động.


Đã làm việc :) Cảm ơn
Solution Spirit

11

Tôi đến từ phản ứng bản địa nhưng tôi nghĩ rằng điều này cũng áp dụng cho câu hỏi này. Để cụ thể hóa.

Trong tập tin android/app/build.gradletìm kiếm applicationId(trong android, defaultConfig)

và đảm bảo rằng giá trị đó là như nhau

client[0]client_info.android_client_info.package_name

như giá trị bên trong google-services.json.


Tôi cũng vậy, cảm ơn điều này được áp dụng nhiều nhất
Jason Sebring

9

Bạn cũng cần thay đổi tên gói trong google-services.json


8

Nếu tên gói của bạn trên tệp Google-services.json không sao, hãy chuyển đến tệp gradle.properIES. Sau đó thay đổi ỨNG DỤNG_ID = "com.yourpackage.name" của bạn


5

Tôi nghĩ rằng bạn đã thêm tệp firebase json "google-services" .json với tệp mới. Đảm bảo tạo một tệp mới, kiểm tra liên kết về cách tạo tệp json từ firebase và nó phải khớp với tên gói của bạn

Điều thứ hai là nếu bạn thay đổi tên gói, hãy sử dụng tùy chọn "thay thế trong đường dẫn" khi bạn nhấp chuột phải vào tệp khi bạn chọn dự án từ trình đơn thả xuống. Bạn phải tìm kiếm tên gói trong toàn bộ dự án và thay thế nó!

Hi vọng điêu nay co ich !


4

nếu không ai trong số họ làm việc cho một trong số các bạn, vấn đề của tôi là với tên gói không bắt đầu bằng 'com'. đã thay đổi nó, bây giờ nó hoạt động.

mong rằng sẽ giúp


làm việc cho tôi, cảm ơn
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"
    }

đảm bảo ứng dụng của Gradle.app giống với tên gói của bạn. vấn đề của tôi là điều này và tôi đã giải quyết theo cách này


3

đi đến thư mục dự án của bạn và tạo các thư mục trên đường dẫn app / src có tên hương vị sản phẩm của bạn (như Alpha, Beta, Store hoặc tên của hương vị của bạn là gì). sau đó sao chép tệp google-services.json của bạn vào từng thư mục. đừng quên thay đổi trường "pack_name" trên tệp google-services.json của mỗi sản phẩm của bạn mà bạn đã đăng ký.


3

Truy cập tệp google-services.json và trong phần ứng dụng khách kiểm tra tên gói và so sánh nó với tên gói Ứng dụng nếu chúng khác nhau, sau đó thay đổi tên gói khách theo tên gói ứng dụng của bạn, nó rất phù hợp với tôi.

tập tin google-services.json-> "pack_name": "com.example.application.tracker"

Tên gói ứng dụng-> gói "com.example.application.tracker";


2

Tôi đã giải quyết nó bằng cách tạo ra hai nguồn, một miễn phí và một trả phí. Cả hai thư mục này sẽ chứa các tệp tài nguyên và mã java cần thiết, sẽ được chỉnh sửa theo yêu cầu của hương vị cụ thể. Ví dụ: Bạn muốn xóa Mã AdMob trong cả trả tiền từ các lớp Java và các tệp bố cục.


2

Tôi đã giải quyết vấn đề tương tự bằng cách đồng bộ lại tập tin google-services.json.

Công cụ> Firebase> Kết nối với Firebase> Đồng bộ hóa


bạn đã làm điều đó ở đâu Nó thay thế chính xác những gì? Ảnh chụp màn hình?
Nasenbaer

Bạn có thể làm điều đó trong Android Studio (phải bật plugin Firebase). Nó cập nhật các tập tin google-services.json.
Nabin Bhandari

2

Tôi đã giải quyết vấn đề tương tự ở đây là giải pháp đơn giản: khi bạn tạo kết nối firebase, hãy làm theo các hướng dẫn sau:

  • Thêm tên ứng dụng của bạn trong firebase

  • Thêm tên pakage ứng dụng của bạn (viết cùng tên pakage, bạn đang sử dụng trong ứng dụng)

  • Khi firebase tạo tệp google-services.json, chỉ cần tải xuốngdán vào thư mục ứng dụng của bạn

  • Đồng bộ hóa dự án của bạn Vấn đề được giải quyết :)

    Cảm ơn bạn


2

Tôi cũng gặp vấn đề này khi tôi thay đổi tên gói ứng dụng của mình.

Trong dự án studio android của bạn, tìm tệp "google-services.json". Mở nó ra. và kiểm tra xem tên gói của ứng dụng của bạn có giống như được ghi trong tệp này không.

Tên gói của ứng dụng và tên gói của bạn được ghi trong tệp "google-services.json" phải giống nhau.


1

Điều này có nghĩa là tệp google-services.json của bạn không thuộc về ứng dụng của bạn (Bạn đã tải xuống google-services.json cho một ứng dụng khác chưa?) ... vì vậy, để giải quyết vấn đề này, hãy làm như sau:

1: Đăng nhập vào Firebase và mở dự án của bạn. 2: Nhấp vào biểu tượng Cài đặt và chọn Cài đặt dự án. 3: Trong thẻ Ứng dụng của bạn, chọn tên gói của ứng dụng bạn cần tệp cấu hình từ danh sách. 4: Nhấp vào google-services.json. Sau khi quá trình tải xuống hoàn tất, hãy thêm google-services.json mới vào thư mục gốc dự án của bạn, thay thế thư mục hiện có..hoặc chỉ cần xóa cái cũ. Rất bình thường để tải xuống google-services.json cho dự án đầu tiên của bạn và sau đó giả sử hoặc quên rằng google-services.json cụ thể này được điều chỉnh riêng cho dự án hiện tại của bạn, bởi vì không phải bất kỳ dự án nào khác vì tất cả các dự án đều có tên gói duy nhất.


1

Kiểm tra applicationIdSuffixtrong tệp build.gradle của ứng dụng của bạn. Xem nếu nó đang nối bất kỳ văn bản nào của bạn applicationId. Nếu vậy, loại bỏ nó.


1

bạn có thể làm điều đó để giải quyết vấn đề này.

nhập mô tả hình ảnh ở đây


3
Điều này sẽ che giấu vấn đề thay vì giải quyết nó. Xem câu trả lời khác cho một giải pháp.
Vadim Kotov

Vui lòng sử dụng mã thay vì ảnh chụp màn hình, câu trả lời của bạn rất tốt trong trường hợp của tôi vì tôi chỉ muốn tạo một "mockup" của một bản sao ứng dụng.
dùng2078023

-1

Rất đơn giản. Đăng xuất khỏi Android Studio, đóng hoàn toàn. Mở lại studio Android và sau đó đăng nhập lại vào Android Studio.

Sau đó thử kết nối với firebase từ Android studio IDE. Thủ tục này làm việc cho tôi.


điều này không hoạt động nếu google-services.json tồn tại. chúng ta phải xóa google-services.json nếu nó tồn tại.
Dika

điều này sẽ hoạt động một lần sau khi bạn thay đổi tên gói trong tệp json và trước khi lưu nó, bạn cần đóng studio android và sau đó lưu tệp json và khởi động lại studio.
Anish Kumar

-1

Rất đơn giản để giải quyết vấn đề này: chỉ cần đảm bảo tên gói trong tệp ứng dụng / build.gradle của bạn là tên gói giống như tên trong tệp Bản kê khai ứng dụng của bạn. và đảm bảo tên gói là chính xác. Điều đó sẽ giải quyết điều này

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.