패키지 이름 (Google Analytics)과 일치하는 클라이언트를 찾을 수 없습니다.-여러 개의 ProductFlavors 및 buildTypes


383

문맥:

앱에 Google 웹 로그 분석을 설정하려고합니다. (4 사용자 정의 buildTypes및 몇 가지 이상 productFlavors)

로 설정 Build Variant한 것을 선택하면 제대로 작동합니다 (을 생성 할 때 사용 된 패키지 이름 ). 그러나 다른 풍미에는 다른 applicationId가 있습니다.applicationIdcom.my.app.package.namegoogle-services.json

나는 공식적인 지침 을 따라 설정했다.

Build Variants Tab(다른 applicationId(패키지 이름) 을 가진 다른 빌드 변형을 선택할 때 발생하는 오류 는 다음과 같습니다.

오류 : ': app : processAllcategoriesDebugfreeGoogleServices'작업에 대한 실행이 실패했습니다.

패키지 이름 'com.my.app.package.name.debug'와 일치하는 클라이언트가 없습니다.

오류 메시지 설명 :

오류 메시지에서 작업 이름에서 위의 Debugfree내 관습 buildTypeAllcategories내 중 하나입니다 productFlavors.

나는 오류를 이해하고 패키지 이름이 json을 생성 할 때 사용한 것과 다르다는 것을 알고 있지만 그 방법을 알아 내려고 노력하고 있습니다.

문제:

이제는 폴더에 google-services.json상주 app하므로 플레이버 특정 소스 세트 폴더에 드롭하여 각 제품 플레이버마다 분리 할 수 ​​없습니다.

질문 :

  1. byildType접미사 .debugapplicationId(패키지 이름)으로 디버깅하는 사용자 정의 . 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 flavor 버전 중 하나에 대해서만 분석 지원이 필요합니다. prod-flavour 에 대한 추가 종속성제한 할 수는 있지만 여전히 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 Studio의 프로젝트보기로 이동하여 앱 패키지 내부를 검색하십시오.
Gastón Saillén

12
아니요. 우리 는이 문제에서 google-services.json 이 유효하지 않다는 것을 알고 있습니다 ... 우리 가 원하는 것은 빌드 변형 상황 에서이 문제를 해결하는 방법입니다!
MJ 스튜디오

Yudi의 카르마를 환영합니다
Muhammed Fasil

활동이 com.example.aaron.myproject22.Activities ...와 같은 하위 패키지에있는 경우 google-services.json으로 이동하여 client_info의 package_name을 com.example.aaron.myproject22로 변경해야합니다. build.grade (모듈 앱)의 맨 아래에 plugin : 'com.google.gms.google-services'를 적용했습니다
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 파일을 요청합니다.
Gokhan Arik

2
각 풍미에 추가 된 각 josn 파일의 차이점은 무엇입니까 ??
안드로이드

2
모듈 내에서 Google 서비스를 사용할 가능성이 있습니까 (두 앱이 공유 함) ... 해당 패키지에 대한 Google 서비스 파일이 없어도 gradle-sync 할 수 없습니다 ... 임베딩 앱이 json을 제공해야하지만 모듈이 아닙니다. 어쨌든 가능합니까?
Georg

99

패키지 이름 'com.tf'와 일치하는 클라이언트를 찾을 수 없습니다. google-services.json의 "package_name"이 앱 gradle의 "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_nameapplicationId반드시 같아야합니다.


4
저자는 이에 대한 해결 방법을 묻고있었습니다. 애플리케이션
ID

가장 유효한 솔루션을 제공했습니다. 쿠도스 맨 !!
Devansh sadhotra

application id응용 프로그램 Gradle을에는 못을 박았다
BlackPearl

69

"google-services.json"파일의 패키지 이름이 앱의 패키지 이름과 동일한 지 확인하십시오.


4
새 프로젝트의 리포지토리를 포크 할 때 발생하는 일반적인 문제입니다.
Zapnologica

1
예, 두 패키지 이름이 모두 작동하지 않는 경우
Priya

63

해결책을 찾았습니다.

firebase 프로젝트에서 두 개의 "앱"을 생성 한 다음 하나의 앱에서 json 파일을 다운로드 할 수 있습니다 (flavored 앱에서 다운로드). 두 앱 모두에 대한 데이터를 포함합니다. json 파일을 앱의 루트 디렉토리에 간단히 복사 할 수 있습니다.

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


10
모든 제품 특징이 하나의 json 파일로 처리 될 수 있으므로 이것이 가장 좋은 대답입니다. 다른 소스 세트를 만들 필요가 없습니다.
Tash Pemhiwa

2
동일한 프로젝트 내에서 앱을 만들어야합니다. 왼쪽 상단의 프로젝트 개요에는 설정 아이콘이 있습니다. 그것을하고, 일반 탭을 열고 아래로 스크롤하여 내 앱 섹션에서 것이다 눌러 버튼이 앱이 추가됩니다
galaxigirl

가장 큰 문제는 google-service.json 변경을 잊어 버릴 때 발생합니다.
Edgar Khimich

36

당신은 장소에 필요 google-services.jsonapp/말 일세. 그리고 각 빌드 유형마다 app/src폴더에 일치하는 디렉터가 있어야 합니다.

예를 들어 릴리스 및 디버그가있는 경우 :

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

모든 google-services.json 파일 package_name에서 빌드 유형에 따라 올바른 것을 지정해야 합니다.

예를 들어, 디버그 디렉토리 안에는 {com.myapp}.debug


5
분명히 "client"배열 의 기본 세트 요소를 복제하고 (요소 사이에 쉼표를 추가) 접미사 "package_name"를 포함하도록 새 요소의 값만 변경할 수 있습니다 .debug. 그런 다음 다시 빌드하십시오. AS 2.3.3에서 나를 위해 일했습니다.
et_l

36

이 오류는 패키지 이름 이 프로젝트의 패키지 이름과 일치하지 않는 프로젝트에 Google Services Json 파일을 다운로드 한 경우 발생합니다. .

최근에 프로젝트의 패키지 이름을 바꿨습니까?

Gradle File이 아닌 모든 클래스를 업데이트합니다 . 따라서 Gradle에서 패키지 이름이 올바른지 확인하고 매니페스트도 확인하십시오.


1
유 감사는 helpfull했다
Sirwan 히미

32

package name패키지 를 만들거나 업데이트 할 때마다 패키지 이름이 정확히 같은지 확인하십시오 [대문자와 소문자]

아래 단계를 수행하십시오.

1). applicationId앱 레벨 gradle파일 체크인

