슬라이드 1

Similar documents
모바일 안드로이드 아키텍처

Microsoft PowerPoint App Fundamentals[Part1].pptx

1부

Microsoft PowerPoint App Fundamentals[Part1](1.0h).pptx

Microsoft PowerPoint Android-구조.애플리케이션 기초(1.0h).pptx

Special Theme _ 모바일웹과 스마트폰 본 고에서는 모바일웹에서의 단말 API인 W3C DAP (Device API and Policy) 의 표준 개발 현황에 대해서 살펴보고 관 련하여 개발 중인 사례를 통하여 이해를 돕고자 한다. 2. 웹 애플리케이션과 네이

(Microsoft PowerPoint - AndroG3\306\367\306\303\(ICB\).pptx)

안드로이드 서비스

THE TITLE

Microsoft PowerPoint - Mobile SW Platform And Service Talk pptx

Microsoft PowerPoint - chap01-C언어개요.pptx

슬라이드 1

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

서현수

슬라이드 1

[Brochure] KOR_TunA

Microsoft PowerPoint - 13-em14-안드로이드.ppt [호환 모드]

Secure Programming Lecture1 : Introduction

1

PowerPoint Template

리눅스설치가이드 3. 3Rabbitz Book 을리눅스에서설치하기위한절차는다음과같습니다. 설치에대한예시는우분투서버 기준으로진행됩니다. 1. Java Development Kit (JDK) 또는 Java Runtime Environment (JRE) 를설치합니다. 2.

Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드]

Mango-IMX6Q mfgtool을 이용한 이미지 Write하기

PowerPoint Presentation

슬라이드 1

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

1) 리눅스커널 메모리관리, 프로세스관리, 파일시스템관리, 네트워크스택등하드웨어지원 2) Native 라이브러리 (C, C++) 안드로이드프레임워크에서필요한 C 와 C++ 라이브러리 3) 안드로이드런타임 코어라이브러리지원, Dalvik Virtual Machine 으로

강연자소개 대외활동 동호회설립및운영자 (2004 년 12 월설립 ) 운영진 고현철, 김재훈, 유형목, 와함께국내에몇개남지않은임베디드리눅스를전문으로하는 community. 현재가입자수약만 4 천여명

슬라이드 1

슬라이드 1

Microsoft PowerPoint - 01.Android-개요 done.pptx

Microsoft PowerPoint - Windows CE Programming_2008 [호환 모드]

PowerPoint 프레젠테이션

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

임베디드시스템설계강의자료 4 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

JVM 메모리구조

SMB_ICMP_UDP(huichang).PDF

PCServerMgmt7

PowerPoint 프레젠테이션

Microsoft Word - 임베디드월드_WindowsEmbeddedCompact7_rev

HTML5* Web Development to the next level HTML5 ~= HTML + CSS + JS API

Windows 8에서 BioStar 1 설치하기

PowerPoint 프레젠테이션

52 l /08

PowerPoint 프레젠테이션

Android Master Key Vulnerability

Microsoft Word ARM_ver2_0a.docx

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

Microsoft PowerPoint - 03-Development-Environment-2.ppt

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx

슬라이드 1

USB 케이블만을이용한리눅스 NFS 개발환경 (VirtualBox) 최초작성 : 2010 년 10 월 21 일 작성자 : 김정현 수정내용 최초작성 by 김정현 스크립트추가, 설명보충 by 유형목 1. VritualBox

소프트웨어설치 1. 소프트웨어설치및제거 ( 소스코드 ) 소스코드컴파일을이용한 S/W 설치 1. 소스코드다운로드 - 예 ) httpd tar.gz - 압축해제 : #tar xzvf httpd tar.gz - INSTALL 또는 README파일참조

PowerPoint 프레젠테이션

제11장 프로세스와 쓰레드

DE1-SoC Board


CodeVisor Technical Document

Microsoft PowerPoint App Fundamentals[Part2].pptx

Microsoft PowerPoint - 김창수 v2.pptx

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate

