BloByJames

Gradle Flavor 그리고 google-services.json 본문

IT/Android

Gradle Flavor 그리고 google-services.json

blobyjames 2016. 10. 21. 02:11

이전에 Gradle Flavor 그리고 apk build에서 여러 version의 apk를 build하는 방법을 소개해드렸는데요,


이번에는 Flavor와 Google API를 동시에 사용하면서 발생하는 문제점과,

문제점을 해결하는 방법에 관하여 글을 작성해보려 합니다.


google-services.json file, Google API를 사용하시는 분들에겐 익숙한 file이죠. 하지만 flavor를 잘 사용하고 있다가, google-services.json file을 추가하는 순간, package를 찾을 수 없다는 error가 발생하여,

flavor를 방치해둔 채로 사용하지 못하는 분들이 있을거라고 생각합니다.

있어야해요... 제 blog가 조금이나마 도움이 되었으면 합니다.


위와 같은 error가 발생하는 이유는,

API Console에서 만든 project와 flavor들 간의 package(applicationId)명이 다르기 때문이죠.


google-services.json이 어디서 나타난 아이인지는 모르시는 분들은,

사용하고자 하는 Google API 문서를 보고 천천히 하라는대로 따라하다보면,

google-services.json file을 download 하셨을 거라고 생각합니다.

(응? 이에 대한 설명이 부족한 점은 죄송....)


그럼, Gradle Flavor 그리고 apk build에서 다뤘던 build.gradle 예제를 가지고 설명하겠습니다.

productFlavors {
dev {
applicationId "me.fobid.flavorexample.dev"
testApplicationId "me.fobid.flavorexample.dev.test"
}
jp {
applicationId "me.fobid.flavorexample.jp"
testApplicationId "me.fobid.flavorexample.jp.text"
}
ko {
applicationId "me.fobid.flavorexample"
testApplicationId "me.fobid.flavorexample.text"
}

}

이전에 setting 해 놓은 flavor 입니다.


productFlavors에 추가해주어야 할 것이 있습니다.

productFlavors {
dev {
applicationId "me.fobid.flavorexample.dev"
testApplicationId "me.fobid.flavorexample.dev.test"

println "Using Dev google-services.json"
copy {
from 'src/dev/'
include '*.json'
into '.'
}
}
jp {
applicationId "me.fobid.flavorexample.jp"
testApplicationId "me.fobid.flavorexample.jp.text"

println "Using Dev google-services.json"
copy {
from 'src/jp/'
include '*.json'
into '.'
}
}
ko {
applicationId "me.fobid.flavorexample"
testApplicationId "me.fobid.flavorexample.text"

println "Using Dev google-services.json"
copy {
from 'src/ko/'
include '*.json'
into '.'
}
}
}

눈치가 빠른 분들은 이제 뭘 해야 하는지 알고있을거라고 믿습니다.


src 하부에 각 flavor directory에 google-services.json file을 각각,

CRTL+C, CTRL+V


물론! src 하부에 직접 위치 한 google-services.json file을 삭제해야지 duplicated error가 발생하지 않습니다.



여기까지 오셨으면, 각 google-services.json을 열어서 수정해주어야 할 것이 한가지 있습니다.


file을 열어보면 대충 이런식으로 생겼죠?



{
"project_info": {
"project_number": "YOUR_PROJECT_NUMBER",
"firebase_url": "YOUR_FIREBASE_URL",
"project_id": "YOUR_PROJECT_ID",
"storage_bucket": "YOUR_STORAGE_BUCKET"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "MOBILESDK_APP_ID",
"android_client_info": {
"package_name": "YOUR_PACKAGE_NAME"
}
},
"oauth_client": [
{
"client_id": "YOUR_CLIENT_ID",
"client_type": 3
}
],
"api_key": [
{
"current_key": "YOUR_CURRENT_KEY"
}
],
"services": {
"analytics_service": {
"status": 1
},
"appinvite_service": {
"status": 1,
"other_platform_oauth_client": []
},
"ads_service": {
"status": 2
}
}
}
],
"configuration_version": "1"
}

다른건 다 신경쓸 필요 없고, 저희에게 필요한건 "client_info":에 있는

"package_name": "YOUR_PACKAGE_NAME"

요 녀석입니다.


각 flavor directory에 있는 file에서 "package_name":을 찾아서

productFlavors에서 설정했던 applicationId를 "YOUR_PACKAGE_NAME"에 넣어줍니다.


끝이에요.

간단하죠?


물론, 기존에 존재하는 google-services.json file을 재활용해서 사용할 수도 있지만,

Google API Console에서 project를 flavor 별로 만들어서

(package 이름은 flavor applicationId와 동일하게) 사용하는 방법도 있습니다.


알고나면 참 간단한건데 야근하는 일이 없기를 바라면서

포스팅을 마치겠습니다.


사용된 예제는 flavor-example-android/google-services-flavor에서 확인하실 수 있습니다.


감사합니다.

Comments