Linux/UNIX Programming Linux on Android 문양세 강원대학교 IT대학 컴퓨터과학전공
안드로이드 정의 안드로이드는 운영체제(operating system), 미들웨어 (middleware), 핵심 애플리케이션들(key applications) 을 포함하고 있는 모바일 디바이스를 위한 소프트웨어 스택(software stack)이다. 안드로이드는 모바일 기기의 외관, 분위기, 기능을 모양 지을 수 있는 모바일 애플리케이션을 작성하기 위한 API 라이브러리 셋과 더불어, 운영체제, 미들웨어, 핵심 애플 리케이션을 포함하는 오픈 소스 소프트웨어(OSS: open source software) 스택이다.
안드로이드 아키텍처
애플리케이션 캘린더, 전화번호부(contact), 맵, 브라우저, 이메일, SMS 프로그램 등의 핵심 app을 탑재한다. 모든 app은 Java 언어로 작성되어 있다. 우리가 작성하는 app들도 이 layer에 속하게 된다.
애플리케이션 프레임워크 (1/3) App 작성/구동에 필요한 서비스를 제공한다. Core system service Hardware service Native app과 동일한 수준으로, 프레임워크 API 사용이 가능하다. Java 사용이 가능한 프레임워크를 제공하며, 내부적으로 는 대부분 C/C++ 코드로 작성되어 있다.
애플리케이션 프레임워크 (2/3) Core system service Activity manager: 애플리케이션의 life cycle을 관리하며, navigation history(뒤로 돌아가기)를 관리한다. View system: 리스트, 버튼, 텍스트 박스, (내장된) 웹 브라우저 등 풍부 하고 확장성 뛰어난 뷰 집합을 제공한다. Content provider: 다른 응용프로그램들의 데이터를 가져오고 또한 자신 의 데이터를 제공한다. Resource manager: 프로그램 레벨의 코딩을 하지 않고도 다양한 리소 스(strings, graphics 등)를 사용할 수 있도록 도와준다. Notification Manager: Status bar에 알림문구를 표시하는 제공합니다.
애플리케이션 프레임워크 (3/3) Hardware service Location manager Telephony manager Bluetooth service WiFi service, USB service, sensor service
라이브러리 안드로이드는 C/C++ 라이브러리를 포함하고 있다. 라이브러리 기능은 애플리케이션 프레임워크를 통해 개발자 에게 제공된다. 주요 라이브러리 시스템 C 라이브러리: BSD의 libc에서 파생되어 구현됨 미디어 라이브러리: MPEG4, H.264, JPG 등 지원 Surface 매니저: 2D 및 3D 그래픽 레이어 관리 SGL(2D graphics engine), 3D 라이브러리 SQLite: Lightweight한 관계형 데이터베이스 엔진
안드로이드 런타임 안드로이드 런타임은 달빅(Dalvik) 가상 머신과 Core 라이브 러리로 구성된다 달빅은 임베디드 환경에 적합하게 디자인되었으며, 모든 안드 로이드 app은 달빅 상에서 구동된다. 달빅은 높은 수준으로 CPU 최적화된 바이트코드를 interpret 하며, 실행 시 메모리를 매우 효율적으로 사용한다. 컴파일(빌드) 시점에 Java .class와 .jar 파일들이 달빅 바이트 코드인 dex 파일로 변환된다.
리눅스 커널 핵심 시스템 서비스(보안, 메모리 관리, 네트워크 스택, 드라이버 등)에 대해 리눅스 버전 2.6 사용 핵심 시스템 서비스(보안, 메모리 관리, 네트워크 스택, 드라이버 등)에 대해 리눅스 버전 2.6 사용 리눅스 커널은 하드웨어와 안드로이드 플랫폼 스택 사이 의 추상화 계층 역할 수행
안드로이드 아키텍처 (revisit)
목차 안드로이드 정의 안드로이드 특징 안드로이드 아키텍처 안드로이드 커널 접근
에뮬레이터 쉘 접속 에뮬레이터가 수행 중인 상태에서 다음과 같이 입력한다. adb –s emulator-5554 shell 5554는 포트 번호이다. 포트 번호 확인
오드로이드 쉘 접속 개발용 디바이스가 연결된 상태에서 다음과 같이 입력한다. adb –s serial_number shell
안드로이드 리눅스 둘러보기(1/7)
안드로이드 리눅스 둘러보기(2/7)
안드로이드 리눅스 둘러보기(3/7)
안드로이드 리눅스 둘러보기(4/7)
안드로이드 리눅스 둘러보기(5/7)
안드로이드 리눅스 둘러보기(6/7)
안드로이드 리눅스 둘러보기(7/7)
당근, 에뮬레이터를 실행 후, 리눅스에 접근해야 합니다. 실제 apk 파일을 볼까요~ (1/2) Native apk: “/system/app” 디렉토리에 있음 당근, 에뮬레이터를 실행 후, 리눅스에 접근해야 합니다. native applications
실제 apk 파일을 볼까요~ (2/2) Third party apk: “/data/app” 디렉토리에 있음 third party applications (즉, 제가 만든 application 입니다)
안드로이드 App의 실행 모든 app은 자신의 리눅스 프로세스 내에서 실행된다. 각 프로세스는 자기 자신의 virtual machine을 가진다. 각 app에는 고유한 리눅스 user ID가 부여된다. 리눅스 permission scheme을 이용한다. User ID