ADT에서 AndroidStudio로 변경된 안드로이드 개발환경

|

얼마 전 부터 ADT Download 페이지에 Android Studio를 써보라는 안내문구가 나오기 시작하더니

이젠 개발자 사이트에 AndroidStudio가 The official Android IDE 로 소개되고 있다.


이 포스팅은 ADT에서 AndroidStudio로 바뀌면서 변경된 "빌드 환경"을 파악하고 정리하는것을 목적으로 한다.



ADT가 이클립스를 기반으로 한 IDE였다면, Android Studio는 Intelli J를 기반으로 한다.


빌드 도구 역시 변경되었는데,

기존의 안드로이드 빌드는 ant 빌드 스크립트를 이용하여 빌드가 가능했는데

이제는 gradle 이라는 빌드 툴로 변경되었다.


Gradle은 maven과 ant의 장점을 합쳤다고 하는데... 뭐, 일단은 좀 써보자.



예제로 이해하는편이 아무래도 쉬우니, 일단 AndroidStudio를 설치하고 샘플 앱을 하나 만들어본다.


새 프로젝트를 만드는 과정은 기존과 크게 다르지 않다. 버전 설정하고, 패키지명 설정하고,

자동생성할 코드 고르고...



프로젝트 내 파일 구조는 아래와 같다.






.gradle

gradle 스크립트에서 사용하는 폴더인것으로 보인다. gitignore에 포함되어있는걸 보면 삭제해도 다시 생기는듯.

.idea

AndroidStudio IDE에서 사용하는 폴더. 툴에 대한 설정이다.

app

실제 소스코드가 위치하는 폴더. 아래에서 설명

build

빌드 과정중 생성되는 파일이 위치한다. clean시 삭제되며, 삭제해도 빌드하면 생긴다.

gradle

gradle 빌드 툴을 받아오기 위한 파일. 안쪽으로 들어가보면 .jar 파일과 properties 파일이 하나씩 있는데,

properties 파일 내의 정보로 gradle 툴의 바이너리를 받고, 받아온 jar 파일을 실행하는 구조이다.

프로젝트 내 wrapper jar 파일은 실제 gradle 실행파일이 아닌 gradle dist 를 받아오고, 실행하기 위한 코드.

어쨌든 신경 쓸 필요 없다.

.gitignore : 생략

gradlew, gradlew.bat

gradle-wrapper를 실행하기 위한 스크립트. gradlew 은 *NIX용 스크립트이고, gradlew.bat는 windows 환경용 배치파일

환경설정을 체크하고, gradle-wrapper를 실행하여 실제로 gradle 을 시작시킨다.

build.gradle, settings.gradle

gradle 빌드 스크립트. 아래에서 설명

gradle.properties, local.properties

빌드시 사용될 속성 정의




프로젝트 루트에는 이런 파일들이 위치하고 있다.

ADT환경에서는 하나의 프로젝트에서 최종적으로는 배포용으로 release 타겟만 있었는데,

gradle을 사용하는 AndroidStudio에서는 프로젝트 내 여러개의 모듈이 포함 될 수 있으며,

빌드설정 중 flavor 옵션으로도 다양하게 빌드 할 수도 있다.


예를 들어, 어플리케이션이 특정 서비스와 연동되어 실행된다고 하면,

기존에는 어플리케이션 프로젝트와 서비스 프로젝트를 따로 만들어  따로 빌드를 해야 했다.

(물론, 기존에도 하나의 프로젝트 내에 서비스를 포함시킬 수는 있다)

혹은, 특정 소스에서 jar 파일을 생성한 후 jar binary 형태로 다른 어플리케이션에 포함하여 빌드하는 경우 등의 상황.

gradle에서는 하나의 프로젝트에 이 각각을 모듈로 포함시켜 한꺼번에 빌드가 가능하다.


마찬가지로, 하나의 어플리케이션에 멀티 플랫폼(핸드셋, 태블릿, 웨어러블 등)을 지원하는 경우에도 모듈화하여 단일 프로젝트로 진행할 수 있다.



비슷한 내용으로, flavor 라는것이 있다.

(flavor라고 하면 딸기맛, 포도맛 할때 ~맛 이라는 뜻인데, 뭐라고 번역해야 하나...)

동일 경로에 소스, 리소스를 빌드 옵션에 따라 선택하여 빌드하는 방법인데,

예제에서는 정식버전/데모버전을 각기 빌드하는 용도로 소개가 되어 있다.


빌드타입은 VC++같은 IDE에서 많이 보았을, debug와 release로 선택하던 그 빌드타입이 맞고,

flavor는 그 기능을 좀 더 확장시킨거라 볼 수 있을 것 같다.


빌드타입은 빌드 중의 속성값을 변경시키는것이라면,

flavor는 빌드 옵션(build varient)에 따라 소스 레벨까지 조작을 할 수 있는 기능인 셈이다.


때문에, 빌드타입과 flavor는 결과적으로 build varient 에 N:N의 짝을 이루어 선택되게 된다.


빌드타입에 debug, release 가 있고, flavor에 main, demo가 있다면,

