100 likes | 419 Views
안드로이드 철학 , Open Access. 안드로이드 모바일 플랫폼 스택. java. c/ c++. Kernel. 안드로이드 구조 : 리눅스 커널. 안드로이드는 리눅스 커널을 기반으로 하고 있으나 , 안드로이드는 리눅스는 아니다 . 안드로이드는 X-Window 와 같은 내장 윈도우 시스템을 포함하지 않는다 . 안드로이드는 glibc 를 지원하지 않는다 . 안드로이드는 표준 리눅스 유틸리티 전체를 포함하고 있지 않는다 .
E N D
안드로이드모바일플랫폼 스택 java c/c++ Kernel
안드로이드 구조 : 리눅스커널 • 안드로이드는리눅스커널을 기반으로 하고 있으나, 안드로이드는리눅스는 아니다. • 안드로이드는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 출력하기