요구사항 중에 한가지 프로젝트를 가지고 여러곳의 버전으로 배포해야 하는 업무가 있었다.
앱의 아이콘 , 앱 이름 등을 변경해야했고 그안에 몇가지 String 리소스들을 수정하면 된다.
소스 코드는 동일하다.
flavor 라는 키워드를 통해 정보를 접할수 있다.
예제들도 많았고 공홈에서도 찾아볼수 있다.
보통 앱을 개발 할때 운영(Real)앱과 개발(Test)앱을 분리하여 관리한다고 한다.
또는 유료앱과 무료앱을 나누어서 개발 관리 할 목적으로 많이들 사용하는거 같다.
어쩃든 목적은 다르나 내용은 같기에 언제가 또 사용할 후를 위해 포스팅을 생각했다.
단순히 빌드 옵션만 변경해서 사용한다고 생각하면 되겠다. 이론은 쉬웠지만 실전은 막히는 부분이 많았다.
1. build.gradle 수정하기
productFlavors {
aaaa {
dimension "mode"
applicationId "com.lasselindh.aaaa"
versionCode 101
versionName "1.0.1"
buildConfigField "String", "LASSELINDH", "\"AAAA\""
buildConfigField "boolean", "isTrue", "true"
buildConfigField "int", "Type", "0"
}
bbbb {
dimension "mode"
applicationId "com.lasselindh.bbbb"
versionCode 102
versionName "1.0.2"
buildConfigField "String", "LASSELINDH", "\"BBBB\""
buildConfigField "boolean", "isTrue", "true"
buildConfigField "int", "Type", "1"
}
cccc {
dimension "mode"
applicationId "com.lasselindh.cccc"
versionCode 103
versionName "1.0.3"
buildConfigField "String", "LASSELINDH", "\"cccc\""
buildConfigField "boolean", "isTrue", "true"
buildConfigField "int", "Type", "2"
}
dddd {
dimension "mode"
applicationId "com.lasselindh.dddd"
versionCode 104
versionName "1.0.4"
buildConfigField "String", "LASSELINDH", "\"dddd\""
buildConfigField "boolean", "isTrue", "true"
buildConfigField "int", "Type", "3"
}
}
productFlavors를 추가해야한다는것. 그안에 이제 버전이름별로{}안에 써주면되겠다.
자세한 내용은 모르겠지만 영어그대로 해석하면서 모르겠는건 일단추가시키고 혹시모를 숫자는 겹치지않게 수정한것.
하고 우측상단오른쪽에 sync now하면 위에 첨부한 그림처럼 확인해보면된다.
2. 폴더 작업
해당프로젝트 폴더 들어가고 -> app -> src ->main 이있을텐데 그밑에 myfolder로 새로 만든거고 그안에 ->
aaaa,bbbb,cccc,dddd폴더를 추가 하면된다. 그안에 res폴더도.
그다음 sourceSets이란걸 bulid에 또 추가수정해야한다.
sourceSets {
main {
res.srcDirs = ['src/main/res']
}
aaaa {
res.srcDirs = ['src/myfolder/aaaa/res']
}
bbbb {
res.srcDirs = ['src/myfolder/bbbb/res']
}
cccc {
res.srcDirs = ['src/myfolder/cccc/res']
}
dddd {
res.srcDirs = ['src/myfolder/dddd/res']
}
}
나눈 버전별로 작동해야하는 리소스가 다르기 때문에 이렇게 나눠준것 같고 실제 그안에 폴더에서 수정한것을 반영하여
해당 버전을 빌드 했을 때 내가 원하는 것을 볼수 있겠다.(앱 아이콘이라던지, 앱 이름이라던지, 안에 String 값등)
내가 막힌건 이다음이다. 과연 이미지리소스를 폴더별로 어떻게 만들어 넣어 줄수있는가.
굉장히 간단해보이면서도 짜증나게 안되고 막혔고 왜안되는지도 몰르겠다.
해결법부터 얘기하면 새로운 프로젝트에서 이미지에셋을 이용해 앱 아이콘을 만들었다. 그런뒤 그 mipmap 폴더별을
복사하고 aaaa에 'src/myfolder/aaaa/res' 에 수동으로 옮겼다. 그렇게 4번 반복.
처음 첨부한 사진에서 하나씩 골라 빌드 하고 실행시키면되겠다. 그렇다면 해당 버전에 맞게 위 사진 첨부처럼 되겠다.
잘 정리해주신 분 링크 - 이 분설명보고 할수있었다.
https://github.com/hanjuwan/FlavorSample
'Before > Android' 카테고리의 다른 글
안드로이드 특징(컴포넌트) (0) | 2020.05.27 |
---|---|
android 그래프 그리기 / MPandroidChart 라이브러리 (0) | 2020.05.15 |
Constraint Layout (0) | 2020.04.10 |
안드로이드 개발시 주의해야할 3가지 보안성 (0) | 2020.03.27 |
데이터 베이스, SharedPreference (0) | 2020.03.16 |