2022년 10월 18일 화요일

Flavors 각상황(Dev, Stage, Product) 별로 패키지명과 리소스 API주소등을 달리하고 싶을때

Flavors 각상황(Dev, Stage, Product) 별로 패키지명과 리소스 API주소등을 달리하고 싶을때

각상황(Dev, Stage, Product) 별로 패키지명과 리소스/API주소등을 달리하고 싶을때

앱빌드시에 테스터에게 전달할 파일따로/ 리리스용 파일따로 분리해서 리소스도 다르게 해서 패키징 하고 싶을때가 있다.
이떄 Gradle 의 Android속성중에 productFlavors 라는걸 이용하면 각 상활별로 APK 를 만드는게 가능하다.

사용예

   flavorDimensions "environment"

   productFlavors {
       dev {
           dimension "environment"
           applicationIdSuffix ".free"
           manifestPlaceholders = [ appLabel: "Dev" ]
           resConfigs "ko"
           minSdkVersion 23
       }

       stage {
           dimension "environment"
           applicationIdSuffix ".stage"
           manifestPlaceholders = [ appLabel: "Stage" ]
           resConfigs "en", "ko"
           minSdkVersion 19

       }
       product {
           dimension "environment"
           applicationIdSuffix ".product"
           manifestPlaceholders = [ appLabel: "Product" ]
           resConfigs "en", "ko", "ja"
           minSdkVersion 19

       }
   }

어플리케이션고유아이디, 앱이름, 첨부될 리소스구분, 그밖의 android 관련 설정을 각각 할수 있다.
또한 설정파일은 앱소스코드에서 BuildConfig를 통해 설정값을 읽어 올수도 있다.

enter image description here

디버그, 릴리스, 검증용 앱의 설정을 달리하여 빌드해보자.

여러팀하고 개발하다 보며 Debug, Qa 용으로 앱의 설정을 바꿔서 빌드해야될 때가 있다.
일단 현재 src/main에 있는 AndroidManifest.xml에서 application의 android:name을 삭제하여 Debug, qa, release 각각 빌드할때 앱이름을 바꾸도록 하자
아래와 같이 각buildtype에 맞게 폴더를 만들고 AndroidManifest.xml의 속성을 변경해보자.

-debug
/src/debug/java/com/xxx/myapp/MainDebugApp.kt
디버그 시에만 Timber를 찍자
override fun onCreate() {  
    super.onCreate()   
    Timber.plant(Timber.DebugTree())  
}
AndroidManifest.xml
<application android:name="com.xxx.mytvapplication.MainDebugApp">
string.xml 
<resources>  
  <string name="app_name">Debug My Tv Application</string>  
</resources>

-qa
/src/debug/java/com/xxx/myapp/MainQaApp.kt
AndroidManifest.xml
<application android:name="com.xxx.mytvapplication.MainQaApp">
string.xml 
<resources>  
  <string name="app_name">Qa My Tv Application</string>  
</resources>

-release
/src/debug/java/com/xxx/myapp/MainRelaseApp.kt
여기서 실제 릴리스 할때 필요한 처리를 한다. 예를 들어
override val isReleaseVersion: Boolean = true
 
AndroidManifest.xml
<application android:name="com.xxx.mytvapplication.MainRelaseApp">
string.xml 
<resources>  
  <string name="app_name">Qa My Tv Application</string>  
</resources>

Build Variants에서 devDebug, devQa를 선택하고 실행하면 된다.
Singing관련 에러가 난다면 File->Project Structure에서 Build Variants->Build Types에서 release, dev,qa의 설정값을 변경해본다.

물론, 레이아웃과 리소스등도 각 폴더에 배치하면 각 빌드상황에 맞게 적용되어진다.

0 comments:

댓글 쓰기