Android Gradle

GDG Korea Android – Gradle CodeLab 의 내용을 정리한 글입니다.

gradle_codelab Gradle CodeLab - GDG Korea Android


Gradle 이란?

Gradle 은 빌드 자동화 도구로 Ant 의 강력하고 유연한 종속성 관리와 Maven의 빌드 효율성을 모두 가지고 있다. 안드로이드 스튜디오에서 Gradle 을 통해 빌드를 하고 있고, 이클립스에서 작업하던 내용을 안드로이드 스튜디오로 가져오려면 Gradle 빌드 파일을 만들어주어야한다. 안드로이드 뿐만 아니라 다양하게 Gradle 을 이용할 수 있지만 이 글에서는 안드로이드에 초점을 맞추어 설명하겠다. Gradle 과 관련된 더 자세한 내용은 아래의 링크를 참조하길 바란다.


Gradle 설치

먼저 Gradle 을 다운받고 압축을 풀어 임의의 경로에 놓는다. (다운로드 주소 : http://www.gradle.org/downloads) Mac 또는 리눅스에서는 홈 경로로가서 .bash_profile 파일에 아래의 내용을 추가한다. .bash_profile 이 존재하지 않으면 만들어준다.

$ cd ~
$ vi .bash_profile
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home
export ANDROID_HOME=/Users/proin/Documents/android-dev/sdk
export GRADLE_HOME=/Users/proin/Documents/gradle/gradle-1-2.11
export PATH=${PATH}:$GRADLE_HOME/bin:$ANDROID_HOME/tools:$GRADLE_HOME/bin

JAVA_HOME 은  자바가 설치된 경로를 적고, ANDROID_HOME 은 sdk 를 설치한 위치를 적는다. GRADLE_HOME 은 Gradle 을 다운받아 압축을 풀어 놓은 곳의 위치를 참조하여 적으면 된다. 위 설정을 마쳤으면, 터미널을 logout 했다가 다시 실행하고 제대로 동작하는지 확인해본다.

$ java -version
$ android
$ gradle -v

위에서부터 각각 자바의 버전확인, android sdk tool 실행, gradle 버전 확인 명령어이다. 환경변수가 제대로 설정되었다면 각각의 메시지가 나올 것이다.


안드로이드 프로젝트 생성

터미널에 들어가 아래와 같은 명령어를 이용하면 해당 위치에서 프로젝트를 생성 할 수 있다.

$ android create project
$ android create project -n HelloWorld -v 0.10.+ -t 17 -p HelloWorld -g -k com.example.helloworld -a HelloWorldActivity

android create project 명령어를 입력하면 해당 옵션에 대한 설명이 나온다. 위의 명령어를 입력하면 Gradle 을 이용하여 HelloWorld 라는 프로젝트를 생성하게 되고, HelloWorldActivity 가 생성된다. -t 는 타겟 SDK 로 아래의 명령어를 통해 사용할 SDK 버전의 id를 확인 할 수 있다. 사용자 별로 각각 다르기 때문에 꼭 확인하길 바란다.

$ android list target

Gradle Build

먼저 프로젝트 폴더로 이동하여 아래의 명령어를 입력해준다.

$ cd HelloWorld
$ gradle tasks

제대로 실행이 되었다면 아래와 같이 화면에 표시 될 것이다.

스크린샷 2014-05-04 오전 1.11.04

  각 명령어에 대한 설명이 자세히 나오니 빌드 할 때 참고하면된다. 이제 안드로이드 프로젝트를 빌드하기 위해 아래의 명령어를 실행해보자.

$ gradle assemble

위 명령어가 제대로 실행이 되었다면 BUILD SUCCESSFUL 메시지가 나오고, 디렉토리에 build 폴더가 생성된다. build 폴더에 들어가면 해당 프로젝트의 apk 가 추출되어있을 것이다. 빌드 된 프로젝트를 안드로이드에 디버깅하여 설치하려면 usb 케이블을 연결한 후, 아래의 명령어를 실행한다.

$ gradle installDebug

이 명령어는 gradle tasks 과정에 따라 달라질 수도 있으니 tasks 후 나온 화면의 목록을 참조하여 진행하는 것이 좋다. 가끔 이전 빌드와 충돌하여 오류가 발생하기도 하는데, 이럴 땐 gradle 빌드를 정리 한 후 다시 해주면 된다.

$ gradle clean

이클립스 작업 내역을 Gradle 로 Build 하기

https://github.com/GDG-Korea/GradleCodeLab

Gradle CodeLab 의 예제를 받기 위해, 위의 링크로 들어가서 소스코드를 다운받는다. 먼저 이클립스 작업 내역을 Gradle 및 안드로이드 스튜디오로 불러올 수 있게 만들기 위해 ApiDemos 예제를 살펴보자. ApiDemos 의 프로젝트로 이동하여 build.gradle 파일을 만들고 아래와 같이 입력하여준다.

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.10.+'
    }
}

