[인사이드 안드로이드]

Chapter1 - 프레임워크 개요

서론

나는 컴퓨터공학과 종합설계 주제 중 ‘안드로이드 프레임워크 개선’을 선택했다. 물론 지금까지 프레임워크를 접한 적은 없다. 지금까지 ‘모바일소프트웨어설계’수업과 간단한 안드로이드 어플리케이션을 제작 해본 게 전부이다. 하지만 안드로이드를 접하면서 흥미를 느꼈고, 모바일 고급 개발자로 나아가고 싶었다. 그러기 위해서 프레임워크의 동작 원리를 이해하고, 분석하여 안드로이드의 프레임워크를 좀 더 개선하면 좋을 것 같다. 앞으로 GitHub 블로그와 ‘인사이드 안드로이드’책을 통해 공부하기로 한다.

이 책이 2010년 출간이라, 버전이 Cupcake, Froyo가 발표될 즈음 이라는데 크게 상관없는지는 잘 모르겠다.

안드로이드 프레임워크 개요

안드로이드 개발자 가이드 사이트에 따르면 안드로이드를 운영체제와 미들웨어, 그리고 핵심 애플리케이션을 포함한 모바일 디바이스 개발에 적합한 소프트웨어 스택 이라 정의한다. 즉, 안드로이드는 모바일 디바이스용 애플리케이션을 쉽게 제작하기 위한 소프트웨어 프레임워크 를 제공해 준다.

다음 그림은 안드로이드 플랫폼의 구조이다.

안드로이드 내부 구조

  • 내부 구조는 크게 애플리케이션 프레임워크, 라이브러리, 안드로이드 런타임, 리눅스 커널로 구성되어있다.
  • 애플리케이션은 애플리케이션 프레임워크 레이어 위에서 동작한다.
  • 안드로이드 플랫폼 개발자가 되기 위해서는 프레임워크에 대한 심도 있는 이해가 필수다.

안드로이드의 소스 코드 구조

주요 소스 코드의 구성은 다음과 같다.

  • Kernel : 안드로이드의 리눅스 커널
  • bionic : 안들이드 표준 C라이브러리
  • bootloader : 참고용 안드로이드 부트로더
  • build : 안드로이드 빌드 시스템
  • cts : 안드로이드 호환성 테스트 관련 소스
  • dalvik : 달빅 가상 머신
  • external : 안드로이드에서 사용하는 오픈소스들
  • frameworks : 안드로이드 프레임워크
  • hardware : 안드로이드 HAL(Hardware Abstraction Layer) 소스
  • packages : 안드로이드 기본 애플리케이션, 컨텐트 프로바이더 등
  • system : 안드로이드 init 프로세스, 블루투스 도구 모음 등

안드로이드의 부팅 과정

  1. bootloader 를 통해 리눅스 Kernel 이 먼저 시작된다. Kernel 초기화를 수행한 후 마지막 과정에서 init 프로세스를 호출한다.
  2. init 프로세스 는 각종 데몬, 컨텍스트 매니저, 미디어 서버, Zygote등을 실행한다.
  3. 컨텍스트 매니저 는 안드로이드의 시스템 서비스를 관리하는 프로세스로, 프레임워크를 구성하는 중요한 컴포넌트이다. 안드로이드 내에서 동작하는 각종 시스템 서비스에 대한 정보는 컨텍스트 매니저에게서 얻을 수 있다.
  4. 미디어 서버 는 안드로이드에서 오디오와 카메라같은 C/C++ 네이티브 시스템 서비스를 실행하는 역할을 한다.
  5. Zygote 는 application을 빠르게 구동하기 위해서 미리 fork 되어 있는 process다. 애플리케이션의 시작 시간을 단축시키며 메모리 공유를 최적화 할 수 있다.
  6. 시스템서버 는 Zygote에서 최초로 fork되어 실행되는 프로세스다. 시스템 서버는 애플리케이션 생명 주기를 제어하는 액티비티 매니저 서비스나 단말기의 위치 정보를 제공하는 로케이션 매니저 서비스와 같은 자바 시스템 서비스를 실행하는 역할을 한다.
  7. 모든 자바 시스템 서비스가 로딩되고나면 액티비티 매니저 서비스가 HOME 애플리케이션을 실행하며 부팅 과정이 진행된다.
  • 자바 시스템 서비스를 C언어 기반의 서비스 매니저에 등록하려면 자바와 C언어 간의 인터페이스 역할을 하는 JNI(Java Native Interface)를 추가로 이용해야 한다!