본문 바로가기

개발환경 설정/Tools

Android Studio를 배워보자 - (1) 주요 특징 및 빌드 시스템

안드로이드 개발을 위한 IDE인 Android Studio가 공개된지도 약 반년이 다 되어가네요. 처음 공개되었을 때는 이클립스용 안드로이드 개발 플러그인인 ADT(Android Development Tools)에 비해 다소 불안정한 모습을 보여서 생각보다 실망을 많이 했었는데, 이제는 제법 그럴듯한 모양새도 갖추고, 많이 안정된 모습을 보여주고 있습니다. 즉, 이제는 '이클립스를 떠나야 할 때'라는 것이죠!


이클립스를 사용하다가 갑자기 안드로이드 스튜디오를 사용하면생긴 것도 다르고, 단축키도 다시 익혀야 해서 당분간은 혼란스러운 것이 한 두 가지가 아닐 것입니다. (저 또한 마찬가지였구요) 따라서, 안드로이드 스튜디오로의 성공적인 기변(?!)을 위해, 안드로이드 스튜디오에 대한 간략한 소개부터 시작하여 이클립스와 다른 점, 그리고안드로드 스튜디오에서 사용하는 새로운 빌드 시스템까지 차근차근 알아보겠습니다.


본 포스트는 Android Studio 0.3.5를 기준으로 작성되었습니다.

추후 업데이트로 인해 변경사항이 있을 수 있으니 참고 부탁드립니다.


업데이트 : 0.5.7 버전 기준으로 한 동영상 강좌가 업데이트되었습니다. 전반적인 내용은 비슷하지만, 몇몇 부분 변경사항이 있으므로 본문 내용을 볼 때 참고 부탁드립니다.




안드로이드 스튜디오의 프로젝트 구조


먼저, 안드로이드 스튜디오로 새 프로젝트를 하나 생성합니다. 프로젝트를 생성하는 방법은 이클립스와 다르지 않으므로 따로 여기에서 다루지 않겠습니다. (혹시 생성 과정이 궁금하신 분은  2013/05/21 - 안드로이드를 위한 새로운 IDE, Android Studio 를 참조하세요)


주의

앞에서 잠시 언급했듯이, 안드로이드 스튜디오는 이클립스와 다른 빌드 시스템을 사용합니다. 새로운 빌드 시스템은 Gradle을 사용하며, 시스템에 Gradle(조금 더 정확히 말하자면, gradlew)이 존재하지 않으면 인터넷에서 해당 툴을 자동으로 다운로드합니다. 따라서, 프로젝트를 생성할 때 인터넷 연결이 필요할 수 있습니다. (Gradle 및 gradlew에 대해서는 뒤에서 조금 더 자세히 알아보겠습니다)


프로젝트를 생성하면 다음과 같은 구조로 파일들이 생성됩니다. 이클립스 때의 프로젝트 구조와 다소 다른 모습을 하고 있는 것을 볼 수 있습니다.




위의 프로젝트 구성은 크게 다음과 같이 나눌 수 있습니다.



프로젝트를 구성하는 각 부분에 대해 조금 더 자세히 알아보겠습니다.


프로젝트 (Project)

이클립스에서 애플리케이션이나 라이브러리가 각각 하나의 프로젝트로 구성되어 있던 것과 달리, 안드로이드 스튜디오의 프로젝트는 범위가 더 넓습니다. 따라서, 프로젝트는 '모듈'이라 불리는 작은 프로젝트들로 구성됩니다. 예를 들어, 어떤 프로젝트가 애플리케이션 프로젝트 하나와 안드로이드 라이브러리 프로젝트 하나로 구성되어 있을 경우 이클립스에서는 이 두 개의 프로젝트가 각각 별개의 프로젝트로 존재하는 반면, 안드로이드 스튜디오에서는 이 두 개의 작은 프로젝트들을 모듈로 구성하여 하나의 프로젝트로 관리할 수 있습니다.


모듈 (Module)

모듈은 애플리케이션이나 라이브러리를 구성하는 최소 단위입니다. 이클립스의 프로젝트와 동일한 역할을 합니다. 모듈은 독립적으로 존재할 수 없으며, 항상 프로젝트 내에 포함되어 있어야 합니다.


Gradle Wrapper

빌드에 사용하는 Gradle 툴을 편리하게 사용할 수 있도록 도와주는 일종의 스크립트입니다. Gradle wrapper는 적절한 Gradle 바이너리를 자동으로 다운로드 해 주므로, 별도로 Gradle을 설치하지 않아도 빌드를 진행할 수 있도록 해 줍니다.


기타

