안드로이드 (Android)

개요

안드로이드는 구글이 개발한 리눅스 커널을 기반으로 한 오픈소스 모바일 운영체제입니다. 2008년 첫 번째 상용 버전이 출시된 이후, 현재 전 세계 스마트폰 시장의 약 70% 이상을 차지하는 가장 널리 사용되는 모바일 운영체제입니다.

안드로이드의 특징

  • 리눅스 커널 기반: 안드로이드는 리눅스 커널을 기반으로 하여 안정성과 보안성을 확보
  • 오픈소스: 대부분의 소스코드가 공개되어 있어 개발자들이 자유롭게 수정하고 배포 가능
  • 다양한 기기 지원: 스마트폰뿐만 아니라 태블릿, 스마트워치, TV, 자동차 등 다양한 기기에 적용
  • 풍부한 앱 생태계: 구글 플레이 스토어를 통해 수백만 개의 앱 제공

안드로이드 아키텍처

안드로이드 운영체제는 계층적 구조로 설계되어 있으며, 각 계층은 명확한 역할과 책임을 가지고 있습니다.

1. 리눅스 커널 (Linux Kernel)

안드로이드의 가장 하위 계층으로, 하드웨어 추상화와 시스템 리소스 관리를 담당합니다.

주요 기능:

  • 하드웨어 드라이버 관리: 디스플레이, 카메라, 센서, 네트워크 등 하드웨어 장치 제어
  • 메모리 관리: 프로세스별 메모리 할당 및 관리
  • 프로세스 관리: 멀티태스킹 환경에서 프로세스 스케줄링
  • 보안: 파일 시스템 권한, 사용자 권한 관리
  • 네트워킹: TCP/IP 스택, 무선 네트워크 지원

2. 하드웨어 추상화 계층 (HAL - Hardware Abstraction Layer)

하드웨어와 상위 소프트웨어 계층 사이의 인터페이스를 제공합니다.

역할:

  • 하드웨어 제조사별 차이점을 추상화하여 일관된 API 제공
  • 카메라, 오디오, 센서 등의 하드웨어 기능을 표준화된 인터페이스로 제공
  • 새로운 하드웨어 추가 시 상위 계층 수정 없이 HAL만 수정하면 됨

3. 네이티브 라이브러리 (Native Libraries)

C/C++로 작성된 네이티브 라이브러리들로, 성능이 중요한 기능들을 담당합니다.

주요 라이브러리:

  • SQLite: 데이터베이스 관리
  • WebKit: 웹 브라우저 엔진
  • OpenGL ES: 3D 그래픽 렌더링
  • Media Framework: 오디오/비디오 재생 및 녹화
  • Surface Manager: 화면 표시 관리

4. 안드로이드 런타임 (Android Runtime)

안드로이드 애플리케이션이 실행되는 환경을 제공합니다.

구성 요소:

  • Dalvik Virtual Machine (DVM): 안드로이드 4.4 이전 버전에서 사용
  • Android Runtime (ART): 안드로이드 5.0부터 기본 런타임으로 사용
    • AOT(Ahead-of-Time) 컴파일로 성능 향상
    • 메모리 사용량 최적화
    • 배터리 수명 개선

5. 애플리케이션 프레임워크 (Application Framework)

안드로이드 애플리케이션 개발을 위한 고수준 API를 제공합니다.

주요 컴포넌트:

  • Activity Manager: 애플리케이션 생명주기 관리
  • Window Manager: 화면 레이아웃 및 윈도우 관리
  • Content Providers: 데이터 공유 및 접근
  • View System: UI 구성 요소
  • Notification Manager: 알림 시스템
  • Package Manager: 애플리케이션 설치 및 관리

6. 애플리케이션 (Applications)

사용자가 직접 사용하는 애플리케이션들입니다.

기본 애플리케이션:

  • 전화, 메시지, 연락처
  • 웹 브라우저, 이메일
  • 카메라, 갤러리
  • 음악 플레이어, 비디오 플레이어
  • 설정, 파일 관리자