PowerPoint 프레젠테이션

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

untitled

표준프레임워크로 구성된 컨텐츠를 솔루션에 적용하는 것에 문제가 없는지 확인

Sena Technologies, Inc. HelloDevice Super 1.1.0

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Microsoft Word doc

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

RHEV 2.2 인증서 만료 확인 및 갱신

Chapter #01 Subject

PowerPoint Presentation

API 매뉴얼

Interstage5 SOAP서비스 설정 가이드

Microsoft PowerPoint - 15-MARS

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

1. 안드로이드개발환경설정 안드로이드개발을위해선툴체인을비롯한다양한소프트웨어패키지가필요합니다 툴체인 (Cross-Compiler) 설치 안드로이드 2.2 프로요부터는소스에기본툴체인이 prebuilt 라는이름으로포함되어있지만, 리눅스 나부트로더 (U-boot)

CODESYS 런타임 설치과정

2 PX-8000과 RM-8000/LM-8000등의 관련 제품은 시스템의 간편한 설치와 쉬운 운영에 대한 고급 기술을 제공합니다. 또한 뛰어난 확장성으로 사용자가 요구하는 시스템을 손쉽게 구현할 수 있습니다. 메인컨트롤러인 PX-8000의 BGM입력소스를 8개의 로컬지

PowerPoint 프레젠테이션

1217 WebTrafMon II

망고100 보드로 놀아보자-4

ESP1ºÎ-04

PowerPoint Presentation

PowerPoint 프레젠테이션

Spring Boot/JDBC JdbcTemplate/CRUD 예제

PowerPoint 프레젠테이션

슬라이드 1

- 목차 - - ios 개발환경및유의사항. - 플랫폼 ios Project. - Native Controller와플랫폼화면연동. - 플랫폼 Web(js)-Native 간데이터공유. - 플랫폼확장 WN Interface 함수개발. - Network Manager clas

공개SW 솔루션 목록

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

슬라이드 제목 없음

untitled

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Chap7.PDF

J2EE & Web Services iSeminar

Transcription:

3 부실제편 Chapter 11 안드로이드아키텍처의이해및분석 Chapter 12 에뮬레이터개발지원환경및분석 Chapter 13 실제타깃으로포팅하기 Chapter 14 타깃장치로고급포팅하기 Chapter 15 안드로이드마켓

11 장안드로이드아키텍처의 이해및분석

목차 11.1 안드로이드소프트웨어플랫폼 11.2 안드로이드커널

11.1 안드로이드소프트웨어플랫폼 4 플랫폼구조 소프트웨어플랫폼이란? 소프트웨어의주요구성요소, 구성요소간의인터페이스, 중요동작방식등의주요특징들을결정짓는모든설계구조 소프트웨어플랫폼은소프트웨어개발에있어가장영향력 소프트웨어플랫폼종류 : 윈도우, 리눅스, 닷넷, 자바 런타임 (runtime) 이란? 안드로이드소프트웨어플랫폼? 모바일장치를위한소프트웨어집합체계층적구조 : 커널, 라이브러리, 런타임라이브러리, 애플리케이션프레임워크, 애플리케이션으로적층 자바플랫폼이라고하지않음 [ 그림 11-1] 안드로이드플랫폼

11.1 안드로이드소프트웨어플랫폼 안드로이드파일시스템구조 일반리눅스파일시스템구조와다르다. [ 그림 11-2] 일반리눅스파일시스템구조

11.1 안드로이드소프트웨어플랫폼 6 안드로이드파일시스템구조 일반리눅스파일시스템에안드로이드플랫폼위한파일저장폴더추가 /data, /system 폴더추가 /recovery 추가 : 안드로이드 2.2 버전 각각의추가된폴더에어떤내용이들어있는지확인필요 [ 그림 11-3] 안드로이드리눅스파일시스템구조

11.1 안드로이드소프트웨어플랫폼 7 안드로이드파일시스템구조 adb 를사용한파일시스템내용 [ 그림 11-4] 안드로이드파일시스템구조확인

