Android/Framework

Android에서 사용되는 주요 Native Libraries

임베디드 친구 2025. 3. 29. 13:24
728x90
반응형

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++ 표준 라이브러리를 제공합니다. 기존의 stlportgnu 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

libmedialibaudio는 Android의 오디오 및 미디어 시스템을 처리하는 라이브러리입니다. 미디어 파일 재생, 녹음 등의 기능을 제공합니다.

AOSP 코드 위치

frameworks/av/media/libmedia/
frameworks/av/services/audioflinger/

결론

Android Native Libraries는 시스템 성능과 기능을 최적화하기 위해 중요한 역할을 합니다. AOSP에서 이러한 라이브러리들의 구조와 구현 방식을 살펴보면, Android 시스템의 동작 원리를 더 깊이 이해할 수 있습니다.

반응형