2). 파일을 확인 package_name하고google-services.json

삼). 확인 package귀하의 AndroidManifest파일

전체 확인을 위해 작업 패키지 디렉토리 이름 ie ( "com.example.app") 도 동일 하게 만드십시오 .


2
감사합니다 Bro 그것은 나를 위해 일했습니다. 앱 레벨 gradle 파일에서 패키지가 다릅니다. 변경했을 때 나를 위해 일했습니다
fazil

환영 @fazil
라비 바니 야

앱 ID가 변경 package되므로 매니페스트 (및 모든 패키지의 모든 파일) 를 변경할 필요가 없습니다 applicationId.
CoolMind

22

먼저 Gradle의 응용 프로그램 패키지에 접미사를 추가하십시오.

yourFlavor {
   applicationIdSuffix "yourFlavor"
}

패키지 이름이 지정됩니다

com.domain.yourapp.yourFlavor

그런 다음 현재 프로젝트에서 Firebase로 이동 하여이 패키지 이름으로 다른 안드로이드 앱을 추가하십시오.

그런 다음 기존 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 파일에 두 개의 앱 (ID)이 모두 필요합니다.
Bojan Hrnkas 19

이게 방법이야. +1, 여기이 이슈와 관련된 오래된 토론 이 있습니다
lasec0203

간단하고 똑바로.
Umair

20

있는지 확인 client_id하고 package_name구글 - services.json는 패키지 이름에 따라 올바른 값을가집니다.

언급 된 파일을 client_idand package_name필드 에 해당 패키지 이름으로 flavors 디렉토리에 추가해야 합니다.


20

1. 패키지 이름을 확인 하고 애플리케이션 ID 확인 동일해야합니다

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

패키지가 패키지 이름과 같은지 확인하십시오. 광산은 달랐기 때문에 바꾸었고 효과가있었습니다.


근무 :) 감사
솔루션 정신

11

나는 반응 네이티브 출신이지만 이것이 이것이이 질문에도 적용된다고 생각합니다. 지정합니다.

파일 내에서 android/app/build.gradle검색 applicationId(내 android, defaultConfig)

그 값이 이것과 같아야합니다

client[0]client_info.android_client_info.package_name

내의 값으로 google-services.json.


나도, 이것이 가장 적용 가능한 감사합니다
Jason Sebring

9

또한 google-services.json 에서 패키지 이름을 변경해야 합니다.


8

