태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

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

2014.05.10 00:15

안드로이드 개발을 위한 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)을 누르면 됩니다.



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



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



저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

커니 개발환경 설정/Tools , , , , , , , , , , , , , , , ,

  1. Blog Icon
    뇽뇽

    이클립스보다 최적화가 잘 되어있나요? 저는 생소하기도 하고 오히려 느리다는 느낌도 받는거 같습니다. 설치과정에서 문제가 있었던 걸까요

  2. 아직까지는 공식적으로 'Early Access preview'인 만큼, 문제가 좀 많은 것 같습니다. (당장 최신 버전인 0.3.5에서도 심각한 오류가 하나 있다죠...)
    하지만, IDE는 제쳐두더라도 새로운 빌드 시스템에는 슬슬 적응하는 것이 훨 나을 것 같습니다~

  3. Blog Icon
    autar

    추후에 다루실 주제일지도 모르지만, 이클립스 프로젝트를 export 하여 안드로이드 스튜디오로 import 하는 부분에 대해 궁금한 점이 있습니다.

    이클립스에서 프로젝트와 안드로이드 스튜디오의 모듈이 같은 역할을 한다고 하셨는데, 그러면 이클립스에서 gradle 로 export 한 후에, 안드로이드 스튜디오에서는 import module을 사용해서 들여와야 하는 것일까요? import project 로 가져오면 안드로이드 스튜디오의 기본 구조와 구조가 서로 다르기 때문에 빌드 및 실행에 어려움이 있고, 그렇다고 새 프로젝트를 만들고 모듈로 가져오자니 뭔가 이상한 것 같기도 하고요.

    혹시 이클립스에서 돌리던 프로젝트를 안드로이드 스튜디오에서 import 하여 빌드해보신 경험이 있으시다면 추후에 한 번쯤 다뤄주시면 참 좋을 것 같습니다. 좋은 글 감사합니다.^^

  4. 안드로이드 스튜디오에도 preview버젼이라고 따로 있나요?
    말씀하신대로 gradl화일을 코딩하여 build하였는데 탐색기상에 build폴더가 없군요. 안내바랍니다. 정식 스튜디오를 따로 내려받아야 하나요?

  5. 빌드 폴더는 프로젝트를 빌드한 결과물이 저장되는 폴더입니다. 맨 처음 프로젝트를 생성한 경우 없을 가능성이 높습니다.

  6. Blog Icon
    양군

    1.22 버전 이제 안정화가 되었나 싶어서 슬슬 만져보는데.. I7 1세대 쓰는데..
    이클립스보다도 느린 느낌이 드는데요
    세팅 문제인지.. 좀더 고사양인지 의문이 드네요.

    문제는 아직도 이걸로 플젝을 시작도 못 해봤습니다.

    팀 작업이니까..; 전원 다 쓰지 않는 이상 힘들지 싶네요.

  7. 최근 1.30으로 올라오면서 그래들 버전도 2.4로 업데이트 되었습니다.
    저는 사실 잘 모르겠는데 많은 분들이 많이 빨라졌다 하시더군요.

    이클립스를 쓸 때보다 빌드 시간(Sync 시간 포함)은 확실히 느린 감이 있는데, 그래도 처음에 비하면 차차 나아져 가고 있으니 익숙해 지는 겸 이젠 쓰기 시작해야 하지 않을까 싶어요.

  8. Blog Icon

    비밀댓글입니다

  9. Blog Icon

    비밀댓글입니다

  10. Blog Icon
    개발중

    import module을 한 후 혼자서 동기화를 해 버리는 바람에 에러가 엄청 많이 떴습니다. import module하기 전으로 돌아가고 싶은데 어떻게 해야하나요 ㅠㅠ

  11. Blog Icon
    김진렬

    얼마 전까지 Eclipse로 개발하다가 Android Studio로 이사 온 사람입니다.
    너무나 잘 정리해서 한눈에 이해할 수 있었습니다. 너무나 고맙습니다.

  12. Blog Icon
    민이

    안녕하세요~~

    인사드립니당

  13. 공부에 참고하기위해 왔다가 블로그에 스크랩해갑니다~

  14. Blog Icon
    요요

    안녕하세요

    반갑습니다. .

  15. Blog Icon
    이군

    안녕하세요. 안드로이드 공부를 시작했는데, 올려주신 자료들이 도움이 많이 되네요 . 감사합니다.

    보면서 궁금한게 하나 있어서, 댓글 남깁니다.

    글에 보면 maven Central이 나오는데, maven 중앙저장소에(클라우드처럼) 라이브러리 파일이 있고, Dependencies에서 com.~~지정해준 필요한 라이브러리를 다운 받는다고 저는 이해했습니다.

    Android Studio에서 Blank Activity로 새로운 프로젝트를 만들면, 아래와 같이 Build.gradle에 있더라구요.

    apply plugin: 'com.android.application'

    android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

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

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

    여기서는 Repositories { maven Central() }가 android, dependacies 전에 없습니다.
    maven Central()를 쓰지않았는데, com.android.support:appcompat-v7:23.2.1 정의된 라이브러리를 maven 저장소에서 다운받는건가요?

    감사합니다.