본문 바로가기

Hello, Android

새로 만든 프로젝트, 속이 궁금하다!

강좌 작성환경
SDK Version : Android SDK 2.0
ADT Version : 0.9.4

추후 SDK업데이트로 인해 글의 내용과 실제 내용간 차이가 있을 수 있습니다.

지난 글 (2009/09/20 - [안드로이드 입문/안녕!, 안드로이드!] - 새 프로젝트 생성하기) 에서 이클립스에서 새 프로젝트를 생성하는 과정에 대해 알아보았습니다. 이번 글에서는 새로 생성한 프로젝트에서 생성된 파일들에 대해 자세히 알아보도록 하겠습니다.


새 프로젝트를 생성하게 되면, 위와 같은 폴더와 파일들이 생성됩니다. 폴더는 src, gen, assets, res 로 나누어지고, 그 외에 어플리케이션에 대한 전반적인 정보를 담고 있는 AndroidManifest.xml 파일 및 안드로이드 라이브러리를 볼 수 있습니다.

안드로이드 어플리케이션을 이론적 관점에서 보면 액티비티, 서비스, 컨텐트 프로바이더, Broadcast Receiver로 나눠지지만, 실제 개발환경 관점에서 보면 크게 [(자바)소스코드], [리소스], [메니페스트]로 나눌 수 있습니다.

개발환경 관점에서 본 안드로이드 어플리케이션의 구조

위의 그림에서는 리소스에 drawable, layout, values, assets만 표시하였지만, 실제로 안드로이드 어플리케이션에서 사용할 수 있는 리소스의 종류는 이보다 더 많습니다. SDK 폴더의 예제에 포함된 안에 있는 ApiDemos 어플리케이션의 리소스 구조만 봐도 알 수 있죠. 엄청 복잡합니다. -ㅁ-...

한눈에 봐도 복잡하기만 한 ApiDemos의 폴더구조..


폴더들을 보면, values, drawable 폴더도 있지만 values-large나 drawable-hdpi 등 다소 수상한(?) 제목을 가지고 있는 폴더들도 보이는군요. 이러한 폴더들은 단말의 환경(고해상도 액정, 저해상도 액정, 단말 로케일 등등..)에 따라 다른 리소스를 사용하기 위해 각 환경에 맞는 리소스들을 별도로 가지고 있는 것들입니다. 리소스에 대한 자세한 설명은 추후에 하기로 하고, 일단은 새로 만든 프로젝트에서 생성한 파일들에 대해 알아보도록 하겠습니다.



소스코드(/src, /gen)

1. 어플리케이션 컴포넌트 / 기타 클래스의 소스코드(/src)

일반 소스코드는 액티비티, 서비스, 컨텐트 프로바이더 혹은 기타 어플리케이션 구성에 필요한 클래스들의 소스 파일들로 구성되어 있습니다. 새 프로젝트를 생성한 경우, 일반적으로 자동으로 생성된 액티비티의 소스코드가 포함되죠. 우리가 만든 HelloAndroid 프로젝트를 보면, 자동으로 생성된 액티비티의 소스코드인 HelloAndroid.java가 있는 것을 확인할 수 있습니다.

HelloAndroid 액티비티의 소스코드가 담긴 HelloAndroid.java 파일



2. 자동 생성 파일(/gen)

안드로이드 어플리케이션은 소스코드 뿐만 아니라 레이아웃, 그림, 문자열 등 여러 가지 리소스들로 구성됩니다. 소스 코드를 작성하다 보면 레이아웃 파일에 정의된 위젯(예: TextView 등..)에 접근하여 작업을 수행(예:표시될 텍스트 내용을 변경)하는 등 리소스에 접근해야 하는 경우가 생깁니다. 

소스 코드에서 리소스 파일에 접근하기 위해 이클립스 ADT 플러그인에서는 리소스에 변동이 있을 때마다 리소스의 주소를 업데이트하여 R.java 파일에 기록해줍니다. 이러한 과정은 리소스가 추가/삭제되거나 변경된 후 해당 리소스가 "저장" 될 때 이루어지게 됩니다. 

주의할 것은, 이러한 과정은 모두 자동으로 이루어지며, R.java 파일에는 리소스들의 주소가 담겨 있으므로 R.java 파일의 내용을 임의로 변경해서는 안됩니다.


