안드로이드 런타임

Download Report

Transcript 안드로이드 런타임

안드로이드 철학, Open Access
안드로이드 모바일 플랫폼 스택
java
c/c++
Kerne
l
안드로이드 구조 : 리눅스 커널
•
안드로이드는 리눅스 커널을 기반으로 하고 있으나, 안드로이드는 리눅스는 아니다.
•
•
•
•
•
•
안드로이드는 X-Window와 같은 내장 윈도우 시스템을 포함하지 않는다.
안드로이드는 glibc를 지원하지 않는다.
안드로이드는 표준 리눅스 유틸리티 전체를 포함하고 있지 않는다.
안드로이드는 리눅스 커널 버전 2.6.23, 2.6.24, 2.6.25, 2.6.27 을 사용해 왔다.
안드로이드를 지원하기 위해, 리눅스 커널 확장을 위한 패치를 포함하고 있다.
안드로이드에서 리눅스를 사용하는 이유는 메모리 및 프로세스 관리, 인가(Permission) 기반의 보안 모델, 검증
된 드라이버 모델, 공유 라이브러리 지원, 오픈 소스 기반 등의 장점 때문이다.
•
•
안드로이드를 위해 확장된 리눅스 커널 영역은, Alarm, Ashmem, Binder, Power Management, Low Memory,
Killer, Kernel Debugger, Logger 이다.
안드로이드 리눅스 커널 소스는 현재 아래의 URL에서 배포되고 있다.
•
http://git.android.com
안드로이드 구조 : 내장 라이브러리
•
안드로이드 내장 라이브러리는, Bionic Libc, Function Library, Native Server, Hardware Abstraction Library로
구성된다.
•
Bionic 은 임베디드에서 사용을 위해 최적화된 직접 구현된 libc 이다. libc를 직접 구현한 이유는 다음과 같다.
-라이센스: user application에서 GPL 문제회피
-size: 약200k, glibc(GNUversion of libc)의 절반크기
-speed: 제한된CPU power에서 동작
•
•
•
•
•
•
•
•
System C library : 임베디드 리눅스 기반 기기를 위한, 표준 C 시스템 라이브러리(libc)의 BSD 상속 구현체
Media Libraries : PacketVideo의 OpenCORE 기반이며, 인기있는 오디오 및 비디오 포맷, MPEC4 / H.264 / MP3
/ AAC / AMR / JPG / PNG를 포함하는 정적 이미지 파일의 재생 및 녹음(녹화)
Surface Manager : 디스플레이 서브시스템 및 다수의 응용프로그램의 2D, 3D 그래픽 레이어
LibWebCore : 안드로이드 브라우저 및 Embeddable 웹 뷰와 같은 최신의 웹 브라우저 엔진
SGL : 2D graphics 지원
3D libraries : OpenGL ES 1.0 API 기반를 기반으로 하며, 하드웨어 3D 가속 또는 최적화된 3D S/W rasterized
FreeType : 비트맵과 벡토 폰트 렌더링
SQLite : 모든 응용프로그램에서 사용 가능한 강력하고 경량인 관계형 데이터베이스 엔진
안드로이드 구조 : 하드웨어 추상화 계층
•
Hardware Abstraction Library는 User space의 C/C++ 라이브러리 계층으로써, 안드로드에서 요구되는 하드웨
어 드라이버의 구현에 대한 인터페이스를 정의한다. 더불어 하드웨어 인터페이스로부터 안드로이드 플랫폼의 로
직을 분리하는데 사용된다.
•
User-pace의 HAL이 필요한 이유는, 모든 컴포넌트들이 표준화된 리눅스 커널 드라이버 인터페이스를 가지고 있
지 않기 때문이며, 리눅스 드라이버들은 사적인 지적소유권을 공개할 수 밖에 없는 GPL 기반이란 이유 때문이다.
또한 안드로이드는 하드웨어 드라이버들을 위한 별도의 요구사항을 가지고 있기 때문이기도 하다.
•
안드로이드 동작을 위해 구현해야 하는 하드웨어 드라이버로 개발자가 구현해야 하는 API의 집합으로 보면 될
것 같습니다.
안드로이드 구조 : 안드로이드 런타임
•
안드로이드 런타임은, 안드로이드에서 사용되는 Dalvik 가상 머신과 Core 라이브러리들로 구성된다.
•
Android의 개발은 Eclipse의ADT Plug-in을 통해서 Java로 컴파일되고 class와 resource가 Dx컨버터를 통해서
Android App(.apk)로 만들어지며 이 apk가 Dalvik VM 위에서 동작하게 된다.
•
•
자바어플리케이션에서 호출할때 libc기반의 C/C++ library를 호출할 때 runtime library를 호출.
dex.( Dalvik Executables (DEX)) 실행파일의 구조를 가지게 된다. 실행파일이 symbloic resolution을 통하여 함
수를 가지고 있다가 library를 호출한다.
•
모든 안드로이드 응용프로그램은 각자의 프로세스상에서 실행되며, 고유의 Dalvik 가상머신의 인스턴스를 가지
고 있다. Dalvik은 기기가 다수의 가상머신에서 효율적으로 실행될 수 있도록 제작되었으며, 최소의 메모리 영역
에 최적화된 Dalvik Executable(.dex) 포맷 파일을 실행시킨다.
•
가상머신은 레지스터 기반이며, 자바 컴파일러로 컴파일된 클래스들을 "dk"툴을 이용하여 .dex 포맷으로 변경한
클래스들을 실행한다.
•
Dalvik 가상머신은 스레딩과 저수준 메모리 관리와 같은 리눅스 커널 기능을 사용한다.
안드로이드 구조 : 안드로이드 런타임
•
안드로이드 Core 라이브러리는 Java Standard Edition과 Java Mobile Edition과는 다르지만, 중복되는 부분이
상당히 있다.
안드로이드 구조 : 애플리케이션 프레임워크
•
안드로이드 애플리케이션 프레임워크는 Java 기반의 Framework 이며, 대부분이 JNI(Java Native Interface) 통
해 native C/C++ 코드로 작성되어 있다.
•
응용프로그램 아키텍쳐는 컴포넌트 재사용을 손쉽게 할 수 있도록 디자인 됨
(단, 프레임워크의 보안 제약을 따라야 한다.)
•
이같은 메카니즘은 컴포넌트를 사용자에 의해 교체할 수 있도록 한다.
안드로이드 개발 환경 구축
•
안드로이드가 지원하는 운영체제 버전
Windows XP 또는 Vista / Max OS X 10.4.8 이후 (x86 만 지원) / 리눅스
•
1. Java SDK 설치
JDK의 현재 최신 버전(2010.03.11 기준)은 JDK 6 Update 18
•
2. eclipse 설치(http://www.eclipse.org/)
Galileo Eclipse 3.5((2009.12.22 기준) 다운 후 설치
•
3. Android SDK 설치
다운로드 후 설치 : (http://developer.android.com/sdk/index.html )
환경변수 등록 : D:\Android_SDK\tools 추가
Android SDK adn AVD Manager > Available Package 추가등록
•
4. ADT(Android Development Toolkit – 이클립스 안드로이드 플러그인) 설치
Eclipase -> Help -> Install New Software -> Available Software -> Add
Add Site > Name : Android Plugin 입력/ Location: https://dl-ssl.google.com/android/eclipse/ 입력
Install Details 창에서 Android DDMS 와 Android Development Tools 확인후 Next> 동의후 인스톨
이클립스를 재실행 후 툴바에 핸드폰 아이콘이 등록되어있으면 성공함.
Android SDK Directory 설정
Eclipase -> Window -> Preferences > SDK Location 항목에 안드로이드 SDK 압축을 푼 폴더 경로 지정
안드로이드 개발 환경 구축
•
Hello Android 출력하기