Google-services.json 파일의 패키지 이름이 올바른 경우 gradle.properties 파일로 이동하십시오. 그런 다음 APPLICATION_ID = "com.yourpackage.name"을 변경하십시오.


5

firebase json 파일 "google-services".json을 새 파일에 추가했다고 생각합니다. 새 파일 을 만들어야합니다 firebase에서 json 파일을 만드는 방법에 대한 링크를 확인하고 패키지 이름과 일치해야합니다

두 번째는 패키지 이름을 변경하는 경우 드롭 다운에서 프로젝트를 선택할 때 파일 아래를 마우스 오른쪽 버튼으로 클릭하면 "경로 대체"옵션을 사용하십시오. 전체 프로젝트에서 패키지 이름을 검색하고 바꿔야합니다!

도움이 되었기를 바랍니다 !


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

Gradle.app의 applicationId가 패키지 이름과 동일한 지 확인하십시오. 내 문제는 이것이고 나는이 방법으로 해결했다.


3

프로젝트 디렉토리로 가서 app / src 경로에 제품 특징 (Alpha, Beta, Store 또는 특징 이름)과 같은 이름을 가진 폴더를 만듭니다. 그런 다음 google-services.json 파일을 각 폴더에 복사하십시오. 하위 폴더에있는 각 제품 플레이버의 google-services.json 파일에서 "package_name"필드를 변경하는 것을 잊지 마십시오.


3

google-services.json 파일로 이동하여 클라이언트 부분에서 패키지 이름을 확인하고 패키지 이름이 다른 경우 패키지 이름을 앱 패키지 이름과 비교 한 다음 운 좋게 잘 작동 한 앱 패키지 이름에 따라 클라이언트 패키지 이름을 변경하십시오.

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

앱 패키지 이름-> 패키지 "com.example.application.tracker";


2

하나는 무료이고 하나는 유료라는 두 가지 소스 세트를 만들어서 해결했습니다. 이 두 폴더에는 필요한 Java 코드 및 리소스 파일이 포함되어 있으며 특정 플레이버의 요구 사항에 맞게 편집됩니다. 예를 들어 자바 클래스와 레이아웃 파일 모두에서 유료의 AdMob 코드를 제거하려고합니다.


2

파일을 다시 동기화하여 동일한 문제를 해결했습니다 google-services.json.

도구> Firebase> Firebase에 연결> 동기화


어디서 했어요? 정확히 무엇을 대체합니까? 스크린 샷?
Nasenbaer

Android Studio에서이를 수행 할 수 있습니다 (Firebase 플러그인을 사용하도록 설정해야 함). 파일을 업데이트합니다 google-services.json.
Nabin Bhandari

2

Firebase 연결 을 만들 때 다음 지침을 따르십시오.

  • Firebase에 애플리케이션 이름 추가

  • 응용 프로그램 pakage 이름 추가 (앱에서 사용중인 동일한 pakage 이름 작성)

  • 때 중포 기지 메이크업 구글 - services.json의 파일은 다운로드 를하고 붙여 앱 폴더에

  • 프로젝트 동기화 문제가 해결되었습니다 :)

    감사합니다


2

응용 프로그램의 패키지 이름을 변경할 때도이 문제가 발생합니다.

안드로이드 스튜디오 프로젝트에서 "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
이렇게하면 문제를 해결하는 대신 가릴 수 있습니다. 솔루션에 대한 다른 답변을 참조하십시오.
Vadim Kotov

스크린 샷 대신 코드를 사용하십시오. 응용 프로그램 복제본의 "mockup"만 만들고 싶기 때문에 제 대답은 좋습니다.
user2078023

-1

간단합니다. Android Studio에서 로그 아웃하고 완전히 닫습니다. Android 스튜디오를 다시 연 다음 다시 Android Studio에 로그인하십시오.

그런 다음 Android 스튜디오 IDE에서 firebase에 연결하십시오. 이 절차는 저에게 효과적이었습니다.


google-services.json이 있으면 작동하지 않습니다. google-services.json이 있으면 삭제해야합니다.
Dika

이것은 json 파일에서 패키지 이름을 변경 한 후에도 한 번 작동하며 저장하기 전에 android studio를 닫은 다음 json 파일을 저장하고 스튜디오를 다시 시작해야합니다.
Anish Kumar

-1

이 문제를 해결하는 것은 간단합니다. app / build.gradle 파일의 패키지 이름이 App Manifest 파일의 패키지 이름과 동일한 패키지 이름인지 확인하십시오. 패키지 이름이 올바른지 확인하십시오. 이 문제를 해결해야합니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.