apply plugin: 'android'

android {
    compileSdkVersion 19
    buildToolsVersion '19.0.3'
}

android {
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:19.0.+'
}

android {
    lintOptions {
        abortOnError false
    }
}

android 의  sourceSets 은 이클립스와 디렉토리 구조가 다르기 때문에 이러한 것을 직접 설정하여 주는 부분이다. Gradle로 빌드 하면 기존에 Manifest 에서 관리하던 SDK 버전을 Gradle 빌드에서 관리하는 것을 볼 수 있다. 이러한 점은 바뀔때마다 일일이 버전을 Manifest 에서 바꿀 필요가 없어 편리하다고한다.. gradle.build 파일을 만들었다면, 4번에서 했던것과 마찬가지로 빌드해보면된다. 또한 gradle.build 를 작성한 후에는 안드로이드 스튜디오에서 프로젝트를 불러와도 오류가 없이 제대로 빌드 될 것이다.


Picasso Project 예제

Gradle CodeLab 에서 진행한 Picasso Project 예제는, 피카소 프로젝트 예제를 변형하여 고흐의 작품이 나오게 하는 Gogh 앱을 flavor 로 생성하는 예제이다. 우선 PicassoProject 폴더 안의 Picasso/src 에 아래와 같이 디렉토리를 생성해 준다.

PicassoProject/Picasso/src/main
PicassoProject/Picasso/src/picasso
PicassoProject/Picasso/src/gogh

PicassoProject/gogh_flavor_files 안에 파일을 각각을 아래와 같이 gogh 에 디렉토리를 생성하여 복사한다.

http://gogh/java/com/example/picasso/Data.java
gogh/res/drawable-xhdpi/icon.png
gogh/res/values/strings.xml

main/java/com/example/picasso/Data.java 을 picasso/java/com/example/picasso/Data.java 로 이동한다. 그런 후 PicassoProject/Picasso/build.gradle 파일을 아래와 같이 편집해준다.

apply plugin: 'android'

android {
    compileSdkVersion 19
    buildToolsVersion '19.0.3'

    lintOptions {
        abortOnError false
    }
}

repositories {
    mavenCentral()
}

dependencies {
    compile 'com.android.support:support-v4:19.0.+'
    compile 'com.squareup.picasso:picasso:2.2.0'
    compile 'com.squareup.okhttp:okhttp:1.5.4'
}

android {
    signingConfigs {
        codelabConfig {
            storeFile file(store_file)
            storePassword store_password
            keyAlias key_alias
            keyPassword key_password
        }
    }

    productFlavors {
        picasso {
        }

        gogh {
            packageName "org.gdgkoradandroid.gogh"
            versionCode 1
            versionName "1.0.0"
            signingConfig signingConfigs.codelabConfig
        }
    }
}

여기서 주의해서 봐야 할 것은 맨 아래 android 블럭인데, signingConfigs 는 어플리케이션 서명과 관련된 부분이고 productFlavors는 프로젝트의 Flavor를 설정해주는 것이다. Flavors 설정에서 어플리케이션 서명 관련이 기술되기 때문에 꼭 signingConfig 를 먼저 기술하고 productFlavors 를 작성하여야한다. 이 순서를 지키지 않으면, 서명과 관련된 것이 기술되지 않은 상태로 Flavor 에서 서명을 이용하려 하기 때문에 오류가 발생하게된다. Groovy 가 스크립트 기반의 언어이기 때문에 이러한 순서가 중요하게 작용하는 듯 하다. 위에서 서명과 관련된 부분을 gradle.properties 로 따로 빼놓았으므로 PicassoProject/Picasso/gradle.properties 를 생성하여 아래와 같이 입력해준다.

store_file=../keystore/codelab.jks
store_password=codelab
key_alias=codelab
key_password=codelab

위와 같이 모두 설정하였다면 4번에서 설명한 거와 마찬가지로 프로젝트의 루트 디렉토리(PicassoProject)로 이동하여 빌드를 한다. 먼저의 예제와 차이가 있다면 gradle tasks 를 실행했을 때 나오는 명령어가 다르고 install 할때 명령어가 약간 차이가 있다는 점이다. gradle tasks 명령어를 통해 출력되는 리스트는 아래와 같다. 스크린샷 2014-05-04 오전 1.53.35   gradle tasks 후에 gradle assemble 로 빌드를 해 준 후, Picasso 프로젝트를 스마트폰에 설치하고 싶다면

$ gradle installPicassoDebug

위의 명령어를 입력하여 주면 되고, Gogh 프로젝트를 설치하고 싶다면

$ gradle installGoghDebug

명령어를 입력하여 주면 된다. 제대로 빌드가 되고 설치가 되었다면 아래와 같은 화면이 출력되는 어플리케이션이 설치될 것이다.

Screenshots_2014-05-03-17-20-49Screenshots_2014-05-03-17-21-53

댓글 남기기