본문 바로가기
Android/Android

Android(1)_Structure

by 미티치 2016. 5. 26.

■ 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 강 안드로이드 스튜디오 구조|

 

 

Tip & Tech

 

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