<Android Application 개발환경 구축>
JDK 최신버전
Android SDK
eclipse 설치
Android용 eclipse plugin 설치

에뮬레이터 동작중 : adb shell(프로세스 관리)

emulator -avd my_avd 
         -show-kernel(리눅스 커널 메세지 show) 
         -ramdisk ramdisk.img(image path) 
         -system system.img(system path)
         -init-data userdata.img(initdata path)
-kernel ???(원하는 커널 이미지로 실행할수 있음)

QEmu : x86->x86,powerpc,mips(system emulator)
Android emulator는 QEmu 기반으로 만들어짐.


예제 프로그램 실행후
adb shell 실행시켜 /data/app 위치에 보면 실행된 예제프로그램이 있음.(apk)

프로그램 삭제
home/settings/Application/manager application/에서 삭제한다.

<전통적인 임베디드 리눅스 시스템 vs 안드로이드 시스템>

응용프로그램

(middle ware)그래픽시스템(QT, GTK+, ...) + 멀티미디어 + DB
C 라이브러리(glibc, uclibc, NewLib, ...)

커널+디바이스드라이버
부트로더
하드웨어

<Android 지원 Architecture>
ARMv5TE 이상
x86

<Virtual Machine>
Sun JVM, Microsoft CLR : Stack Machine
Android Dalvik VM : Register Machine

apk 파일 뒤에 zip 파일로 변환하면 내용을 볼수 있다.

<Android System Boot Flow>

Power on -> CPU reset 
         -> 부트로더(하드웨어 초기화(최소), 리눅스 커널&램디스크 메모리에 로드)
         -> 리눅스 커널(하드웨어 초기화, 시스템 초기화, 내부 자료구조 초기화, ...)
-> init(c로 만들어짐) 프로그램을 실행(ramdisk에 존재)($ pstree로 확인)
   (안드로이드는 최상위 디렉토리 '/' 는 램디스크에 존재함)
         (여기까지 전통적인 리눅스 부팅)
-> init(custom version) 프로그램을 실행
-> 설정 파일(/init.rc, /init.하드웨어명.rc)을 읽어들여서 처리한다.
   (내가 원하는 프로그램(c로작성된)을 백그라운드로 돌리고싶을때 위의 파일에서 실행시키면 됨)


<init.rc>
C:\punbear>adb pull /init.rc(init.rc 파일을 현재 디렉토리로 꺼냄)
init.rc의 내용은 리눅스 명령이 아님(ex.mount, chown, chmod, ...)

내용중 "## Daemon processes to be run by init." 아래 있는 순서대로 Daemon이 실행됨.
adb shell에서 ps 로 확인해보면 init의 PPID가 init으로 된 녀석을 찾아보면 Daemon이
실행된 순서되로 되어 있음.

Daemon이 critical로 되어있는 서비스는 동작중 멈추게되면 init(최상위서비스)에서 자동으로 재실행해준다.
(ex. ps에서 나온 process 중 /system/bin/servicemanager(critical) 를 kill 하게되면 실제로 
     emulator가 멈췄다가 재실행된다. 그후 ps로 확인하면 다시 살아있음.)

linux android source :  android-repo-dir/system/core/init/readme.txt 
위의 파일에 init.rc 파일 속성에 대한 설명이 있다.

<Android source>
*.mk 파일 (Makefile)

bootchart (최적화 툴) Android.mk 파일에서 bootchart부분 활성화 시켜서 컴파일하여
실행시키면 bootchart 폴더안에 파일이 생성됨. 이파일들을 tgz 압축하여 리눅스에서
bootchart 프로그램설치후 확인가능함.(sudo apt-get install bootchart)