BuildVariants, BuildFlavor, BuildType

2022. 6. 27. 13:11·Android

BuildVariants

https://developer.android.com/studio/build/build-variants?hl=ko

단일 프로젝트에서 다양한 버전의 앱을 생성, 관리 하는 방법

빌드 타입을 나눈 후 빌드나 디버그 시 원하는 빌드 타입을 선택해서 빌드를 하면 됨

BuildType

   buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled true
            buildConfigField "boolean", "isDebug", "false"

        }
        debug {
            minifyEnabled false
            buildConfigField "boolean", "isDebug", "true"
        }
    }

릴리즈 빌드와 디버그 빌드 때 다른 설정을 해줄 수 있음

BuildFlavor

    flavorDimensions += "server_type"

    productFlavors {
        release_server {
            dimension "server_type"
            manifestPlaceholders = [appName: "운영서버"]
            applicationIdSuffix ".release_server"
            resValue "string", "appName", "운영서버"
            buildConfigField "boolean", "isReleaseServer", "true"
        }

        dev_server {
            dimension "server_type"
            manifestPlaceholders = [appName: "데브서버"]
            applicationIdSuffix ".dev_server"
            buildConfigField "boolean", "isReleaseServer", "false"
            resValue "string", "appName", "데브서버"
        }
    }

flavorDimensions을 추가해서 원하는 설정을 나누어 줌

dimension "flavorDimensions"으로 어떤 플레이버인지 설정해줌

빌드 시 원하는 타입 선택

Build Variants 툴을 열어서 액티브된 타입을 바꾸면 된다

BuildConfig

buildConfig를 이용해서 분기 처리를 해두면 매번 특정 조건에 맞춰서 코드를 수정하지 않아도 됨

BuildConfigField 사용법과 예시

buildConfigField "타입", "변수명", "기본값"
 flavorDimensions += "server_type"
 productFlavors {
        release_server {
            dimension "server_type"
            buildConfigField "boolean", "isReleaseServer", "true"
        }

        dev_server {
            dimension "server_type"
            buildConfigField "boolean", "isReleaseServer", "false"
        }
}

릴리즈 서버와 데브 서버를 구분할 용도로 boolean 타입의 변수를 만들었다.

  val serverURL: String
        get() {
            return if (BuildConfig.isReleaseServer) {
                ReleaseServer
            } else {
                DevServer
            }
        }

Gradle 빌드를 하면 BuildConfig 클래스가 생성됨

BuildConfig 클래스를 임포트해서 isReleaseServer 를 이용하여 분기처리를 진행함

빌드 타입 별로 다른 패키지명 부여하기

applicationIdSuffix "변형할 패키지 이름"
flavorDimensions += "server_type"

    productFlavors {
        release_server {
            dimension "server_type"
            applicationIdSuffix ".release_server"
        }

        dev_server {
            dimension "server_type"
            applicationIdSuffix ".dev_server"
        }
    }

플레이버별로 다른 applicationIdSuffix를 작성

기본 패키지명+”applicationIdSuffix”로 새 패키지명이 부여됨

패키지명 분리로 인해 google-service.json 오류가 난다면 다음 글을 참고
https://teqoo.tistory.com/283


빌드 타입 별로 다른 이름 부여하기

resValue "변수타입", "변수명", "값"
flavorDimensions += "server_type"

productFlavors {
    release_server {
        dimension "server_type"
        manifestPlaceholders = [appName: "운영서버"]
        resValue "string", "appName", "운영서버"
    }

    dev_server {
        dimension "server_type"
        manifestPlaceholders = [appName: "데브서버"]
        resValue "string", "appName", "데브서버"
    }
}

AndroidManifest.xml

  <application
        android:name=".ApplicationManager"
        android:label="${appName}">

appName를 만들고 매니페스트에서 해당 변수를 이름으로 사용하도록 구현된 로직

빌드 타입 별로 다른 버전 이름을 부여하기

디버그 옵션 false인 상태에서는 버전명 으로 빌드 되고

디버그 옵션이 true 인 상태에서 빌드 시에는 버전명-DEV로 빌드 하도록 구현된 로직

파이어베이스 크래쉬틱스에서 버전명으로 실 사용자 크래쉬와 테스트용 크래쉬를 나누기 위해 로직을 구현

 defaultConfig {
        applicationVariants.all { variant ->
            def flavor = variant.mergedFlavor
            def versionName = flavor.getVersionName()

            if (variant.buildType.name == 'debug') {
                versionName += '-DEV'
            }

            variant.outputs.each { output ->
                output.versionNameOverride = versionName
            }
        }
    }

applicationVariants 리스트를 이용해서 빌드 타입과 빌드 버전을 알아낸 후빌트 타입이 dev 인 경우 버전이름에 -dev를 추가하는 로직

저작자표시 (새창열림)
'Android' 카테고리의 다른 글
  • cannot be found from the current destination Destination
  • BuildFlavor를 적용했을 때 Firebase sdk 키 설정
  • SSLHandshakeException, CertPathValidatorException
  • GDG Android Korea 팀에서 준비한 AAC-ViewModel 토론을 듣고..
개발세탁기
개발세탁기
알고리즘 세탁 중..
  • 개발세탁기
    개발세탁소
    개발세탁기
  • 전체
    오늘
    어제
    • 분류 전체보기 (277)
      • 개발일기 (28)
        • 갔다온 곳 (9)
        • 일기 || 회고 || 사는 이야기 (1)
        • 개발 팁 (6)
      • react (0)
      • Unity (27)
        • 개발환경 (1)
        • 공부 (6)
        • 에러 (6)
        • Survival Shooter tutorial (2)
        • Google Cast + Unity (4)
        • NGUI (2)
        • UGUI (2)
        • Blender (1)
        • C# (2)
        • Visual Studio (1)
      • Python (1)
        • 개발환경 (2)
        • 일기 (3)
        • 파이썬 300제 (42)
        • Django (11)
      • Node.js (23)
        • 개발환경 (1)
        • 일기 (4)
        • 에러 (1)
        • 공부 (2)
        • openmct (2)
      • Tomcat 8, 8.5 (5)
        • 설치법 (1)
        • 문제 해결법 (4)
      • Android (40)
      • iOS (4)
      • Kotlin (2)
      • Swift (5)
      • Flutter (3)
      • JAVA (8)
        • 개발환경 (1)
        • 공부 (4)
        • Lambda (3)
      • Oracle (2)
      • 웹 개발 (12)
        • Maven (8)
        • Gradle (4)
        • Spring4 & tiles3 (1)
        • mybatis (0)
        • Websocket (2)
        • Java Script (4)
        • HTML5 & CSS3 (3)
      • Git (6)
      • Tizen (4)
      • 개발 도와주는 프로그램 (4)
        • Window (3)
        • macOS (4)
      • IDE (0)
        • Jetbrains (3)
        • Xcode (1)
        • Visual Studio || Visual Cod.. (0)
        • Eclipse (2)
        • Cloud9 (1)
      • 컴퓨터 과학 (7)
        • 운영체제 (1)
        • DB이론 (1)
        • UML (5)
      • 책 (0)
        • 한 권으로 읽는 컴퓨터 구조와 프로그래밍 (0)
        • 헤드 퍼스트 디자인 패턴 (0)
  • 공지사항

    • contact
    • 이것저것 개발하게 된 개발자
  • 인기 글

  • 태그

    개발자님_그_프로그램은_뭐예요
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
개발세탁기
BuildVariants, BuildFlavor, BuildType
상단으로

티스토리툴바