Google 서비스 Gradle 플러그인

소개

Android 애플리케이션에서 Google API 또는 Firebase 서비스를 사용 설정하는 과정에서 google-services 플러그인을 build.gradle 파일에 추가해야 할 수도 있습니다.

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

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

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

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

JSON 파일 추가

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

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

참고: 출시 디렉터리에 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 처리의 주요 결과는 Java 코드에서 Android 리소스로 참조할 수 있는 2개의 XML 파일을 생성하는 것입니다. 다음은 각 파일의 예입니다.

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: 빌드할 때 '파일 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 파일을 가져옵니다.