소개
특징
- 애플리케이션 프레임워크
- ART 가상 머신
- OPEN GL ES 3.x 기반 3D 그래픽 지원
- SQLite 데이터 베이스
- 다양한 미디어 지원
- Android Studio IDE 제공
- 센서 등 다양한 하드웨어 지원
기타
- 다양한 미디어를 지원하기 때문에 호환성 문제가 발생하는 경우가 있음
- mp3, mp4 를 이용하면 대체로 문제가 없음
구조
- 리눅스 커널 : Android는 리눅스 커널을 사용
- HAL : 리눅스 커널과 하드웨어 기기간의 인터페이스 부분으로 단말기 제조사가 드라이버를 구현할 수 있도록 제공되는 계층(컴퓨터의 드라이버 역할)
- HAL 은 OS(안드로이드에서 만듦) 부분과 HW(단말기 회사에서 만듦)가 존재. 애플에서는 자체적으로 만들기 때문에 HAL이 필요없어서 성능면에서 더 좋다.
- Android 런타임 : 안드로이드 애플리케이션을 구동하기 위한 가상머신. 5.0이상은 ART기반
- Native C/C++ : 안드로이드 OS가 애플리케이션 및 기능들을 구동하기 위해 사용하는 라이브러리. 개발자가 Java나 Kotlin으로 만들어진 API를 이용하면 여기에 구현되어 있는 C코드가 동작하게 된다.
동작원리
안드로이드 4대 구성 요소
안드로이드 애플리케이션은 4대 구성 요소들을 통합 관리하는 번들 개념이다.
- Activity : 눈에 보이는 화면을 관리하는 실행 단위
- Service : 화면을 가지지 않은 실행 단위. 백그라운드 프로세싱
----> 현재는 과도한 서비스를 백그라운드로 실행되는 걸 금지하고 있음
----> 지금은 백그라운드 실행은 사용자에게 고지해야 가능
- Broadcast Receiver : OS가 메시지를 받으면 실행되는 실행 단위
- Content Provider : 저장된 데이터를 제공하기 위해 실행되는 실행 단위
프로젝트 구조
- manifests : XML 데이터 양식으로 구성되어 있음. 어플리케이션에 관련된 정보를 알려주기 위한 파일. 개발자가 안드로이드 가상머신에게 알려주기 위해 작성, 안드로이드 설정 파일
- java : 개발자가 작성하는 소스 코드
- res : 어플리케이션을 사용할 때 사용하는 이미지, 사운드, 데이터 등을 애플리케이션에서 필요한 리소스
- res(generated) : 안드로이드에서 자동적으로 생성
애플리케이션 실행
- 안드로이드 애플리케이션이 실행되면 안드로이드 OS는 첫 번째 화면을 사용자에게 보여주려고 한다.
- 이 때 AndroidManifest.xml 에 있는 여러 구성 요소 중 activity를 찾는다.
- 이 activity 중에 다음과 같이 작성되어 있는 것을 첫 화면을 관리하는 요소로 판단하고 이를 실행시켜준다.
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
안드로이드 애플리케이션 동작 순서
1. 사용자가 애플리케이션 아이콘을 터치하면
2. AndroidManifest.xml에 기록되어 있는 Activity들 중 "android.intent.action.MAIN" 이름으로 설정되어 있는 intent filter가있는 Activity를 찾는다.
3. 찾은 activity에 name 에 설정되어 있는 클래스 이름을 찾는다.
4. 찾은 클래스의 객체를 생성하여 onCreate 메서드를 호출해준다.