build.gradle : 빌드 스크립트 파일입니다. 보통 여기에는 프로젝트 내 모듈들의 빌드 진행시 공통으로 적용해야 하는 설정들을 적어줍니다.

FirstAndroidStudio.iml : 안드로이드 스튜디오에서 사용하는 프로젝트 설정 파일입니다.

gradlew / gradlew.bat : Gradle wrapper를 통해 빌드를 진행하기 위한 스크립트입니다. (자세한 내용은 추후 다룹니다)

local.properties : 빌드를 진행할 때 필요한 환경변수 정보를 저장하는 파일입니다. 안드로이드 SDK의 경로가 이곳에 저장됩니다.

settings.gradle : 빌드와 관련된 환경설정 및 같이 빌드되어야 할 하위 모듈들의 정보를 포함하고 있습니다.



프로젝트를 구성하는 파일들을 관찰해보면, 이클립스 때 프로젝트 구성에 비해 파일들이 많은 것 같다는 인상을 받으실 겁니다. 이는, 안드로이드 스튜디오(IDE)와 빌드 시스템이 서로 독립적이기 때문입니다. 이클립스에서는 프로젝트 빌드를 이클립스 내에서 담당했지만, 안드로이드 스튜디오는 코드의 편집만을 담당할 뿐, 빌드는 Gradle을 통해 모두 수행됩니다. 때문에, 간혹 안드로이드 스튜디오의 프로젝트 설정과 Gradle 빌드 설정이 동기화되지 않아 스튜디오에서 에러로 표시하는 경우도 있습니다. 하지만, 빌드 절차와 IDE가 분리되어 있기 떄문에 프로젝트를 더 깔끔하게 관리할 수 있게 되었습니다.


프로젝트 구성에 대해 알아보았으니, 이제는 실질적으로 애플리케이션을 구성하는 모듈의 구조에 대해 자세히 알아볼 차례입니다. 모듈은 다음과 같이 구성되어 있습니다.



그림 4. 모듈의 구조


각 부분에 대해 자세히 알아봅시다.


build

빌드 과정에서 생성된 파일(R.java 등) 및 최종 산출물(*.apk)이 이곳에 저장됩니다.이클립스 기반 프로젝트에서 gen, bin 폴더와 동일한 역할을 합니다.


src

소스 및 리소스 파일이 저장됩니다. main 폴더 아래에 자바 소스를 저장하는 java 폴더와 리소스를 저장하는 res 폴더가 있습니다. 이와 함께 애플리케이션의 각종 정보를 저장하는 매니페스트 파일(AndroidManifest.xml)이 있습니다. 

쓸데없이 main 폴더가 왜 하나 더 있을까 궁금하신 분들도 많을 텐데, 이에 대한 자세한 내용은 추후 다른 포스트에서 다루도록 하겠습니다. 


build.gradle

모듈의 빌드 방법이 정의된 빌드스크립트입니다. 빌드에 사용할 SDK 버전부터 시작하여 애플리케이션 버전, 사용하는 라이브러리 등 다양한 항목을 설정하는 것이 가능합니다.


FirstAndroidStudio.iml

안드로이드 스튜디오에서 사용하는 모듈 설정 정보입니다.


위에서 가장 핵심 역할을 하는 것은 바로 build.gradle 파일입니다. build.gradle 파일 내부를 살펴보면서, Gradle 빌드 시스템에 대한 간략한 내용도 같이 알아보겠습니다.


build.gradle 파일 파헤치기


예제로 작성한 모듈의 build.gradle 내용은 다음과 같습니다.

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

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 17
    buildToolsVersion "19.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 19
    }
}

dependencies {
	compile 'com.android.support:appcompat-v7:+'
}

스크립트를 각 부분으로 나누어 자세히 알아보겠습니다.


1. 빌드 툴 및 저장소 경로 설정

buildscript {

    repositories {

        mavenCentral()

    }

    dependencies {

        classpath 'com.android.tools.build:gradle:0.6.+'

    }

}


여기에서는 빌드스크립트를 수행하는 데 필요한 설정을 합니다. dependencies 부분을 보면 빌드스크립트 수행을 위해 안드로이드용 gradle 플러그인(com.android.tools.build:gradle:0.6.+) 을 사용하고 있는 것을 알 수 있으며, 이 플러그인을 메이븐 중앙 저장소에서 찾도록 repositories{} 내에 정의해 주었습니다. 


정보 : 메이븐 중앙 저장소(Maven Central repository)