안드로이드 아키텍처

안드로이드 시스템 접속

안드로이드는 리눅스 커널을 기반으로 하기 때문에, 리눅스 시스템과 유사한 방식으로 접속할 수 있습니다.

1. ADB (Android Debug Bridge) 접속

가장 일반적이고 안전한 방법으로, 개발자 옵션을 활성화하여 사용할 수 있습니다.

설정 방법:

  1. 설정 → 휴대전화 정보 → 빌드 번호 7번 탭
  2. 설정 → 개발자 옵션 → USB 디버깅 활성화
  3. PC에 ADB 설치 후 USB 연결

주요 ADB 명령어:

# 디바이스 연결 확인
adb devices

# 쉘 접속
adb shell

# 파일 전송
adb push [로컬파일] [원격경로]
adb pull [원격파일] [로컬경로]

# 앱 설치
adb install [apk파일]

2. Telnet 접속

안드로이드 에뮬레이터나 루팅된 기기에서 사용 가능합니다.

에뮬레이터에서 사용:

# 에뮬레이터 포트 확인 (기본: 5554)
telnet localhost 5554

# 쉘 접속
shell

루팅된 기기에서 사용:

  • Telnet 서버 앱 설치 필요
  • 보안상 위험하므로 개발 환경에서만 사용 권장

3. SSH 접속

루팅된 기기에서 SSH 서버를 설치하여 사용할 수 있습니다.

설정 방법:

  1. SSH 서버 앱 설치 (예: SSHDroid)
  2. 서비스 시작 및 포트 설정
  3. PC에서 SSH 클라이언트로 접속

4. 루팅 (Rooting)과 관련된 주의사항

루팅의 의미:

  • 안드로이드 기기의 최고 권한(root)을 획득하는 과정
  • 시스템 파일 수정 및 삭제 가능
  • 커스텀 ROM 설치 가능

루팅의 장점:

  • 시스템 레벨 앱 설치 가능
  • 성능 최적화 및 커스터마이징
  • 백업 및 복원 기능 강화

루팅의 단점:

  • 보안 위험 증가
  • 금융 앱, 결제 서비스 사용 제한
  • 구글 플레이 스토어 일부 앱 설치 불가
  • 보증 무효화
  • 시스템 불안정 가능성

안드로이드와 리눅스의 관계

1. 리눅스 커널 활용

안드로이드는 리눅스 커널의 핵심 기능들을 그대로 활용합니다.

활용되는 리눅스 기능:

  • 프로세스 관리: 멀티태스킹, 프로세스 스케줄링
  • 메모리 관리: 가상 메모리, 페이지 관리
  • 파일 시스템: ext4, FAT32 등 지원
  • 네트워킹: TCP/IP, 무선 네트워크 프로토콜
  • 보안: SELinux, 파일 권한 관리

2. 안드로이드 전용 수정사항

리눅스 커널을 모바일 환경에 최적화하기 위해 여러 수정사항이 적용되었습니다.

주요 수정사항:

  • Wake Lock: 배터리 절약을 위한 CPU 깨우기 제어
  • Binder IPC: 프로세스 간 통신 최적화
  • Low Memory Killer: 메모리 부족 시 프로세스 종료
  • Power Management: 전력 관리 최적화

학습 목표

이번 학습을 통해 다음 사항들을 이해할 수 있습니다:

  1. 안드로이드의 기본 개념과 특징
  2. 안드로이드 아키텍처의 각 계층별 역할
  3. 리눅스 커널과 안드로이드의 관계
  4. 안드로이드 시스템 접속 방법
  5. 루팅의 개념과 주의사항

실습 과제

  1. ADB 환경 구축: 개발자 옵션 활성화 및 ADB 설치
  2. 기본 명령어 실습: adb devices, adb shell 등
  3. 시스템 정보 확인: CPU, 메모리, 저장공간 정보 조회
  4. 파일 시스템 탐색: 안드로이드 파일 시스템 구조 이해
서브목차