참조 : Configuring Gradle Builds

안드로이드 프로젝트를 생성하면, 프로젝트 및 모듈 내에 build.gradle 파일이 생성된다. 우리는 이 파일을 입맛대로 변경함으로써 빌드 환경을 마음대로 주무를 수 있다. 프로젝트 파일을 새로 만들게 되면 아래와 같은 build.gradle 파일이 하나 생기게 된다.

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "net.yatopark.testapp"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    signingConfigs {
        
    }

    productFlavors {

    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
}

하나씩 옵션에 대해서 살펴보도록 하자.

1. apply plugin: ‘com.android.application’

apply plugin: ‘com.android.application’은 안드로이드 플러그인 사용을 gradle에 적용하는 것이다.  이 옵션은 top-level에서 선언되어야 한다.

2. android {…}

안드로이드와 관련된 빌드 설정은 이곳 안에서 세팅 된다.

3. compileSdkVersion, buildToolsVersion

compileSdkVersion은 앱 컴파일시 사용할 SDK 버전을 지정한다. buildToolsVersion 역시 사용할 빌드툴의 버전을 명시하는 부분이다.

4. defaultConfig{…}

AndroidManifest.xml에서 사용하는 설정들에 대해서 동적인 옵션을 주고 싶을 때 이 블록내에 포함시킨다. 예를들면 versionCode나 versionName등의 값을 이곳에서 설정 할 수 있다.

5. buildTypes{…}

dev, alpha, beta, release 같이 빌드 타입 종류를 지정한다. 당연히도 이러한 빌드 타입에 따라서 minify나 proguard 설정, 사이닝 키 설정도 이곳에서 해야 한다.

//...
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.myReleaseKey
        }
    }
//...

 6. signingConfigs{…}

앱 서명을 위한 사이닝 키 설정을 이곳에서 한다. 키스토어 파일 경로를 지정하고 keyAlias, keyPassword, storePassword를 설정해주면 되긴 하는데 build.gradle 파일에다가 패스워드 정보를 집어넣는건 보안에 좋지 않으므로 다음과 같이 환경변수로 가져오도록 한다.

// ...
    signingConfigs {
        myReleaseKey {
            keyAlias System.getenv("KEY_ALIAS")
            keyPassword System.getenv("KEY_PASSWORD")
            storeFile file('myReleaseKey.keystore')
            storePassword System.getenv("KEYSTORE_PASSWORD")
        }
    }
// ...

 7. productFlavors{…}

앱 자체의 특성을 다르게 하여 빌드할 때 사용한다. 예를들면 release 빌드이긴 한데 pro버전/free버전을 따로 내고 싶은 경우 productFlavor를 추가하여 쉽게 빌드 할 수 있다.

// ...
   productFlavors {
        pro {
            applicationId = "com.example.my.pkg.pro"
        }
        free {
            applicationId = "com.example.my.pkg.free"
        }
    }
// ...

 8. dependencies{…}

라이브러리와 같은 의존성 추가 시 이곳에 작성한다. MVN 중앙저장소에 있는 라이브러리를 그대로 사용할 수 있다.

// ...
dependencies {
    // Module dependency
    compile project(":lib")

    // Remote binary dependency
    compile 'com.android.support:appcompat-v7:19.0.1'

    // Local binary dependency
    compile fileTree(dir: 'libs', include: ['*.jar'])
}
// ...