11.1 안드로이드소프트웨어플랫폼 8 안드로이드파일시스템구조 adb 를사용한 /data/app/ 폴더내용 [ 그림 11-5] /data/app 디렉토리내용

11.1 안드로이드소프트웨어플랫폼 9 안드로이드파일시스템구조 adb 를사용한 /data/data/ 폴더내용 [ 그림 11-6] 애플리케이션용데이터저장파일

10 커널특징 Open source 리눅스커널 2.6.x 에안드로이드커널패치 내부메모리관리, 프로세스관리, 네트워킹, 운영체계 상위층 : 라이브러리, 달빅런타임 하위층 : 하드웨어 ( 기본장치외의하드웨어릏모듈형식으로동작 ) 사용자모드로동작하면커널버전이갱신될때마다플러그인방식으로배포 / 사용이편리속도느려지는단점라이선스안정성향상 [ 그림 11-7] /dev 의하드웨어드라이버확인

11 우분투리눅스 + 안드로이드기능추가 Debian GNU/Linux 기본 무료로다운로드 GPL, LGPL 라이선스 레드햇리눅스상업화이후독보적마켓쉐어 커널설정에서다음기능추가 Alarm 기능, 공유메모리 (ashmem), low memory-killer, 전력관리 (Power management), 바인더, logger 등 [ 그림 11-8] 우분투홈사이트

12 커널빌드도구변경 기존임베디드시스템은 ARM 사의 ABI (Application Binary Interface) 기반 gcc 컴파일러사용 안드로이드에서는 ARM EABI (Embedded Application Binary Interface) 기반의툴체인사용 EABI?

13 안드로이드일반라이브러리 라이브러리 : C/C++ 로제작 C/C++ 라이브러리변경 : glibc -> BSD Unix 의 libc->bionic C 라이브러리가동적라이브러리확장자 (so)/system/lib 폴더에위치 surface manager, media framework, sqlite, webkit, libc 등으로구성 [ 그림 11-9] 안드로이드라이브러리종류

14 안드로이드일반라이브러리 : surface manager 애플리케이션생성화면 -> 프레임버퍼저장 (RAM) -> LCD 화면표시 LCD 와 CPU 데이터처리속도차이 : 프레임버퍼저장후일시에 LCD 출력 2D, 3D 표현 화면합성, 결합, 반투명효과 [ 그림 11-10] 서피스매니저

15 안드로이드일반라이브러리 : 미디어프레임워크 : PocketVideo OpenCORE 기반, MPEG4, H264, AAC Sqlite : 개방형관계형데이터베이스 WebKit : 웹브라우저기반엔진, 화면웹내용, 오픈소스, 웹관련클래스제공 glibc : GPL, 소스공개의무 libc : BSD, 공개의무없음, 코드경량, libc 를플랫폼에맞게수정한 Bionic C lib, 프로세스마다동적으로적재, libc.so: 226KB 의경량쓰레드 모든라이브러리코드가 bionic 과함께컴파일 LibWebCore OpenGL ES FreeType Audio Manager [ 그림 11-11] 오디오매니저

16 안드로이드런타임라이브러리 : 컴퓨터프로그램을실행하는동안의기능을추가하기위하여사용되는특별한프로그램라이브러리 입출력, 메모리관리, 산술함수기능 일반라이브러리와차이는컴파일러제조사에따라다름 런타임라이브러리는컴파일러와플랫폼에종속 달빅 (Dalvik) 가상머신의지원으로하드웨어종속성해결, 달빅은 405KB 의 livdvm.so 라이브러리로지원

[ 그림 11-12] 자바와달빅가상머신바이트코드비교 11.2 안드로이드커널 안드로이드런타임라이브러리 : DalVik VM 달빅가상머신 가장신비스러운곳 : 미공개소스 Interpreter, register based, 적은메모리에최적화된가상머신, banked 레지스터기반데이터이동으로속도가빠름 일반자바가상머신 : stack based(push, POP 사용 ) 자바언어사용하지만선마이크로시스템스의자바와는다름 ( 특허문제때문 ) 선마이크로시스템스 Java : 1-2 바이트길이코드 안드로이드 Java : 4 바이트코드, ARM 프로세서에최적화, 4 바이트레지스터로명령수행, 빠른성능 17

