본문 바로가기
Lecture/Android

1. 안드로이드 프로젝트 구성

by 알 수 없는 사용자 2012. 5. 4.
반응형

API 레벨 7을 기준으로 작성중입니다. 7은 프로요이며 요즘엔 아이스크림샌드위치로 레벨 14까지 나왔다고 하지만 그래봤자 구조의 변화는 크게없으므로 하위버전에서 시작하겠습니다.


안드로이드는 처음 접하는 유저부터 MVC패턴(Model , View , Controller)으로 구성하도록 의도된 구조를 갖고있습니다. 그래서 이런 구조를 처음접하는 사람들은 코드상에서 모든것을 하려해도 잘 되지않으며 절차지향이나 객체지향언어를 많이 다루셧다고 하는 분들도 MVC패턴을 잘 알지 못할경우 약간의 어려움이 있을수 있으니 안드로이드를 시작할때 구조적 개념을 잘 숙지하셔야만 후에 개발함에 있어 능숙하고 유연하게 문제를 해결할수 있습니다.


아래 사진은 안드로이드 프로젝트 생성시 처음으로 보게되는 프로젝트 구성입니다.


한두개를 빼고는 모두 중요한 부분이기때문에 주황색으로 블록친곳을 유의해서 보시면 되겠습니다.

■ src

하위에 패키지를 중심으로 안드로이드 코드를 작성하는 부분입니다. 클래스는 액티비티가 될수도있고 래퍼함수가 가득찬 클래스가 될수도있고 상수만을 채워넣은 클래스가 될수도 있습니다. 클래스는 각 리소스를 참조하며 MVC패턴중 Controller 가 되겠습니다.


■ gen

res에서 내부적으로 생성한 컴포넌트(버튼, 뷰, 체크박스 등...)에 대한 리소스 주소를 상수화하여 자동빌드해주며 코드상에서 컴포넌트들에 대한 접근을 쉽게하기위한 목적으로 존재하는 파일입니다. 이곳은 건들이지않아야하며 만약 코드상에서 참조가 잘 되지 않는다면 clean을 실행하여 gen을 재 컴파일하도록 유도해야합니다.


■ Android 2.1

현재 개발하고자 하는 플랫폼의 라이브러리를 나타냅니다. 한번에 한 버젼의 라이브러리만 참조가능합니다. 안드로이드가 아닌 다른류의 라이브러리를 참조할 수 있는데 그것은 안드로이드 구조 외적인 부분이므로 설명하지 않겠습니다. 


■ assets

res에 의해 참조하는 곳이 아닌 절대경로를 통하여 또다른 리소스를 참조하도록 만들어논 폴더입니다. 보통 오디오, 동영상, 웹 컨텐츠들을 저장해두고 "file:///android_asset" 라는 식으로 접근하여 리소스를 가져올 수 있습니다.


■ bin

중요한 폴더는 아닙니다. 보통 컴파일된 클래스나 리소스가 바이너리로 저장되는 폴더입니다. 


■ res

이미지 , 레이아웃, 스트링 등의 정적 개체들이 저장됩니다. drawable는 디바이스 해상도별로 아이콘을 저장하는곳이며 layout은 MVC패턴에서 View에 해당되며 이곳에서 화면구성작업을 하게됩니다. values폴더 내부에 string.xml은 정적 스트링을 저장하고있으며 지금은 보이지 않지만 color.xml을 지정해 컴포넌트의 색상을 지정할 수 있습니다.

values 뿐만아니라 color ,anim , raw , menu 등의 폴더를 추가로 등록하고 지정할 수 있습니다.

color    : 컴포넌트 객체 각각 색상을 지정

anim    : 컴포넌트 객체 각각의 애니메이션 지정

menu   : 옵션메뉴의 스타일을 지정


더 많은 리소스지정방법이 있으며 추후에 포스팅 하겠습니다.


■ AndroidManifast.xml

안드로이드 프로젝트 버전이나 액티비티 유효구성, 이름, 하드웨어 퍼미션 등을 지정합니다. API 레벨 이외에도 앱 자체 버젼이나 액티비티의 런쳐모드와 화면 셋팅및 디바이스 자원을 이용할때의 권한을 설정하는 부분입니다. 코드상에서 문제가 없는데도 애러가 발생할 경우 이 부분의 설정미스로 인해 안될 수도 있으니 유심히 봐둬야합니다. gen과 다르게 자동으로 빌드되는 부분이 아니므로 항상 관리가 필요하며 후에 앱의 배포를 할경우 버젼정보를 수정해야 하기때문에 자주 손봐줘야 하는 곳이기도 합니다.


■ proguard.cfg , project.properties

앱에대한 빌드 플랫폼 정보와 클래스 정보를 담고있습니다. 건들 필요가 없습니다.



이제 안드로이드 프로젝트 생성후 기본적으로 제네레이션되는 코드들에 대하여 조금 알아보겠습니다.  아래 사진의 주황색 블럭을 유심히 보면서 리소스의 참조를 보시면 되겠습니다.




res/values/string.xml 내부에는 xml 형식의 구문으로 이름이 hello 와 app_name가 있으며 그에 따른 스트링을 지정해주고 있습니다. AndroidManifast.xml에서 android:label(앱 이름)이 string.xml에서 정의한 name상수를 지정하고 있기 때문에 결론적으로 앱의 이름은 Example가 됩니다. res/layout/main.xml에서도 android:text가 string.xml에서 정의한 hello 상수를 지정하고 있기 때문에 앱 실행시 Hello World, ExampleActivity! 가 출력되어 나옵니다.



위와같이 리소스들간의 참조는 네임상수를 통하여 지정이 가능합니다. 그럼 코드와 리소스간의 참조는 어떻게 이루어지는지 아래 사진을 보면서 살펴보겠습니다.


gen 내부에 R.java를 열어보면 res에서 등록한 개체들은 모두 클래스화 및 주소를 갖게 빌드가 됩니다. 이렇게 주소가 부여된 리소스게체들은 코드상에서 [.] 연산자를 통해 접근하여 사용하며 클래스의 접근과 동일하게 이루어집니다. 왜냐면 R.java또한 클래스이기 때문입니다. 



에뮬레이터로 돌려본 결과입니다.


위에서 설명한것과 같이 출력되었습니다. 



'Lecture > Android' 카테고리의 다른 글

안드로이드 웹 캐시 삭제  (0) 2012.07.07
구글맵 api 와 keytool  (0) 2012.07.04
view와 interface  (0) 2012.06.02
3. 레이아웃과 컴포넌트  (0) 2012.05.21
2. 안드로이드 생명주기  (0) 2012.05.09