선택 가능한 Build variant는 debugMain, debugDemo, releaseMain, releaseDemo 가 된다.




빌드 환경에 대한 사전 설명은 이정도로 하고, gradle을 통한 빌드 과정을 관련 파일을 기준으로 따라가본다.


먼저 gradle의 기본 빌드 스크립트인 build.gradle은 다음과 같다.




gradle은 maven과 마찬가지로, 배포처를 통한 라이브러리 참조를 지원한다.

jcenter()는 이 배포처를 지정한다는 의미이고, 이 경우에는 bintray의 jCenter리파짓을 참조한다.

라이브러리 검색은 http://jcenter.bintray.com/ 에서 가능.


그리고 com.android.tools.build 패키지를 필요로 한다.

이 패키지는 안드로이드 빌드 툴 패키지이다.



같은 위치의 settings.gradle 을 열어보면,



참 심플하다. 딱 한줄.

build.gradle 외에 추가로 빌드할 모듈을 지정한 라인이다.


":app" 이라는 모듈을 추가한다는 의미이며, 여기서 :(콜론)은 / 와 동일하다고 생각하면 된다.

즉, 현재 디렉토리 내 app 디렉토리를 포함하여, 포함한다는 뜻은 이 디렉토리에서 build.gradle 을 찾아 실행한다고 보면 된다.


MakeFile 에서 하위 디렉토리를 뒤지며 MakeFile을 찾아 실행하는 방법과 비슷한 맥락인 거다.




그럼, app/build.gradle 의 내용을 확인할 차례.



이제 뭐가 좀 그럴싸한 모양이 나왔다.


아래에 있는 dependencies 를 먼저 보면, libs 안에 있는 *.jar 파일에 대해 모두 의존성을 걸고

추가로 사용하는 appcompat-v7을 명시하고 있다.

dependencies는 ADT에서의 Build Path 라고 볼 수 있을 것 같다.


모듈 간 의존성이 있다면 이쪽에 지정해주면 되고, (ex. jar 라이브러리 생성 후 해당 라이브러리를 사용하는 apk 빌드 등)

추가 라이브러리의 문법은 gradle 의 문법대로 추가해주면 된다.


행여나, maven을 사용해본적이 없는분을 위해 덧붙이자면,

앱에서 필요한 라이브러리가 있는 경우, ADT에서는 .jar 파일을 직접 다운받아 적당한 위치에 위치시키고 Build Path까지 잡아주어야 했다면,

maven에서는 이런식으로 패키지명과 필요한 버전만 명시해두면 빌드할 때 자동으로 다운받아 사용하게 된다.

물론 해당 패키지는 위의 리파지토리에 있어야 다운이 가능한건 상식.

(실제 파일 : http://jcenter.bintray.com/com/android/tools/build/gradle/1.0.0/gradle-1.0.0.jar )



그 위 블럭인 android 블럭은 현재 안드로이드 모듈에 대한 빌드설정을 정의한다.

각종 빌드 설정을 조절 할 수 있으며, 이 설정들은 Android Studio의 File-Project Struct, 왼쪽의 Modules를 선택하였을때 각기 설정이 가능하다.



android 블럭은 기본 gradle에 포함되어 있지 않으므로,

첫번째 라인, apply plugin 명령을 통해 com.android.application 이라는 플러그인을 로드하고,

이 플러그인에서 android 블럭을 사용하여 빌드를 수행하는 것이 되겠다.


더 깊게 알고 싶다면, android gradle build tool의 바이너리를 받아서 (위에 있음)

내부를 파보면 플러그인 선언 등이 있으니 참고하면 되겠다.





일단 AndroidStudio를 살짝 만져만 봤는데, 느낀점은 아래와 같다.

- 좀 무거운 것 같다. 컴퓨터가 후져서 그런지는 모르겠지만.... 일단 느리다.

- 단축키 다시 익혀야 되겠네

- 리소스 관리가 나아진 것 같다. 기존에 안드로이드 리소스 분류별 파일을 찾으려면 일일이 디렉토리들(hdpi, mdpi, xhdpi 등)을 뒤져가며 찾아야 했는데

이젠 단일 파일 하위로 각 리소스별로 표시를 해 준다.


- 레이아웃 에디터도 로드하는데 오래걸리는만큼 쓸만할진 모르겠는데, 거의 안쓸듯 싶다.

- 프로젝트 여러개를 동시에 띄울 수 없다. AndroidStudio 자체를 여러 개 띄워야 함.

- 기존 ant 빌드 환경 그대로 사용할 수 있다고는 하는데, 특별한 이유가 아니라면 유지 할 필요는, 글쎄...

(예전거 꾸역꾸역 가져가다보면 트러블슈팅하는데 애먹는게 왕왕 있어서...)




여튼 좋든 싫든 공식 IDE가 이걸로 바뀌었으니 어서 손에 익히도록 노력해봐야겠다.

버전관리를 하는 프로젝트의 경우에는 ADT에서 AndroidStudio로 옮겨가는 시점을 확실히 해야 할 듯. (소스 구조가 다르므로...)



And