18 안드로이드런타임라이브러리 : Dalvik VM 일반자바 : 소스코드 (.java) -> 자바컴파일러 -> 클래스생성 (.class) -> 가상머신에서실행 안드로이드자바 : 소스코드 (.java) -> 자바컴파일러 -> 클래스생성 (.class) -> dx 사용 -> dex ( 최소메모리로최적화 ) -> Dalvik 가상머신에서실행

19 안드로이드런타임라이브러리 : Dalvik VM dex 파일구조실습 tools> dexdump -d classes.dex < 실습 11-1> dexdump 의이용 1. cmd 명령으로명령창띄운다. 2. D 드라이버로이동하기위하여 d: 을입력한다. 3. 안드로이드 SDK 에대한환경변수설정이되어있지않다면 cd android\android-sdk\platforms\android-3\tools 명령을실행한다. 4. dexdump -f D:\android\workspace\android\bin\classes.dex 명령을실행

20 안드로이드런타임라이브러리 : Dalvik VM dex 파일구조실습 DEX 버전 : 최초 8 바이트의 Magic Value 값은 035 이다. [ 그림 11-13] dex 파일의헤더구조

< 표 11-1> Dex 파일헤더구조 오프셋 크기 ( 바이트 ) 설명 0x0 8 'Magic' value: "dex\n009\0" 0x8 4 Checksum 0xC 20 SHA-1 Signature 0x20 4 Length of file in bytes 0x24 4 Length of header in bytes (currently always 0x5C) 0x28 8 Padding (reserved for future use?) 0x30 4 Number of strings in the string table 0x34 4 Absolute offset of the string table 0x38 4 Not sure. String related 0x3C 4 Number of classes in the class list 0x40 4 Absolute offset of the class list 0x44 4 Number of fields in the field table 0x48 4 Absolute offset of the field table 0x4C 4 Number of methods in the method table 0x50 4 Absolute offset of the method table 0x54 4 Number of class definitions in the class definition table 0x58 4 Absolute offset of the class definition table

22 안드로이드런타임라이브러리 : Dalvik VM 모든애플리케이션은각자의프로세스실행 고유의달빅가상머신인스턴스 그래서안드로이드는동시에여러개의가상머신실행 일반자바는 1 개의가상머신실행 안드로이드에서애플리케이션프로세스간의독립과메모리관리쓰레드는리눅스운영체제의지원 애플리케이션 ( 자바코드 ) 에서 JNI 를통하여 C 라이브러리 ( 하드웨어드라이버 ) 호출이가능 [ 그림 11.14] 라이브러리동작개념

Application Framework 애플리케이션기발 Activity manager, Window manager, package manager, telephony, resource manager, location manager, content provider 로구성 개발자는프레임워크의 API 활용하여애플리케이션개발 자바로구현 프레임워크와라이브러리사이에는자바와 C 사이의호출규약을매핑하는 JNI 바인딩기술존재 23 윈도우, 리눅스 : 다수의애플리케이션동시에표시 안드로이드 : 1 개의 foreground 애플리케이션표시, 액티비티매니저에의해관리 패키지매니저 : 시스템에동작중인애플리케이션관련정보관리, 하나의패키지파일로배포 ( 윈도우는다수의 DLL 로구성, 배포 ) 윈도우매니저 : 애플리케이션과관련된화면관리 컨텐트프로바이더 : 데이터에대한접근제어, 다른애플리케이션과데이터공유,

