** 사용 이유
기존에 테스트 서버와 연결되는 앱과 실제 서비스 서버와 연결되는 앱이 따로 설치되기를 희망하였음.
이번에 마이그레이션 작업 진행하며 기존 앱과 따로 설치하여 테스트하기를 희망함.
(기존 앱은 이클립스로 작업)
** 방법
1. 해당 모듈의 build.gradle에 아래와 같은 형식으로 추가
- 나는 마이그레이션/DEV/SERVICE로 나누었음.
flavorDimensions "mode"
productFlavors {
migration {
dimension "mode"
applicationIdSuffix ".migration"
buildConfigField 'boolean', 'isTestMode', "true"
}
// dev {
// dimension "mode"
// applicationIdSuffix ".dev"
// buildConfigField 'boolean', 'isTestMode', "true"
// }
service {
dimension "mode"
applicationIdSuffix ""
buildConfigField 'boolean', 'isTestMode', "false"
}
}
flavorDimensions - 무엇인지는 모르겠지만.. flavor 설정 시 모든 항목이 같은 flavorDimensions에 속해야 한다는 에러메세지가 떠서 추가
migration/dev/service - 그냥 자기가 마음대로 설정 가능. 이후 폴더를 생성할 때 동일한 이름으로 생성해야 한다. (대문자가 되는지는 아직 확인하지는 못했다.) 이 때 Flavor가 하나 이상 등록되어있으면 나중에 APK 뽑을 때 Flavor를 무조건 선택해야되서 service를 추가하였음.
applicationIdSuffix - 식별자를 정하는 것 같음. Suffix 설정 시 applicationId 뒤에 붙여지게 된다. 예를 들어 마이그레이션용 앱의 applicationId는 com.example.flavortest.migration 이 되는 식. 나중에 google-services.json 복사 시 문서 내의 applicationID와 동일하게 적어야 한다. service는 기본 설정과 동일하게 해 주기 위해서 빈 값으로 설정하였다.
buildConfigField - 설정하게 되면 BuildConfig 내부에 static 변수로 등록이 되서 소스 코드 내에서 사용이 가능하다. 예를 들어 migration과 dev의 앱에서 BuildConfig.isTestMode는 true지만 service에서는 false가 된다.
2. 각 flavor 별로 폴더 추가
위에서 만든 flavor별로 폴더를 만들고, 내부에 google-services.json을 복사해서 넣는다.
(이제와서 보니 service 폴더랑 main 안의 google-services.json 파일은 없어도 될듯..)
각 flavor별로 리소스 관리를 할 수 있다.
따로 설정하지 않으면 기본(main)폴더 내의 리소스를 사용하는 듯.
이런식으로 앱 아이콘을 따로하고 싶을 때 사용한다. (우측은 플레이 스토어에 등록된 앱, 좌측은 migration flavor로 설치한 앱)
3. google-services.json 수정
google-services.json 파일은
이렇게 package_name 부분만 변경해주면 된다.
gradle의 applicationId에 위에서 추가했던 applicationIdSuffix 를 더한 문자열을 쓰면 됨.
예를 들어 migration 폴더의 package_name은 "com.example.flavortest.migration"로 변경하면 됨.
4. Manifest 수정(FileProvider 사용 시)
마지막으로 혹시 FileProvider을 정의해서 사용한다면, 혹은 Manifest 파일에서 android:authorities 속성을 사용한다면 android:authorities 속성의 값을 변경해야 한다.
(이렇게 안 하면 앱이 동시에 설치가 안 된다.)
android:authorities="${applicationId}.fileprovider"
이와 같이 applicationId를 변수로 가져오게 수정하여야 한다.
5. 빌드 시 flavor 선택하기
Build Variants 메뉴를 통해 Run 및 Instant Run 시 어떤 flavor로 실행할 지 선택할 수 있다.
APK 추출 시에는 Flavors 부분에서 선택할 수 있다.
(그런데 Flavors가 하나 이상 등록되어있을 때 선택 해제가 안 된다. 그래서 service Flavor를 따로 만들었음.)
** 참고
http://gun0912.tistory.com/74
https://stackoverflow.com/questions/16267785/install-shows-error-in-console-install-failed-conflicting-provider
https://medium.com/@iammert/android-product-flavors-1ef276b2bbc1
'개발 > Android' 카테고리의 다른 글
TextView에 AutoSize 적용 안될때 (0) | 2018.10.08 |
---|---|
FileProvider의 Path를 여러 개 등록하고 싶을 때 (0) | 2018.08.06 |
permission denied for window type 2002 (0) | 2018.07.24 |
RetroFit2 라이브러리 공부 - 단일 데이터 통신 (0) | 2018.07.09 |
Glide 정리 (0) | 2018.06.02 |