소개
Android 애플리케이션에서 Google API 또는 Firebase 서비스를 사용 설정하는 과정에서 build.gradle
파일에 google-services
플러그인을 추가해야 할 수 있습니다.
dependencies {
classpath 'com.google.gms:google-services:4.4.2'
// ...
}
google-services
플러그인에는 두 가지 기본 기능이 있습니다.
google-services.json
파일을 처리하고 애플리케이션 코드에서 사용할 수 있는 Android 리소스를 생성합니다. 자세한 내용은 JSON 파일 추가를 참고하세요.사용 설정한 서비스에 필요한 기본 라이브러리의 종속 항목을 추가합니다. 이 단계에서는 다음과 같이
app/build.gradle
파일에 Google 서비스 Gradle 플러그인을 적용해야 합니다.
apply plugin: 'com.google.gms.google-services'
./gradlew :app:dependencies
를 실행하여 이 단계의 결과를 확인할 수 있습니다.
JSON 파일 추가
google-services.json
파일은 일반적으로 Android 스튜디오 앱 모듈의 루트에 있는 app/
디렉터리에 배치됩니다. 버전 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 리소스로 참조할 수 있는 두 개의 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 파일을 가져옵니다.