SlideShare uma empresa Scribd logo
1 de 53
Baixar para ler offline
Anatomy of an Android
             김용욱 (@dalinaum)
Android Version

● 1.5 Cupcake
● 1.6 Donut
● 2.0 2.1 Eclair
● 2.2 Froyo (Frozen Yogurt)
● 2.3.x Gingerbread (2.3.7)
● 3.x Honeycomb (3.2)
  ....
● 4.x Ice Cream Sandwich
 
시작점

● Anatomy & Physiology of an Android (2008 Google IO)
   ○ Patrick Brady (Google)
● Inside the Android Application Framework (2008 GIO)
   ○ Dan Morill (Google)
Linux Kernel

 
리눅스 커널

● 리눅스 커널 위에 동작하지만 리눅스는 아니다.

● 리눅스의 표준 유틸리티를 사용하지 않는다.

● 리눅스의 커널 버전은 크게 중요하지 않음.
리눅스 커널

● 메모리, 프로세스 관리가 뛰어나다.

● 퍼미션 기반의 보안 모델을 가지고 있다.

● 오픈소스
리눅스 커널

● Timed GPIO (Generic-purpose I/O)
● Power Management
● Ashmem (Anonymous shared memory)
● Binder
● Low Memory Killer
● Kernel Debugger
● Logger
● Alarm
Timed GPIO(generic purpose I/O)

● Mike Lockwood (Google)

● 일정 시간동안 사용자영역에서 GPIO에 접근하기 위해 열어
  둔 인터페이스

● 바이브레이터 등에 사용됨.

●  drivers/staging/android/
    ○ timed_output.[h|c]
    ○ timed_gpio.[h|c]
Power Management

● 작성자: Google (iSad...)

● Suspend 전에 애플리케이션의 종료 기회 제공.

● kernel/power/ 디렉토리에 위치
   ○ suspend.c
   ○ userwakelock.c
   ○ earlysuspend.c
   ○ consoleearlysuspend.c
   ○ fbearlysuspend.c
Ashmem (Anonymous shared memory)

● Robert Love (Google, Ex-Noveller)
   ○  Linux Kernel Developmen의 저자
   ○ Android의 Logger도 작성.

● 여러 프로세스 간의 데이터 공유를 위함.

● pmem과의 차이점은 "익명"이라는 점.

● mm/ashmem.c
Binder (Android IPC, like RPC)

● Dianne Hackborn (Google, Ex-BeOSer)

● Binder (BeOS) -> OpenBinder (Palm)
  -> Binder (Android)
● RPC같은 IPC를 구현

● driver/staging/android
   ○ binder.[h|c]
Low memory killer
● Arve Hjønnevåg (Google, Ex-BeOSer)

● 리눅스 메모리관리
   ○ 사용량이 많은 프로세스 희생.
   ○ 다수 프로세스를 살리는 데 있음.

● 안드로이드 - 포그라운드 앱 우선
   ○ 프로세스마다 현재 상태 기록.

● driver/staging/android
   ○ lowmemorykiller.c
Low memory killer example (init.rc)
# Define the oom_adj values for the classes of processes that can be
# killed by the kernel.  These are used in ActivityManagerService.
   setprop ro.FOREGROUND_APP_ADJ 0
   setprop ro.VISIBLE_APP_ADJ 1
   setprop ro.SECONDARY_SERVER_ADJ 2
   setprop ro.HIDDEN_APP_MIN_ADJ 7
   setprop ro.CONTENT_PROVIDER_ADJ 14
   setprop ro.EMPTY_APP_ADJ 15

# Define the memory thresholds at which the above process classes will
# be killed.  These numbers are in pages (4k).
   setprop ro.FOREGROUND_APP_MEM 1536
   setprop ro.VISIBLE_APP_MEM 2048
   setprop ro.SECONDARY_SERVER_MEM 4096
   setprop ro.HIDDEN_APP_MEM 5120
   setprop ro.CONTENT_PROVIDER_MEM 5632
   setprop ro.EMPTY_APP_MEM 6144
