Android에서 사용되는 주요 Native Libraries
Android는 리눅스 커널을 기반으로 하는 운영 체제로, 다양한 계층으로 구성되어 있습니다. 그중 Native Libraries 계층은 성능이 중요한 기능을 제공하는 핵심 요소로, 시스템의 다양한 부분에서 활용됩니다. 이번 글에서는 Android에서 사용되는 주요 Native Libraries를 소개하고, 해당 라이브러리들이 AOSP(Android Open Source Project)에서 어떻게 구현되는지 살펴보겠습니다.
1. Bionic (C Library)
Android는 전통적인 glibc 대신 Bionic이라는 경량 C 라이브러리를 사용합니다. Bionic은 모바일 환경에 최적화되어 있으며, 속도와 메모리 사용량을 고려하여 설계되었습니다.
특징
- 경량화 및 성능 최적화
- 보안 기능 강화 (SSP, Fortify, ASLR 지원)
- BSD와 glibc의 일부 기능을 통합
주요 파일 위치 (AOSP)
Bionic은 AOSP의 bionic/
디렉터리에 위치하고 있으며, 다음과 같은 파일들로 구성되어 있습니다.
bionic/
├── libc # 표준 C 라이브러리 구현
├── libm # 수학 연산 라이브러리
├── libdl # 동적 로딩 라이브러리
2. liblog
liblog
는 Android의 로깅 시스템을 담당하는 라이브러리로, 로그 메시지를 Logcat에 출력할 수 있도록 지원합니다.
주요 함수
#include <android/log.h>
__android_log_print(ANDROID_LOG_INFO, "Tag", "Message: %s", value);
AOSP 코드 위치
system/core/liblog/
디렉터리에 구현되어 있습니다.
3. libc++ (LLVM libc++)
Android는 기본적으로 libc++
을 사용하여 C++ 표준 라이브러리를 제공합니다. 기존의 stlport
와 gnu libstdc++
대신, 성능과 호환성을 고려하여 libc++
을 채택했습니다.
주요 파일 위치
external/libcxx/
external/libcxxabi/
4. libhardware
libhardware
는 Android의 HAL(Hardware Abstraction Layer) 인터페이스를 제공하는 라이브러리입니다. 이 라이브러리는 하드웨어 모듈을 동적으로 로드하고 사용할 수 있도록 합니다.
주요 구조
HAL 모듈은 /vendor/lib/hw/
또는 /system/lib/hw/
디렉터리에 .so
파일로 제공됩니다. 해당 모듈은 hw_module_t
구조체를 통해 등록됩니다.
typedef struct hw_module_t {
struct hw_module_methods_t *methods;
const char *name;
const char *author;
} hw_module_t;
AOSP 코드 위치
hardware/libhardware/
디렉터리에 구현되어 있습니다.
5. libcrypto 및 libssl (OpenSSL)
Android는 네트워크 보안과 관련된 암호화 기능을 제공하기 위해 OpenSSL을 사용합니다. 다만 최신 버전에서는 BoringSSL
을 기반으로 수정된 버전이 사용됩니다.
AOSP 코드 위치
external/boringssl/
6. libsqlite
Android는 관계형 데이터베이스 관리를 위해 SQLite
를 내장하고 있으며, libsqlite
를 통해 이를 활용합니다.
주요 API 예제
#include <sqlite3.h>
sqlite3 *db;
sqlite3_open("test.db", &db);
AOSP 코드 위치
external/sqlite/
7. libui
libui
는 Android의 UI 렌더링을 위한 기본적인 기능을 제공합니다. Surface, Display 등의 그래픽 관련 요소를 관리합니다.
AOSP 코드 위치
frameworks/native/libs/ui/
8. libinput
libinput
은 터치스크린, 키보드, 마우스 등의 입력 이벤트를 처리하는 라이브러리입니다. Android의 입력 시스템과 긴밀하게 연동됩니다.
AOSP 코드 위치
frameworks/native/libs/input/
9. libcamera
libcamera
는 카메라 하드웨어를 제어하는 역할을 합니다. 카메라 HAL과 직접 연결되며, 미디어 프레임워크를 통해 활용됩니다.
AOSP 코드 위치
frameworks/av/services/camera/libcameraservice/
10. libmedia 및 libaudio
libmedia
와 libaudio
는 Android의 오디오 및 미디어 시스템을 처리하는 라이브러리입니다. 미디어 파일 재생, 녹음 등의 기능을 제공합니다.
AOSP 코드 위치
frameworks/av/media/libmedia/
frameworks/av/services/audioflinger/
결론
Android Native Libraries는 시스템 성능과 기능을 최적화하기 위해 중요한 역할을 합니다. AOSP에서 이러한 라이브러리들의 구조와 구현 방식을 살펴보면, Android 시스템의 동작 원리를 더 깊이 이해할 수 있습니다.
'Android > Framework' 카테고리의 다른 글
Android OpenGL 라이브러리 분석 (0) | 2025.03.31 |
---|---|
Bionic libc 개요 (0) | 2025.03.30 |
HAL 로그 확인 및 디버깅 (logcat, dmesg), HAL이 정상적으로 동작하지 않을 때 문제 해결 방법 (0) | 2025.03.28 |
Android HAL 레이어에서 Native Library 및 커널 드라이버 연동 (0) | 2025.03.27 |
Android HAL 모듈 작성 방법 (0) | 2025.03.26 |