Google 서비스 Gradle 플러그인

소개

Android 기기에서 Google API 또는 Firebase 서비스를 사용 설정하는 과정에서 google-services 플러그인을 추가해야 할 수도 있는 build.gradle 파일:

dependencies {
    classpath 'com.google.gms:google-services:4.4.2'
    // ...
}

google-services 플러그인에는 두 가지 주요 기능이 있습니다.

  1. google-services.json 파일 처리 및 Android 생성 애플리케이션의 실행 리소스에서 사용할 수 있는 생성합니다. 자세한 내용은 JSON 파일 추가를 참조하세요.
  2. 사용 중인 서비스에 필요한 기본 라이브러리의 종속 항목 추가 사용 설정되어 있습니다. 이 단계에서는 Google 서비스 Gradle을 적용해야 합니다. 다음과 같이 app/build.gradle 파일의 플러그인을 추가합니다.
    apply plugin: 'com.google.gms.google-services'

    다음 명령어를 실행하여 이 단계의 결과를 확인할 수 있습니다. ./gradlew :app:dependencies

JSON 파일 추가

google-services.json 파일은 일반적으로 app/ 디렉터리 (Android 스튜디오 앱 모듈의 루트) 따라서 플러그인이 빌드 유형과 제품 버전을 지원하는 버전 2.2.0 확인할 수 있습니다 다음 디렉터리 구조는 모두 유효합니다.

// dogfood and release are build types.
app/
    google-services.json
    src/dogfood/google-services.json
    src/release/google-services.json
    ...

참고: release 디렉터리에 google-services.json 파일을 제공하면 프로덕션 APK를 위한 별도의 Firebase 프로젝트를 유지해야 합니다.

제품 버전을 사용 중일 때는 더 복잡한 디렉터리 구조가 사용할 수도 있습니다.

// free and paid are product flavors.
app/
    google-services.json
    src/dogfood/paid/google-services.json
    src/release/free/google-services.json
    ...

JSON 파일 처리

google-services.json 파일의 기본 구조는 다음과 같습니다.

{
  "project_info": {...},
  "client": [...],
}

project_info 객체에는 프로젝트에 포함되어 있으며 client 배열의 각 멤버는 프로젝트에 추가한 클라이언트 (Android 앱) 정보

Android 앱의 JSON 파일을 처리할 때 플러그인은 패키지 이름과 일치하는 client 객체 (현재 빌드의 경우) 유형)로 변환할 수 있습니다.

  • client 배열의 각 구성원에 대해 다음을 실행합니다.
    • client_info/android_client_info/package_name의 값을 확인합니다.
    • 패키지 이름이 이 값과 일치하면 구성원 객체를 반환합니다.
  • client의 구성원 중 패키지 이름과 일치하는 구성원이 없으면 예외가 발생합니다.

이 문서의 나머지 부분에서는 {YOUR_CLIENT}를 사용하여 위 절차에 따라 결정된 client 배열의 멤버입니다.

JSON 처리의 주요 결과는 두 개의 XML 파일을 생성하는 것입니다. Java 코드에서 Android 리소스로 참조할 수 있습니다. 다음은 다음과 같습니다.

app/build/generated/res/google-services/{build_type}/values/values.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <! -- Present in all applications -->
    <string name="google_app_id" translatable="false">1:1035469437089:android:73a4fb8297b2cd4f</string>

    <! -- Present in applications with the appropriate services configured -->
    <string name="gcm_defaultSenderId" translatable="false">1035469437089</string>
    <string name="default_web_client_id" translatable="false">337894902146-e4uksm38sne0bqrj6uvkbo4oiu4hvigl.apps.googleusercontent.com</string>
    <string name="ga_trackingId" translatable="false">UA-65557217-3</string>
    <string name="firebase_database_url" translatable="false">https://example-url.firebaseio.com</string>
    <string name="google_api_key" translatable="false">AIzbSyCILMsOuUKwN3qhtxrPq7FFemDJUAXTyZ8</string>
    <string name="google_crash_reporting_api_key" translatable="false">AIzbSyCILMsOuUKwN3qhtxrPq7FFemDJUAXTyZ8</string>
    <string name="project_id" translatable="false">mydemoapp</string>

</resources>

app/build/generated/res/google-services/{flavor}/{build_type}/xml/global_tracker.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="ga_trackingId" translatable="false">UA-65557218-3</string>
</resources>

XML 파일의 모든 값은 google-services.json에 있습니다. 파일을 다운로드할 수 있습니다. Android 프로젝트에 구성이 있는 경우 google-services 플러그인 사용을 차단하는 경우 다음 값을 사용하여 XML 파일을 수동으로 안전하게 다시 생성할 수 있습니다.

google_app_id:

{YOUR_CLIENT}/client_info/mobilesdk_app_id

gcm_defaultSenderId:

project_info/project_number

default_web_client_id:

{YOUR_CLIENT}/oauth_client/client_id (client_type == 3)

ga_trackingId:

{YOUR_CLIENT}/services/analytics-service/analytics_property/tracking_id

firebase_database_url:

project_info/firebase_url

google_api_key:

{YOUR_CLIENT}/api_key/current_key

google_crash_reporting_api_key:

{YOUR_CLIENT}/api_key/current_key

project_id:

project_info/project_id

문제 해결

Q: 빌드할 때 다음 오류 메시지가 표시됩니다. 'Filestore 모듈 루트 폴더에 google-services.json이 없습니다. Google 서비스 플러그인이 작동하지 않음' 오류 메시지가 표시됩니다.

A: Firebase Console을 사용하면 google-services.json를 다운로드합니다. 또한 대부분의 API에 대한 빠른 시작 가이드에서는 이 파일을 생성합니다. google-services.json 파일을 다운로드한 후 복사합니다. Android 스튜디오 프로젝트의 app/ 폴더 또는 app/src/{build_type} 폴더를 선택합니다.

Q: 'R.string.gcm_defaultSenderId' 기호를 찾을 수 없습니다. 'R.xml.global_tracker' 등

A: build.gradle 파일의 패키지 이름이 google-services.json 생성 시 입력한 패키지 이름 파일에서 참조됩니다. 잘 모르겠다면 시작하기 과정을 다시 살펴보고 새 json 파일이 생성됩니다