스터디 1주차 - 1
안드로이드
-
운영체제와 미들웨어, 그리고 핵심 애플리케이션을 포함한 모바일 디바이스 개발에 적합한 소프트웨어 스택이다. 즉 안드로이드는 모바일 디바이스용 애플리케이션을 쉽게 제작하기 위한 소프트웨어 프레임워크를 제공한다.
-
안드로이드 플랫폼의 구조를 나타낸 것으로 크게 애플리케이션 프레임워크 / 라이브러리 / 안드로이드 런타임 / 리눅스 커널로 구성되어 있다.
플랫폼과 프레임워크의 차이
플랫폼
-
플랫폼이란 서비스, 응용소프트웨어, 컨텐트 등의 기반이 되는 환경을 의미한다. 예를 들어 윈도우 OS는 그 위에서 동작하는 오피스, 메신저 등의 응용소프트웨어의 기반이 된다. 즉 윈도우 OS는 다양한 응용소프트웨어의 플랫폼역할을 한다.
-
어플리케이션을 작동 시킬 때 기반이 되는 OS의 종류나 환경, 설정을 의미.
프레임워크
-
소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것이다.
-
프레임워크는 라이브러리와 달리 애플리케이션의 틀과 구조를 결정할 뿐만 아니라, 그 위에 개발된 개발자의 코드를 제어한다. 프레임워크는 구체적이며 확장가능한 기반코드를 가지고 있으며, 설계자가 의도하는 여러 디자인 패턴의 집합으로 구성되어 있다.
안드로이드의 소스 코드 구조
- kernal: 안드로이드의 리눅스 커널 2.6
- frameworks: 안드로이드 프레임워크
- packages: 안드로이드 기본 애플리케이션, 컨텐트 프로바이더 등
- system: 안드로이드 init 프로세스, 블루투스 도구 모음 등
- bionic: 안드로이드 표준 C 라이브러리
- bootloader: 참고용 안드로이드 부트로더
- build: 안드로이드 빌드 시스템
- cts: 안드로이드 호환성 테스트 관련 소스
- dalvik: 달빅 가상 머신
- external: 안드로이드에서 사용하는 오픈소스들
- hardware: 안드로이드 HAL(Hardware Abstraction Layer) 소스
안드로이드 프레임워크
-
리눅스 커널 : 안드로이드는 리눅스 기반의 플랫폼이다. 따라서 부팅 시에 부트로더를 통해 리눅스 커널이 먼저 시작되어, 커널 초기화를 수행 후 마지막 과정에서 init 프로세스 호출한다.
-
init : 안드로이드 init 프로세스는 각종 디바이스를 초기화하는 작업을 비롯하여 안드로이드 프레임워크 동작에 필요한 각종 데몬, 컨텍스트 매니저, 미디어 서버, Zygote등을 실행하는 역할을 한다.
-
데몬 프로세스에는 USB데몬(USB연결관리) // 안드로이드 디버그 브리지 데몬 (adbd - 안드로이드 디버그 브리지 연결관리) // 디버거 데몬 (디버그 시스템시작) // 무선 인터페이스 레이어 데몬 (무선 통신 연결 관리) 등이 있다.
-
Context manager : Context manager는 안드로이드의 시스템 서비스를 관리하는 중요한 프로세스다. 시스템 서비스는 안드로이드 프레임워크를 구성하는 중요한 컴포넌트로 카메라, 오디오, 비디오 처리에서부터 각종 애플리케이션 제작에 필요한 중요 API를 제공하는 등의 역할을 수행한다. 즉 안드로이드 내에서 동작하는 각종 시스템 서비스에 대한 정보는 Context manager 에게 얻을 수 있다.
-
시스템 서비스를 이용하고자 하는 애플리케이션이나 프레임워크의 내부 모듈은 이를 서비스 매니저에게 요청해야하고, 요청 후 바인더라는 안드로이드의 자체적인 IPC (Inter process communication) 메커니즘을 통해 시스템 서비스를 이용할 수 있다.
-
이를 위해서 안드로이드의 모든 시스템 서비스는 부팅 시 자신의 핸들 정보를 컨텍스트 매니저에 등록해야함. 또한 이러한 등록 과정에서도 프로세스 간 통신 수행을 위해 바인더 IPC가 이용됨.
-
-
Media Server : Media Server 프로세스는 안드로이드에서 Audio Finger(오디오 출력 담당), Camera서비스와 같이 C/C++ 기반으로 작성되어 있는 네이티브 시스템 서비스를 실행하는 역할을 한다.
-
Zygote : Zygote는 안드로이드 애플리케이션의 로딩시간을 단축하기 위한 프로세스로서 모든 자바 기반 안드로이드 애플리케이션은 Zygote를 통해 fork된 프로세스 상에서 동작한다.
-
System Server : Zygote에서 최초로 fork되어 실행되는 안드로이드 애플리케이션 프로세스다. 자바 시스템 서비스(이 역시 컨텍스트 매니저에 등록되어야 함) 실행 역할.
-
바인더 IPC를 통하여 자바 시스템 서비스를 C언어 기반의 서비스 매니저에 등록하려면 자바와 C언어 간의 인터페이스 역할을 하는 JNI(Jave Native Interface)를 추가로 이용해야 함.
-
애플리케이션 생명주기를 제어하는 액티비티 매니저 서비스, 단말기의 위치 정보를 제공하는 로케이션 메니저 서비스와 같은 자바 시스템 서비스를 실행하는 역할을 한다.
-
출처 : https://dev-troh.tistory.com/67 https://scotthan.tistory.com/entry/플랫폼프레임워크란 https://ddageung2.github.io/jekyll/update/second-post/