24 Application Activity, Broadcast receiver, service, content provider 4 가지 components 조합으로구성 애플리케이션간의동일한권한 애플리케이션에서는사용컴포넌트목록을 AndroidManifest.xml 파일에기록 하나의애플리케이션패키지 : apk 기본 Home 화면내용 : 전화 dial, e-mail, 주소록, web browser, 안드로이드마켓 애플리케이션은각각독립된메모리공간 인텐트 : 애플리케이션간의메모리공유 [ 그림 11-15] 애플리케이션분류

안드로이드플랫폼부팅 커널부팅 -> init ( 파일시스템마운팅, 폴더권한설정, 시작프로그램동작 ) -> 안드로이드데몬적재 25 [ 그림 11-16] 안드로이드플랫폼부팅과정

안드로이드플랫폼부팅 리눅스커널시작후안드로이드의고유데몬실행 소리볼륨데몬 -> 디버그시스템데몬 -> 자이고트 26 [ 그림 11-17] 커널부팅후실행중인프로세스

안드로이드플랫폼부팅 자이고트 달빅 -> 시스템서버 -> 서피스매니저 -> 오디오매니저시동 자이고트와시스템서버간의 IPC (127.0.0.x) 소켓통신 27 [ 그림 11-18] 안드로이드부팅과정

안드로이드플랫폼부팅 시스템서버 (system server) Native services 미디어관련서비스시작 [ 그림 11-19] 네이티브서비스초기화순서

안드로이드플랫폼부팅 Native service 초기화코드부분 < 코드 11-1> 네이티브서비스초기화코드 extern "C" status_t system_init() { LOGI("Entered system_init()"); sp<processstate> proc(processstate::self()); sp<iservicemanager> sm = defaultservicemanager(); LOGI("ServiceManager: %p\n", sm.get()); sp<grimreaper> grim = new GrimReaper(); sm->asbinder()->linktodeath(grim, grim.get(), 0); char propbuf[property_value_max]; property_get("system_init.startsurfaceflinger", propbuf, "1"); if (strcmp(propbuf, "1") == 0) { // Start the SurfaceFlinger SurfaceFlinger::instantiate(); } // On the simulator, audioflinger et al don't get started the // same way as on the device, and we need to start them here if (!proc->supportsprocesses()) { // Start the AudioFlinger AudioFlinger::instantiate(); // Start the media playback service MediaPlayerService::instantiate(); // Start the camera service CameraService::instantiate(); 29

안드로이드플랫폼부팅 자이고트이후각종기본서비스및애플리케이션 30 [ 그림 11-20] 안드로이드데몬 / 애플리케이션동작상황

안드로이드플랫폼부팅 안드로이드부팅이후자바서비스시작 : 시스템서버 /frameworks/base/services/java/com/ android/server/systemserver.java 시스템서버는 Native 서비스외에도다양한서비스지원 31 [ 그림 11-21] 시스템서버서비스순서

32 < 코드 11-2> 시스템서버에서 init2() 와스레드를호출하는코드 // And now start the Android runtime. LOGI("System server: starting Android runtime.\n"); AndroidRuntime* runtime = AndroidRuntime::getRuntime(); LOGI("System server: starting Android services.\n"); runtime->callstatic("com/android/server/systemserver", "init2"); // If running in our own process, just go into the thread // pool. Otherwise, call the initialization finished // func to let this process continue its initilization. if (proc->supportsprocesses()) { LOGI("System server: entering thread pool.\n"); ProcessState::self()->startThreadPool(); IPCThreadState::self()->joinThreadPool(); LOGI("System server: exiting thread pool.\n"); } return NO_ERROR; }

33 시스템서버의기타서비스목록네트워크상태서비스 NetStat Service, 연결서비스 Connectivity Service, 노티피케이션매니저 Notification Manager, 마운트서비스 Mount Service, 디바이스스토리지모니터서비스 Device Storage Monitor Service, 위치매니저 Location Manager, 탐색매니저서비스 Search Manager Service, 폴백체크인서비스 Fallback Checkin Service, 배경화면서비스 Wallpaper Service, 오디오서비스 Audio Service, 핸드셋옵저버 Headset Observer 등 [ 그림 11-22] 서비스목록