HAL (Hardware Abstraction Layer)

 
HAL (Hardware Abstraction Layer)

● 리눅스 커널 디바이스를 안드로이드로 부터 분리하기 위함

● 라이선스 문제
   ○ 리눅스 커널은 GPL - 공개해야 함.
   ○ 커널만 공개하고 하드웨어 드라이버 로직을 HAL로 분리
   ○ Google과 Apple은 자신들이 원하는 내용만 공개.

● 호환성 문제
   ○ 안드로이드는 리눅스 커널 드라이버 구조를 몰라도 됨.
Android Runtime

 
Dalvik

● Dan Bornstein (Obvious Corp, Ex-Googler)

● Dalvik - Dan이 살던 지명.

● 레지스터 방식의 Java Virtual Machine.
   ○ Oracle(Sun) VM은 스택방식
   ○ Oracle의 특허 회피
   ○ ARM에 최적화.

● DEX 포맷 사용
   ○ JAR보다 용량 효율적.
Libraries

 
Libraries
● Bionic C (Shinichiro Kwasaki-Hitachi)
   ○ Non-GPL Lib C, Very small
● WebKit (Don Melton-Apple, Martin Jones, Torben Weis)
   ○ KDE (KHTML) -> Apple (Webkit)
● Media Framework (StageFright)
   ○ OpenCore (PV)  -> StageFright (Google, 보다 단순함)
● SQLite (D. Richard Hipp-Hipp, Wyrick & Company, Inc.)
   ○ 경량 DB (앱에 내장 되는 형태)
   ○ 최근에는 LevelDB로 대체 움직임
● Native Servers
   ○ SurfaceFlinger, AudioFlinger
Native Servers
 
Application Framework

 
Application Framework

● Core Platform Services

● Hardware Services

● Application Framework
Core platform Services

● Activity Manager
● Package Manager
● Window Manager
● Resource Manager
● Content Providers
● View System
What is Activity?

 
 
Intent

 
Intent (URL을 액티비티으로 연결)
<activity android:name=".MyActivity">
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="http" android:host="mysite.com android:pathPrefix="
/news/articles/"/>
</intent-filter>
</activity>




  ● http://mysite.com/news/articles가 보이면 저기로 연결.
  ● 웹브라우저 (링크클릭) -> (링크에 대한 인텐트) -> 우리
    앱
  ● 안드로이드 앱은 액티비티로 서로 연결되어 있음.
  ● 전화가 왔을 때 인텐트를 확인하여 스팸이면 끊어버리는
    앱.
Looper & Message Queue

 
Fragment (Android 3.0 Honeycomb)

 
 

 
 




2 Fragments in 1 Activity
 




Action Bar - 현재 상태, 아이콘, 메뉴 
 




System Bar - 뒤로가기, 홈, 창 변환 버튼, 노티파이케이션.
 

 
Hardware Services

● Telephony Service
● Location Service
● Bluetooth Service
● WiFi Service
● USB Service
● Sensor Service
● NFC Service (Android 2.3.3)
Application Framework

● RTFM
  ○ Read the fine manual, please :)
Layer Interaction

There are 3 main flavors of Android layer cake:

 ● App -> Runtime Service -> Lib

 ● App -> Runtime Service -> Native Service -> Lib

 ● App -> Runtime Service -> Native Daemon -> Lib
Layer Interaction

There are 3 main flavors of Android layer cake:

 ● App -> Runtime Service -> Lib

 ● App -> Runtime Service -> Native Service -> Lib

 ● App -> Runtime Service -> Native Daemon -> Lib
Layer Interaction

There are 3 main flavors of Android layer cake:

 ● App -> Runtime Service -> Lib

 ● App -> Runtime Service -> Native Service -> Lib

 ● App -> Runtime Service -> Native Daemon -> Lib
