Android 플랫폼 구조

최서정·2024년 11월 13일

Android

목록 보기
3/3

https://chunky.tistory.com/26
해당 게시글을 참고하여 공부하며 쓴 글입니다.

Android의 구조




리눅스 커널 ( Linux Kernel )

각종 드라이버와 전원 관리모듈 존재
-> 하드웨어적인 설정을 리눅스 커널에서 관리

커널이 담당하는 일

  • 메모리 관리
  • 보안 설정
  • 전원 관리
  • 다른 하드웨어 장치 드라이버 관리
  • 네트워크 시스템 관리




하드웨어 추상화 계층 ( HAL : Hardware Abstraction Layer )

리눅스 커널이 드라이버를 통해 하드웨어와 연결한다면, HAL는 하드웨어를 추상화해주는 역할을 함.
Android에서 제공되는 HAL는 다음 그림처럼 오디오, 블루투스, 카메라, 이미지, 미디어 등 다양함.

HAL 인터페이스는 C/C++ 기반으로 작성되며 모듈과 기기, 두 가지 요소로 구성됨.

HAL 모듈 (hw_module_t)

  • 모듈은 공유 라이브러리(.so 형식 파일)로 저장되는 패키징된 HAL 구현을 나타냄
  • hardware/libhardware/include/hardware/hardware.h 헤더 파일은 모듈을 나타내는 구조체를 정의, 버전, 이름 및 모듈 작성자와 같은 메타데이터를 포함
  • 각 하드웨어별 HAL은 하드웨어의 추가 정보를 hw_module_t 구조체에 추가할 수 있음.

ex) 다음 코드 스니펫과 같이 camera_module_t 구조체에는 hw_module_t 구조체와 기타 카메라 관련 함수 포인터가 포함됨.

typedef struct camera_module {
		hw_module_t common;
		int (*get_number_of_cameras)(void);
		int (*get_camera_info)(int camera_id, struct camera_info *info);
} camera_module_t;

HAL 기기 (hw_device_t)

  • 기기는 제품의 하드웨어를 추상화
    ex) 오디오 모듈에는 기본 오디오 기기, USB 오디오 기기, 블루투스 A2DP 오디오 기기가 포함

  • 모듈과 마찬가지로 각 유형의 기기는 하드웨어의 특정 기능 관련 함수 포인터를 포함하는 상세한 버전의 일반 구조체를 정의

ex) 다음 코드 스니펫과 같이 audio_hw_device_t 구조체 유형에는 오디오 기기 작업에 관한 함수 포인터가 포함됨

struct audio_hw_device {
	struct hw_device_t common;

	/**
	 * used by audio flinger to enumerate what devices are supported by
	 * each audio_hw_device implementation.
	 *
	 * Return value is a bitmask of 1 or more values of audio_devices_t
	 */
	uint32_t (*get_supported_devices)(const struct audio_hw_device *dev);
	...
};
typedef struct audio_hw_device audio_hw_device_t;




네이티브 C/C++ 라이브러리

  • ART 및 HAL와 같은 핵심 Android 시스템 구성 요소와 서비스가 C/C++로 작성된 네이티브 코드를 기반으로 빌드
  • Android 플랫폼은 Java 프레임워크 API를 제공하여 일부 네이티브 라이브러리의 기능을 앱에 노출시킴
  • 그림에 보이는 네이티브 라이브러리 외에도 다양한 라이브러리를 Java 프레임워크 API를 통해 액세스 가능
  • 추가로 C/C++ 코드가 필요한 앱을 개발하는 경우, Android NDK를 사용하여 네이티브 코드에서 직접 네이티브 플랫폼 라이브러리에 액세스 가능




Android 런타임(ART)

Android 운영 체제 기반으로 만들어진 런타임 환경의 VM

ART는 DEX파일(Android용으로 특별히 설계된 바이트코드 형식)을 실행하여 저용량 메모리 기기에서 여러 가상 머신을 실행하도록 작성




Java API 프레임워크

Android 앱 개발 시 사용되는 기능들의 집합체
기본적인 세트들은 모두 Java 언어로 작성, 이 API는 앱을 제작하는 데 필요한 빌딩 블록 구성

  • Content Providers : 앱이 주소록 앱과 같은 다른 앱의 데이터에 접근하거나 자신의 데이터를 공유할 수 있도록 지원
  • View System : 목록, 그리드, 텍스트, 버튼 등 앱의 UI를 빌드하는 데 사용
  • Manager : 각 주제에 맞는 기능을 사용할 수 있도록 지원




시스템 앱 ( System Apps )

Android는 이메일, 캘린더, 카메라 등 주요 앱 세트와 함께 제공
시스템 앱은 사용자를 위한 앱으로 작동하는 동시에 개발자가 자신의 앱에서 액세스할 수 있는 주요 기능을 제공해주는 용도로도 작동
즉, 특별한 목적이 없는 경우 SMS 메시지 기능을 직접 빌드할 필요없이 이미 설치된 SMS 앱을 호출하여 앱에 기능을 불어넣어줄 수 있음.

0개의 댓글