프로젝트를 만들다 보면, 여러 라이브러리를 사용하게 됩니다. 그런데, 프로젝트의 개수가 많아지고, 각 프로젝트에서 참조하는 오픈소스 라이브러리가 많아지면 빌드를 진행할 때 각 라이브러리들을 관리하기가 힘들어집니다. (각 프로젝트간 중복되는 라이브러리를 관리하기 어려움과 클래스패스를 추가로 설정해야 하는 불편함 등)

이러한 문제를 해결하기 위해, 메이븐 빌드 시스템에서는 라이브러리를 하나의 저장소에 모아 놓은 후, 빌드스크립트에 필요한 라이브러리의 이름과 버전을 적으면 빌드 진행 시 자동으로 해당 라이브러리를 다운로드하여 빌드를 진행합니다. 덕분에 추가로 라이브러리를 관리할 필요가 없어 다수의 프로젝트를 쉽게 관리할 수 있습니다.



2. 안드로이드 플러그인 적용 및 설정

apply plugin: 'android'


repositories {

    mavenCentral()

}


android {

    compileSdkVersion 19

    buildToolsVersion "18.0.1"


    defaultConfig {

        minSdkVersion 7

        targetSdkVersion 19

    }

}


안드로이드 빌드 설정 부분입니다. 안드로이드 빌드와 관련된 설정을 하기 위해 안드로이드 플러그인을 적용하고(apply plugin: 'android;'), android { ... } 부분에 빌드 관련 설정을 해줍니다. 여기에서도 buildscript{} 부분과 마찬가지로, dependencies 부에 추가되는 라이브러리들을 찾아볼 저장소로 메이븐 중앙 저장소를 지정해주고 있습니다.


compileSdkVersion : 빌드에 사용할 안드로이드 SDK 버전입니다. API Level로 지정하며, 여기에서는 19 (안드로이드 4.4/KitKat) 버전을 사용하고 있습니다.

buildToolsVersion : 빌드에 사용할 툴 버전을 지정합니다.

minSdkVersion : 애플리케이션을 실행하기 위한 최소 버전을 입력합니다.

targetSdkVersion : 애플리케이션이 주로 실행될 버전을 지정합니다.


위에서 minSdkVersion, targetSdkVersion은 매니페스트(AndroidManifest.xml)에서도 정의해주는 내용이지만, 이곳에 지정해주는 것이 우선순위가 더 높습니다. (매니페스트와 빌드스크립트에 모두 값이 지정되어 있는 경우 빌드스크립트에 정의된 값 사용)


3. 빌드에 필요한 라이브러리 설정

dependencies {

compile 'com.android.support:appcompat-v7:+'

}

모듈 빌드시 사용할 라이브러리를 설정합니다. 라이브러리 이름은 다음과 같은 규칙을 따릅니다.


[패키지 이름]:[라이브러리 이름]:[버전명]


여기에서, 버전명에 '+'이 지정되어 있는데, 이는 가장 최신 버전을 사용하는 것을 의미합니다. 이는 소수점 단위에도 사용할 수 있습니다. 만약, 버전에 2.0.+ 을 지정하게 되면 2.0 버전대 중 가장 최신 버전을 사용하게 됩니다.



프로젝트 빌드 및 실행


안드로이드 스튜디오에서 프로젝트를 빌드하는 것은 이클립스와 크게 다르지 않습니다.  메뉴에서 Build >  Make Project를 선택하면 프로젝트에 포함된 모듈들을 빌드하여 APK 파일을 생성해줍니다.



Make Project 외에 다른 메뉴들이 하는 역할은 다음과 같습니다.


Make Module [모듈명] : 모듈을 빌드하여 해당 모듈의 결과물을 생성합니다. 애플리케이션 프로젝트의 경우 APK 파일이 생성됩니다.


Compile Module [모듈명] : 애플리케이션 내 리소스를 컴파일하여 R.java 나 AIDL 인터페이스 파일을 생성합니다. 안드로이드 라이브러리 프로젝트의 경우 다른 모듈에서 이 모듈을 참조할 수 있도록 AAR(Android Archive package)를 생성합니다.


빌드가 완료된 프로젝트를 에뮬레이터나 단말기에서 실행하려면 툴바에서 실행 버튼을 누르거나, 단축키(Shift+F10)을 누르면 됩니다.



툴바의 실행 버튼 (녹색 화살표)



지금까지 안드로이드 스튜디오와 새롭게 바뀐 빌드 시스템에 대해 알아보았습니다. 안드로이드 스튜디오도 그렇고, 빌드 시스템도 이전의 안드로이드 개발과는 다른 점이 많아 적응하기가 쉽지는 않을 것입니다. 하지만 시간을 두고 조금씩 훑어본다는 느낌으로 보시면 적응하는 데에는 큰 무리가 없을 것입니다.