■ Android Architecture
안드로이드는 계층화된 소프트웨어 스택을 구성하고 있다. 각 계층별로 어플리ㅔ이션 개발과 실행을 위한 유용한 기능을 제공하며, 이렇게 계층화된 소프트웨어 스태그로 구성되어 있어서 스마트폰, 태블릿, TV 등 다양한 하드웨어에서 구동될 수 있다.
안드로이드는 리눅스 커널을 기반으로 하고 있으며, 리눅스의 멀티 유저 개념을 multi-app 형태로 적용 (UID)하여 각 앱의 실행 영역을 다른 앱의 실행영역과 분리하였다. 이 커널은 디바이스 하드웨어와 상호작용하는 첫번째 계층으로, 하드웨어나 디바이스 제조사들이 자신의 제품에 맞게 커널을 수정하고 일반적으로 앱 개발자들은 커널을 다룰일은 없다. 커널은 전원, 메모리, 디바이스 드라이버, 프로세스, 네트워킹, 보안 등을 관리한다.
MiddleWare란, 커널과 어플리케이션 프레임워크 사이의 중재 역할이며 라이브러리와 ART( 안드로이드 앱 실행 환경, Android 5.0 롤리팝부터는 이전의 Dalvik virtual Machine을 대체 )로 구성되어있다.
Application Framework는 안드로이드 앱 개발을 위한 building block들을 제공하며, 앱 개발에 필요한 유용한 시스템이나 서비스 등을 제공한다. 다음 표는 Application Framework의 주요 서비스이다.
주요 서비스 | |
Activity Manager |
앱 라이프사이클과 액티비티 스택 관리 |
Content Provider |
앱들 사이의 데이터 공유 |
Resource Manager |
앱 프로그래밍 소스 외의 다른 자원 ( String, 색상 ..) |
Notification Manager |
앱의 알림 기능 |
Veiw System |
사용자 인터페이스 (UI) 작성 관련 |
Package Manager |
디바이스에 설치된 다른 앱들에 대한 정보를 검색 |
Telephony Manager |
앱에 전화 서비스 관련 정보 제공 |
Location Manager |
앱에 위치정보를 제공 |
그리고 마지막으로 Application은 크게 시스템 앱과 사용자 앱으로 구분할 수 있는데, 안드로이드 운영체제에 포함되는 시스템 앱은 /systemp/app 디렉토리에 read-only로 마운트 되어있으며 삭제나 변경이 불가능하다. (동일한 배포자의 서명을 가지는 경우에는 사용자에 의해 업데이트 가능)
사용자 앱은 말 그대로 사용자가 설치하는 앱이며, /data/app 디렉토리에 read-write 파티션으로 마운트되어있다. 사용자 앱은 전용 샌드박스에 상주하며, 다른 앱의 데이터에 접근할 수 없다. 각각의 샌드박스에서 실행되는 앱에 접근하기 위해서는 permission이 필요하며, 이러한 permission(권한 부여)은 AndroidMenifest.xml에 앱에 필요한 권한 요청을 추가하여야 한다.
■ 안드로이드 Component
안드로이드 앱을 구성하는 구성요소는 크게 4가지로 나눌 수 있다.
1) Activity ( 액티비티 )
: 앱 화면을 구성하는 가장 기본적인 구성요소로, 앞 장에서 설명했던 MainActivity는 메인 화면의 명칭이다. 어플리케이션 내에서 각 Activity들은 각각 하나의 화면을 구성하고 있다.
2) Service ( 서비스 )
: 화면에 나타나지는 않지만 백그라운드에서 동작하고 있는 프로그램을 의미한다.
3) Broadcast Receiver ( 브로드캐스트 리시버 )
: 장치에서 발생하는 다양한 이벤트를 수신하기 위한 메커니즘이다. 예를 들어 게임을 하고있는데 휴대폰에 메세지가 도착하면 게임도중에도 화면에 메세지 도착 알림이 뜨기도 한다. 이러한 메커니즘이 브로드캐스트 리시버이다.
ex ) 문자 도착, 배터리 방전, SD 카드 탈부착, 네트워크 연결 알림 등
4) Content Provider ( 컨텐트 제공자 )
: 앱들 간의 데이터를 교환하기 위한 기능을 제공하는 컴포넌트이다. 안드로이드는 리눅스 기반이기 때문에 앱들 간에 직접적으로 데이터를 주고받을 수 없기 때문에 데이터를 교화하기 위해서는 컨텐트 제공자를 구현해야한다.
■ Android Application Source
app은 크게 manifests / java / res로 나누어진다.
1. manifests
- manifests는 어플의 기본 정보를 담고 있는 xml 파일이다.
- 어플리케이션의 이름, 메인 아이콘 이미지, 어플의 버전
- 어플의 기능을 수행하기 위한 permission들
- 어플 내에서 보여지는 activity들이 이 AndroidManifest.xml 파일에서 먼저 선언된다.
- 어플이 동작하면 가장 먼저 읽어오는 파일이 AndroidManifest.xml으로, 스프링에서 web.xml, servlet-context.xml과 비슷한 역할이다.
2. java
- 안드로이드는 크게 java와 xml의 두 가지 구조로 나누어진다.
- xml은 사용자에게 보여지는 화면구성을 나타낸다.
- xml에서 UI를 만들고 정적인 화면구성을 표현한다면
- java에서는 실질적인 동작과 구현을 만든다. 일부 동적인 화면들 또한 java에서 구현하게 된다.
3. res
- 리소스 폴더는 크게 drawable/ layout/ mipmap/ values로 나누어진다.
- drawable은 프로젝트 상에서 필요한 모든 이미지 파일들을 저장하는 곳이다. 여기에는 png파일만 넣어야한다. ( jpg는 인식이 안되는 경우도 있을 뿐더러 png 파일이 더 가볍기 때문에 )
- layout은 위에서 말했듯이 정적인 UI 화면을 구성하는 xml 파일들이다.
- mipmap은 어플의 메인 아이콘들을 저장하는 곳이다. 안드로이드는 기기별로 해상도가 다르기 때문에 해상도별로 다른 아이콘이 필요하다.
- values는 또다시 colors/ dimens/ strings/styles로 나누어진다.
- colors는 어플 내에서 사용하는 색상을 지정한다. colors를 사용하지 않고 직접 입력도 가능하다. 만약 프로젝트 내에서 한 번에 색상을 변경할 필요가 있을 때는 colors를 사용한다.
- dimens는 크기를 지정하는 xml이다. 여백이나, 글자 크기 등을 지정해서 한 번에 변경할 때 사용한다.
- strings는 어플 내에 사용하는 text들을 미리 지정할 때 사용한다. 어플리케이션의 이름도 strings 내에서 지정한다. strings를 사용하지 않고 직접 xml이나 java 내에서 텍스트를 입력해도 가능하다. 다만 영어 등 다른 여러 언어를 지원하기 위해서는 strings를 필수적으로 사용해야 한다. strings를 사용하면 스마트폰 사용 환경에 따라 자동적으로 해당 언어를 선택해서 사용하게 된다.
- styles는 어플리케이션의 스타일을 지정한다. 팝업이나 화면의 기본적인 디자인을 결정한다.
- 위 폴더들뿐만 아니라 어플리케이션에 따라 추가적으로 assets(사운드, 폰트), anim(애니메이션) 등 추가적으로 폴더를 생성해서 사용할 수 있다.
[출처] 1-2 강 안드로이드 스튜디오 구조|
Q. 왜 코드와 리소스를 분리할까?
A. 안드로이드가 탑재된 장치들이 다양해지면서 언어나 화면 크기에 따라 리소스를 다르게 하는 것이 필요하기 때문입니다.
'Android > Android' 카테고리의 다른 글
Android(5)_Intent (0) | 2016.05.31 |
---|---|
Android 계산기 (0) | 2016.05.31 |
Android(4)_고급Widget (0) | 2016.05.30 |
Android(3)_Layout (0) | 2016.05.27 |
Android(2)_Activity (0) | 2016.05.26 |