Make world

● Official
    ○ AOSP (Android Open Source Project)
        ■ http://source.android.com/
●  Custom
    ○  CyanogenMod (CM)
        ■ http://www.cyanogenmod.com/
    ○  CodeAuroraForum (CAF)
        ■ https://www.codeaurora.org/
● Groups
    ○  http://groups.google.com/group/android-contrib
    ○  http://groups.google.com/group/android-platform
    ○  http://groups.google.com/group/android-building
Recommend




CyanogenMod - de facto standard custom ROM
Special Thanks to JBQ




             Jean-Baptiste Queru (Google)


Thanks JBQ, who moves truck-loads of source code in and
out of the Googleplex 
Q&A

Mais conteúdo relacionado

Destaque

Destaque (20)

The Git - (#1/2)
The Git - (#1/2)The Git - (#1/2)
The Git - (#1/2)
 
A brief guide to android gradle
A brief guide to android gradleA brief guide to android gradle
A brief guide to android gradle
 
Butter android views
Butter android viewsButter android views
Butter android views
 
Realm Java
Realm JavaRealm Java
Realm Java
 
Tensorflow 101
Tensorflow 101Tensorflow 101
Tensorflow 101
 
Actionbar and fragment
Actionbar and fragmentActionbar and fragment
Actionbar and fragment
 
C++ 미정의 행동(undefined behavior)
C++ 미정의 행동(undefined behavior)C++ 미정의 행동(undefined behavior)
C++ 미정의 행동(undefined behavior)
 
[0602 박민근] Direct2D
[0602 박민근] Direct2D[0602 박민근] Direct2D
[0602 박민근] Direct2D
 
3D Graphics 101
3D Graphics 1013D Graphics 101
3D Graphics 101
 
좋은 뷰, 나쁜 뷰, 이상한 뷰
좋은 뷰, 나쁜 뷰, 이상한 뷰좋은 뷰, 나쁜 뷰, 이상한 뷰
좋은 뷰, 나쁜 뷰, 이상한 뷰
 
C++ stl
C++ stlC++ stl
C++ stl
 
Modern android
Modern androidModern android
Modern android
 
Realm과 RxJava
Realm과 RxJavaRealm과 RxJava
Realm과 RxJava
 
A brief introduction to Realm with Kotlin
A brief introduction to Realm with KotlinA brief introduction to Realm with Kotlin
A brief introduction to Realm with Kotlin
 
EventBus for Android
EventBus for AndroidEventBus for Android
EventBus for Android
 
Guava’s Event Bus
Guava’s Event BusGuava’s Event Bus
Guava’s Event Bus
 
PublishSubject
PublishSubjectPublishSubject
PublishSubject
 
Realm: 초고속 데이터베이스
Realm: 초고속 데이터베이스Realm: 초고속 데이터베이스
Realm: 초고속 데이터베이스
 
오픈 소스로 취업하기: 나는 어떻게 오픈 소스를 하다 렘 개발자가 되었나?
오픈 소스로 취업하기: 나는 어떻게 오픈 소스를 하다 렘 개발자가 되었나?오픈 소스로 취업하기: 나는 어떻게 오픈 소스를 하다 렘 개발자가 되었나?
오픈 소스로 취업하기: 나는 어떻게 오픈 소스를 하다 렘 개발자가 되었나?
 
2016 페차쿠차 "cppcheck, effective c++과 함께하는 bts"
2016 페차쿠차 "cppcheck, effective c++과 함께하는 bts"2016 페차쿠차 "cppcheck, effective c++과 함께하는 bts"
2016 페차쿠차 "cppcheck, effective c++과 함께하는 bts"
 

Semelhante a Anatomy of an android

초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 YoungSu Son
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초Kwangyoun Jung
 
안드로이드 와 디바이스 드라이버 적용 기법
안드로이드 와 디바이스 드라이버 적용 기법안드로이드 와 디바이스 드라이버 적용 기법
안드로이드 와 디바이스 드라이버 적용 기법chon2010
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발Jeongkyu Shin
 
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신WooSangHwang
 
(120128) #fitalk android forensics 101
(120128) #fitalk   android forensics 101(120128) #fitalk   android forensics 101
(120128) #fitalk android forensics 101INSIGHT FORENSIC
 
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기Jaeseung Ha
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기Sumin Byeon
 
Introduction to Golang v2
Introduction to Golang v2Introduction to Golang v2
Introduction to Golang v2Hyejong
 
TestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing toolTestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing toolhyunae lee
 
TestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing toolTestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing toolhyunae lee
 
Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900Samsung Electronics
 
[1D7]안드로이드 L-Preview 보안 아키텍처 및 설비
[1D7]안드로이드 L-Preview 보안 아키텍처 및 설비[1D7]안드로이드 L-Preview 보안 아키텍처 및 설비
[1D7]안드로이드 L-Preview 보안 아키텍처 및 설비NAVER D2
 
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료지원 정
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기Miyu Park
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기YoungSu Son
 
(111217) #fitalk rootkit tools and debugger
(111217) #fitalk   rootkit tools and debugger(111217) #fitalk   rootkit tools and debugger
(111217) #fitalk rootkit tools and debuggerINSIGHT FORENSIC
 
[devil's camp] - Crack me (김민재)
[devil's camp] - Crack me (김민재)[devil's camp] - Crack me (김민재)
[devil's camp] - Crack me (김민재)NAVER D2
 
Configuration management best practices
Configuration management best practicesConfiguration management best practices
Configuration management best practicesHyunil Shin
 
올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발cho hyun jong
 

Semelhante a Anatomy of an android (20)

초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초
 
안드로이드 와 디바이스 드라이버 적용 기법
안드로이드 와 디바이스 드라이버 적용 기법안드로이드 와 디바이스 드라이버 적용 기법
안드로이드 와 디바이스 드라이버 적용 기법
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
 
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
 
(120128) #fitalk android forensics 101
(120128) #fitalk   android forensics 101(120128) #fitalk   android forensics 101
(120128) #fitalk android forensics 101
 
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
 
Introduction to Golang v2
Introduction to Golang v2Introduction to Golang v2
Introduction to Golang v2
 
TestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing toolTestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing tool
 
TestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing toolTestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing tool
 
Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900
 
[1D7]안드로이드 L-Preview 보안 아키텍처 및 설비
[1D7]안드로이드 L-Preview 보안 아키텍처 및 설비[1D7]안드로이드 L-Preview 보안 아키텍처 및 설비
[1D7]안드로이드 L-Preview 보안 아키텍처 및 설비
 
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
 
(111217) #fitalk rootkit tools and debugger
(111217) #fitalk   rootkit tools and debugger(111217) #fitalk   rootkit tools and debugger
(111217) #fitalk rootkit tools and debugger
 
[devil's camp] - Crack me (김민재)
[devil's camp] - Crack me (김민재)[devil's camp] - Crack me (김민재)
[devil's camp] - Crack me (김민재)
 
Configuration management best practices
Configuration management best practicesConfiguration management best practices
Configuration management best practices
 
올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발
 

Mais de Leonardo YongUk Kim

Kotlin 2.0을 통해 알아보는 코틀린의 미래
Kotlin 2.0을 통해 알아보는 코틀린의 미래Kotlin 2.0을 통해 알아보는 코틀린의 미래
Kotlin 2.0을 통해 알아보는 코틀린의 미래Leonardo YongUk Kim
 
안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계Leonardo YongUk Kim
 
Realm은 어떻게 효율적인 데이터베이스를 만들었나?
Realm은 어떻게 효율적인 데이터베이스를 만들었나?Realm은 어떻게 효율적인 데이터베이스를 만들었나?
Realm은 어떻게 효율적인 데이터베이스를 만들었나?Leonardo YongUk Kim
 
MVC부터 MVVM, 단방향 데이터 흐름까지
MVC부터 MVVM, 단방향 데이터 흐름까지MVC부터 MVVM, 단방향 데이터 흐름까지
MVC부터 MVVM, 단방향 데이터 흐름까지Leonardo YongUk Kim
 
Veni, Vide, Built: Android Gradle Plugin
Veni, Vide, Built: Android Gradle PluginVeni, Vide, Built: Android Gradle Plugin
Veni, Vide, Built: Android Gradle PluginLeonardo YongUk Kim
 
GIt 마을로 이주하기 (Git -> Svn, svn-all-fast-export)
GIt 마을로 이주하기 (Git -> Svn, svn-all-fast-export)GIt 마을로 이주하기 (Git -> Svn, svn-all-fast-export)
GIt 마을로 이주하기 (Git -> Svn, svn-all-fast-export)Leonardo YongUk Kim
 

Mais de Leonardo YongUk Kim (13)

Compose Multiplatform 101
Compose Multiplatform 101Compose Multiplatform 101
Compose Multiplatform 101
 
Kotlin 2.0을 통해 알아보는 코틀린의 미래
Kotlin 2.0을 통해 알아보는 코틀린의 미래Kotlin 2.0을 통해 알아보는 코틀린의 미래
Kotlin 2.0을 통해 알아보는 코틀린의 미래
 
안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계
 
Realm은 어떻게 효율적인 데이터베이스를 만들었나?
Realm은 어떻게 효율적인 데이터베이스를 만들었나?Realm은 어떻게 효율적인 데이터베이스를 만들었나?
Realm은 어떻게 효율적인 데이터베이스를 만들었나?
 
MVC부터 MVVM, 단방향 데이터 흐름까지
MVC부터 MVVM, 단방향 데이터 흐름까지MVC부터 MVVM, 단방향 데이터 흐름까지
MVC부터 MVVM, 단방향 데이터 흐름까지
 
Anatomy of Realm
Anatomy of RealmAnatomy of Realm
Anatomy of Realm
 
역시 Redux
역시 Redux역시 Redux
역시 Redux
 
React Everywhere
React EverywhereReact Everywhere
React Everywhere
 
React Redux React Native
React Redux React NativeReact Redux React Native
React Redux React Native
 
Veni, Vide, Built: Android Gradle Plugin
Veni, Vide, Built: Android Gradle PluginVeni, Vide, Built: Android Gradle Plugin
Veni, Vide, Built: Android Gradle Plugin
 
The git
The gitThe git
The git
 
GIt 마을로 이주하기 (Git -> Svn, svn-all-fast-export)
GIt 마을로 이주하기 (Git -> Svn, svn-all-fast-export)GIt 마을로 이주하기 (Git -> Svn, svn-all-fast-export)
GIt 마을로 이주하기 (Git -> Svn, svn-all-fast-export)
 
red black tree
red black treered black tree
red black tree
 

Anatomy of an android

  • 1. Anatomy of an Android 김용욱 (@dalinaum)
  • 2. Android Version ● 1.5 Cupcake ● 1.6 Donut ● 2.0 2.1 Eclair ● 2.2 Froyo (Frozen Yogurt) ● 2.3.x Gingerbread (2.3.7) ● 3.x Honeycomb (3.2) .... ● 4.x Ice Cream Sandwich
  • 3.  
  • 4. 시작점 ● Anatomy & Physiology of an Android (2008 Google IO) ○ Patrick Brady (Google) ● Inside the Android Application Framework (2008 GIO) ○ Dan Morill (Google)
  • 6. 리눅스 커널 ● 리눅스 커널 위에 동작하지만 리눅스는 아니다. ● 리눅스의 표준 유틸리티를 사용하지 않는다. ● 리눅스의 커널 버전은 크게 중요하지 않음.
  • 7. 리눅스 커널 ● 메모리, 프로세스 관리가 뛰어나다. ● 퍼미션 기반의 보안 모델을 가지고 있다. ● 오픈소스
  • 8. 리눅스 커널 ● Timed GPIO (Generic-purpose I/O) ● Power Management ● Ashmem (Anonymous shared memory) ● Binder ● Low Memory Killer ● Kernel Debugger ● Logger ● Alarm
  • 9. Timed GPIO(generic purpose I/O) ● Mike Lockwood (Google) ● 일정 시간동안 사용자영역에서 GPIO에 접근하기 위해 열어 둔 인터페이스 ● 바이브레이터 등에 사용됨. ●  drivers/staging/android/ ○ timed_output.[h|c] ○ timed_gpio.[h|c]
  • 10. Power Management ● 작성자: Google (iSad...) ● Suspend 전에 애플리케이션의 종료 기회 제공. ● kernel/power/ 디렉토리에 위치 ○ suspend.c ○ userwakelock.c ○ earlysuspend.c ○ consoleearlysuspend.c ○ fbearlysuspend.c
  • 11.
  • 12. Ashmem (Anonymous shared memory) ● Robert Love (Google, Ex-Noveller) ○  Linux Kernel Developmen의 저자 ○ Android의 Logger도 작성. ● 여러 프로세스 간의 데이터 공유를 위함. ● pmem과의 차이점은 "익명"이라는 점. ● mm/ashmem.c
  • 13. Binder (Android IPC, like RPC) ● Dianne Hackborn (Google, Ex-BeOSer) ● Binder (BeOS) -> OpenBinder (Palm) -> Binder (Android) ● RPC같은 IPC를 구현 ● driver/staging/android ○ binder.[h|c]
  • 14.
  • 15.
  • 16. Low memory killer ● Arve Hjønnevåg (Google, Ex-BeOSer) ● 리눅스 메모리관리 ○ 사용량이 많은 프로세스 희생. ○ 다수 프로세스를 살리는 데 있음. ● 안드로이드 - 포그라운드 앱 우선 ○ 프로세스마다 현재 상태 기록. ● driver/staging/android ○ lowmemorykiller.c
  • 17. Low memory killer example (init.rc) # Define the oom_adj values for the classes of processes that can be # killed by the kernel.  These are used in ActivityManagerService.    setprop ro.FOREGROUND_APP_ADJ 0    setprop ro.VISIBLE_APP_ADJ 1    setprop ro.SECONDARY_SERVER_ADJ 2    setprop ro.HIDDEN_APP_MIN_ADJ 7    setprop ro.CONTENT_PROVIDER_ADJ 14    setprop ro.EMPTY_APP_ADJ 15 # Define the memory thresholds at which the above process classes will # be killed.  These numbers are in pages (4k).    setprop ro.FOREGROUND_APP_MEM 1536    setprop ro.VISIBLE_APP_MEM 2048    setprop ro.SECONDARY_SERVER_MEM 4096    setprop ro.HIDDEN_APP_MEM 5120    setprop ro.CONTENT_PROVIDER_MEM 5632    setprop ro.EMPTY_APP_MEM 6144
  • 19. HAL (Hardware Abstraction Layer) ● 리눅스 커널 디바이스를 안드로이드로 부터 분리하기 위함 ● 라이선스 문제 ○ 리눅스 커널은 GPL - 공개해야 함. ○ 커널만 공개하고 하드웨어 드라이버 로직을 HAL로 분리 ○ Google과 Apple은 자신들이 원하는 내용만 공개. ● 호환성 문제 ○ 안드로이드는 리눅스 커널 드라이버 구조를 몰라도 됨.
  • 21. Dalvik ● Dan Bornstein (Obvious Corp, Ex-Googler) ● Dalvik - Dan이 살던 지명. ● 레지스터 방식의 Java Virtual Machine. ○ Oracle(Sun) VM은 스택방식 ○ Oracle의 특허 회피 ○ ARM에 최적화. ● DEX 포맷 사용 ○ JAR보다 용량 효율적.
  • 23. Libraries ● Bionic C (Shinichiro Kwasaki-Hitachi) ○ Non-GPL Lib C, Very small ● WebKit (Don Melton-Apple, Martin Jones, Torben Weis) ○ KDE (KHTML) -> Apple (Webkit) ● Media Framework (StageFright) ○ OpenCore (PV)  -> StageFright (Google, 보다 단순함) ● SQLite (D. Richard Hipp-Hipp, Wyrick & Company, Inc.) ○ 경량 DB (앱에 내장 되는 형태) ○ 최근에는 LevelDB로 대체 움직임 ● Native Servers ○ SurfaceFlinger, AudioFlinger
  • 26. Application Framework ● Core Platform Services ● Hardware Services ● Application Framework
  • 27. Core platform Services ● Activity Manager ● Package Manager ● Window Manager ● Resource Manager ● Content Providers ● View System
  • 29.  
  • 31. Intent (URL을 액티비티으로 연결) <activity android:name=".MyActivity"> <intent-filter> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:scheme="http" android:host="mysite.com android:pathPrefix=" /news/articles/"/> </intent-filter> </activity> ● http://mysite.com/news/articles가 보이면 저기로 연결. ● 웹브라우저 (링크클릭) -> (링크에 대한 인텐트) -> 우리 앱 ● 안드로이드 앱은 액티비티로 서로 연결되어 있음. ● 전화가 왔을 때 인텐트를 확인하여 스팸이면 끊어버리는 앱.
  • 32. Looper & Message Queue  
  • 33. Fragment (Android 3.0 Honeycomb)  
  • 34.    
  • 35.   2 Fragments in 1 Activity
  • 36.   Action Bar - 현재 상태, 아이콘, 메뉴 
  • 37.   System Bar - 뒤로가기, 홈, 창 변환 버튼, 노티파이케이션.
  • 38.    
  • 39. Hardware Services ● Telephony Service ● Location Service ● Bluetooth Service ● WiFi Service ● USB Service ● Sensor Service ● NFC Service (Android 2.3.3)
  • 40. Application Framework ● RTFM ○ Read the fine manual, please :)
  • 41. Layer Interaction There are 3 main flavors of Android layer cake: ● App -> Runtime Service -> Lib ● App -> Runtime Service -> Native Service -> Lib ● App -> Runtime Service -> Native Daemon -> Lib
  • 42.
  • 43.
  • 44. Layer Interaction There are 3 main flavors of Android layer cake: ● App -> Runtime Service -> Lib ● App -> Runtime Service -> Native Service -> Lib ● App -> Runtime Service -> Native Daemon -> Lib
  • 45.
  • 46.
  • 47. Layer Interaction There are 3 main flavors of Android layer cake: ● App -> Runtime Service -> Lib ● App -> Runtime Service -> Native Service -> Lib ● App -> Runtime Service -> Native Daemon -> Lib
  • 48.
  • 49.
  • 50. Make world ● Official ○ AOSP (Android Open Source Project) ■ http://source.android.com/ ●  Custom ○  CyanogenMod (CM) ■ http://www.cyanogenmod.com/ ○  CodeAuroraForum (CAF) ■ https://www.codeaurora.org/ ● Groups ○  http://groups.google.com/group/android-contrib ○  http://groups.google.com/group/android-platform ○  http://groups.google.com/group/android-building
  • 51. Recommend CyanogenMod - de facto standard custom ROM
  • 52. Special Thanks to JBQ Jean-Baptiste Queru (Google) Thanks JBQ, who moves truck-loads of source code in and out of the Googleplex 
  • 53. Q&A