R.java 파일의 내부 모습



리소스(/drawable, /layout, /values)


1. 그림 파일 (/drawable)


이 폴더에는 어플리케이션에서 사용할 그림 파일들을 보관합니다. jpg, png 등의 파일 형식을 지원합니다. 우리가 위에서 만든 HelloAndroid 프로젝트에는 어플리케이션의 아이콘인 icon.png 만 들어가있습니다.
리소스를 추가시키게 되면 해당 파일의 이름을 리소스명으로 등록하게 되는데, 리소스 이름으로 소문자 및 일부 한정된 특수문자만 지원하기에 그림 파일 이름은 모두 소문자 및 일부 한정된 특수문자로만 이루어져야([a-z0-9_.]) 합니다. 이는 비단 그림파일에만 해당되는 것이 아니라, 리소스 전체(레이아웃 등)에 해당됩니다,

2. 레이아웃 (/layout)

어플리케이션의 화면을 구성하는 레이아웃 파일들을 포함하고 있습니다. HelloAndroid 프로젝트에는 HelloAndroid 액티비티의 레이아웃인 main.xml 파일이 있는 것을 확인할 수 있습니다. 이클립스 ADT((Android Development Tools)를 통해 레이아웃 파일이 화면에 어떻게 표시되는지 볼 수도 있으며, Outline 및 속성 창을 이용하여 레이아웃을 쉽게 구성할 수도 있습니다. 아래는 main.xml 레이아웃 파일을 ADT를 통해 열어본 모습입니다.

ADT 0.9.3의 레이아웃 에디터


레이아웃의 구조가 표시되는 Outline 창



각 객체의 속성을 표시해주는 Properties 창



안드로이드 레이아웃 에디터에서는 아래와 같이 레이아웃을 미리 볼 수 있는 화면과 레이아웃 코드를 볼 수 있는 화면이 있습니다. 아래부분의 탭의 [Layout]탭을 클릭하면 레이아웃 미리보기를, [main.xml]탭을 클릭하면 해당 레이아웃의 코드를 볼 수 있습니다. 


main.xml 탭을 클릭하면 나오는 코드 편집창


안드로이드 SDK가 2.0으로 업데이트됨에 따라, ADT의 버전도 0.9.4로 업데이트면서 레이아웃 에디터의 모습이 조금 달라졌습니다. 기존의 잡다한 옵션들 (사실 어떻게 쓰는지도 잘 모르겠....)은 싹 사라지고, 각 장치 및 환경에 해당 레이아웃이 적용된 모습을 미리 볼 수 있도록 바뀌었습니다. 현재는 ADP1 (Android Dev Phone 1)과 Ion (HTC Magic)만 있습니다.


ADT 0.9.4의 레이아웃 에디터



3. 기타 여러가지 값들 (/values)

values 폴더에는 문자열, 배열 등 기타 어플리케이션에서 사용하는 여러가지 값들이 보관됩니다. HelloAndroid 프로젝트에는 문자열을 저장하는 파일인 strings.xml 파일만 있는 것을 확인할 수 있습니다. strings.xml 파일을 열어보면 아래와 같이 현재 리소스에 등록되어 있는 문자열과 함께 문자열들을 추가하거나 삭제할 수 있는 화면이 표시됩니다.



또한, 레이아웃과 마찬가지로 아래의 strings.xml 탭을 선택하면 직접 XML 코드를 작성할 수 있는 화면이 표시됩니다.



리소스 폴더에 구체적으로 어떤 파일들이 저장되는지 자세한 내용이 궁금하신 분은 여기를 참조하세요.


4. 메니페스트 파일(AndroidManifest.xml)

메니페스트 파일인 AndroidManifest.xml 파일은 각 어플리케이션에 필수로 있어야 하는 파일입니다. 이 파일은 어플리케이션의 이름, 버전부터 시작하여 사용 권한, 컴포넌트 정의 등 어플리케이션의 뼈대를 구성하는 정보를 포함하고 있습니다. 메니페스트 파일에 대한 자세한 설명은 2009/11/13 - 메니페스트 파일, 너는 누구냐? 를 참고하세요.