일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- rx
- fullframe
- himatic7s2
- himatic7sii
- 미놀타
- COLORPLUS
- It
- Exception
- 풀프레임
- Sony
- Nikon
- Kodak
- portra400
- Android
- film
- 니콘
- e마운트
- variants
- Flavor
- gradle
- 필름카메라
- fm2
- himatic
- emount
- 하이매틱
- 35mmf2.8
- Minolta
- Realm
- SSL
- Git
- Today
- Total
BloByJames
Gradle Flavor 그리고 google-services.json 본문
이전에 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에서 확인하실 수 있습니다.
감사합니다.
'프로그래밍 > 안드로이드' 카테고리의 다른 글
날 미치게 하는 Exception: java.util.IllegalFormatConversionException: %d can't format java.lang.String arguments (0) | 2016.12.02 |
---|---|
날 미치게 하는 Exception: io.realm.exceptions.RealmError: Unrecoverable error. (0) | 2016.11.08 |
Gradle Flavor 그리고 apk build (0) | 2016.10.08 |
ViewPager와 Fragment 사용하기 (Fragment 함수 호출) (0) | 2016.09.28 |
RxJava로 EventBus, Otto를 대체해보자 (0) | 2016.09.24 |