• 안드로이드 커널(참고 http://elinux.org/Android_Kernel_Features#Resources,수원 멤버십 자료)
    - Linux kernel 2.6 기반, but not Linux
       : 표준 리눅스 유틸리티를 전부 포함(x) -> busybox
       : glibc 지원 (x) -> bionic lib
       : Native Windowing System (X-Window) (x)
       : EABI 사용 -> 컴파일 시 EABI를 지원하는 컴파일러 사용
       : OpenBinder -> No SysV IPC

    - ashmem(Android(Anonymous) shared memory)/pmem(Process memory allocator) - 프로세스간 메모리 공유
     : ashmem은 가상 메모리 사용, pmem은 인접한 물리 메모리 사용
     : ashmem은 두 개의 프로세스가 메모리를 참조하다가 사용이 끝나면 그 메모리를 참조하던 모든 fd들은 close하게 됨, pmem은 직접 메모리를 해제해 주어야 함
     : 에뮬레이터에서는 ashmem을 사용해야 함, pmem은 드라이버 지원 x

    - Binder - RPC(an Android-specific interprocess communication mechanism, and remote procedure call system similar to DBus)
    - Power Managerment
    - Low Memory Killer
    - Logger(system logging facility)

     

  • 안드로이드 플랫폼 소스 구조

    Figure 1. Android stack


    bionic: 안드로이드 표준 라이브러리

    bootloader: 참고용 안드로이드 부트 로더
    build: 안드로이드 빌드 시스템
    cts: 안드로이드 호환성 테스트 프로그램
    dalvik: 달빅 가상 머신
    development: 개발 관련 지원 소스
    external: 공개용 라이브러리
    frameworks: 안드로이드 프레임워크
    hardware: 안드로이드 HAL(Hardware Abstraction Layer) 소스
    out: 빌드 후 모음
    packages: 안드로이드 기본 애플리케이션
    prebuilt: 컴파일러
    system: 안드로이드 코어 프로그램, init 프로세스


  • 안드로이드 부팅 과정 (출처 - 인사이드 안드로이드)


    - 부팅 순서 참고: http://blog.secmem.org/88

    (1) 리눅스 커널
    안드로이드는 리눅스 기반의 플랫폼. 부팅 시 부트로더를 통해 리눅스 커널이 먼저 시작, 리눅스가 부팅되면 일반적인 리눅스 부팅과정 처럼 커널 초기화를 수행한 후 마지막 과정에서 init 프로세스를 호출한다.

    (2) init
    안드로이드 init 프로세스는 각종 디바이스를 초기화하는 작업을 비롯해서 안드로이드 프레임워크 동작에 필요한 각종 데몬, 컨텍스트 매니저 (Context Manager), 미디어 서버(Meia Server), Zygote등을 실행하는 역할을 한다.
     다음은 init 프로세스가 실행하는 데몬 프로세스다.
     - USB 데몬(usbd): USB 연결 관리
     - 안드로이드 디버그 브리지 데몬(adbd): 안드로이드 디버그 브리지(ADB) 연결 관리
     - 디버거 데몬(debuggerd): 디버그 시스템 시작
     - 무선 인터페이스 레이어 데몬(rild): 무선 통신 연결 관리


    (3) 컨텍스트 매니저
    컨텍스트 매니저(Context Manager)는 안드로이드의 시스템 서비스를 관리하는 중요한 프로세스다. 시스템 서비스는 안드로이드 프레임워크를 구성하는 중요한 컴포넌트로서 카메라, 오디오, 비디오 처리에서부터 각종 애플리케이션 제작에 필요한 중요 API를 제공하는 등의 역할을 수행한다.

     안드로이드 내에서 동작하는 각종 시스템 서비스에 대한 정보는 컨텍스트 매니저에게서 얻을 수 있다. 따라서 시스템 서비스를 이용하고자 하는 애플리케이션이나 프레임워크의 내부 모듈은 이를 서비스 매니저에게 요청해야 한다. 요청 후에는 바인더(Binder)라는 안드로이드의 자체적인 IPC(Inter-process communication) 메커니즘을 통해 시스템 서비스를 이용할 수 있다.

    이를 위해서는 안드로이드의 모든 시스템 서비스는 부팅시 자신의 핸들 정보를 컨텍스트 매니저에 등록해야 하며, 이러한 서비스 등록 과정에서도 프로세스 간 통신을 수행하기 위해 바인더 IPC가 이용된다.

    (4) 미디어 서버
    미디어 서버(Media Server) 프로세스는 안드로이드에서 Audio Flinger(오디오 출력을 담당)나 Camera 서비스와 같이 C/C++ 기반으로 작성돼 있는 네이티브 시스템 서비스를 실행하는 역할을 한다.

    (5) Zygote
    Zygote는 안드로이드 애플리케이션의 로딩 시간을 단축하기 위한 프로세스로서 모든 자바 기반 안드로이드 애플리케이션은 Zygote를 통해 포크(fork)된 프로세스 상에서 동작한다.

    (6) 시스템 서버
    시스템 서버(System Server)는 Zygote에서 최초로 포크되어 실행되는 안드로이드 애플리케이션 프로세스다. 시스템 서버는 애플리케이션 생명 주기를 제어하는 액티비티 매지저 서비스(Activity Manager Service)나 단말기의 위치 정보를 제공하는 로케이션 매니저 서비스(Location Manager Service)와 같은 자바 시스템 서비스를 실행하는 역할을 한다.

     이처럼 시스템 서버에서 실행하는 자바 시스템 서비스도 안드로이드 애플리케이션이나 프레임워크 내부 모듈에서 이용할 수 있게 하기 위해서는 컨택스트 매니저에 등록돼 있어야 한다.

     그런데 바인더 IPC를 통해 자바 시스템 서비스를 C언어 기반의 서비스 매니저에 등록하려면 자바와 C언어 간의 인터페이스 역할을 하는 JNI(Java Native Interface)를 추가로 이용해야 한다.

  • Runtime Walkthrough





'Programing > Android' 카테고리의 다른 글

안드로이드 - JNI  (0) 2015.12.23
안드로이드 - Init 프로세스  (0) 2015.12.21
안드로이드 - 뷰  (0) 2015.12.21
안드로이드 - 4대 컴포넌트  (0) 2015.12.21
안드로이드 - 구성 및 특징  (0) 2015.12.21

1. Widget: 직접적으로 보이며 사용자 인터페이스를 구성한다. 버튼, 텍스트 뷰, 에디트, 라이오 버튼 등이 위젯이며 흔히 컨트롤이라고 부른다.


View도 자바 클래스의 일종이므로 당연히 최상위 Object로 부터 파생된다. 
이들은 스스로 그릴 수 있는 능력을 가지고 있고, 굵은 상자의 것들이 빈번히 사용되어 지는 것들이다.

2. ViewGroup : 직접적으로 보이지는 않으며 다른 뷰를 담는 컨테이너 역할을 한다. 이름 그대로 여러 개의 뷰를 유기적으로 모아놓은 것이다. 이 부류의 클래스들을 레이아웃이라고 한다.



"안드로이드 화면은 오직 뷰만으로 구성되어 있다."

출처 - http://www.soen.kr/book/android/book/book2/3-1-1.htm, 이것이 안드로이드다



'Programing > Android' 카테고리의 다른 글

안드로이드 - JNI  (0) 2015.12.23
안드로이드 - Init 프로세스  (0) 2015.12.21
안드로이드 - 커널  (0) 2015.12.21
안드로이드 - 4대 컴포넌트  (0) 2015.12.21
안드로이드 - 구성 및 특징  (0) 2015.12.21

안드로이드 4대 컴포넌트(component) (출처 -http://ggodol.tistory.com/52)




안드로이드 애플리케이션은 컴포넌트(component)로 구성되어있다. 안드로이드의 4대 컴포넌트는 액티비티(activity)서비스(service)방송수신자(broadcast receiver)콘텐트 제공자(content provider)이다. 각 컴포넌트들은 하나의 독립된 형태로 존재하며, 정해진 역할을 수행한다. 이때, 인텐트를 통하여 다른 애플리케이션의 컴포넌트를 활성화시킬 수 있다.
AndroidManifest.xml의 application 요소 내에 여러개를 등록할 수 있다.


1. 액티비티(activity)


액티비티(activity)는 사용자 인터페이스 화면을 가지며 특정한 작업을 담당하는 컴포넌트이다.

  • 일반적으로 UI를 갖는 하나의 스크린을 나타낸다
  • 안드로이드 애플리케이션은 반드시 하나의 activity를 가지고 있어야한다
  • 각 액티비티는 매니페스트 파일에 등록되어 있어야 한다
  • 하나 이상의 View를 가질 수 있다

2. 서비스(service)


서비스(service)는 백그라운드에서 실행되는 컴포넌트로 오랫동안 실행되는 작업이나 원격 프로세스를 위한 작업을 할 때 사용된다.

  • UI가 없다
  • 한번 시작된 Service는 애플리케이션이 종료되고 다른 애플리케이션으로 이동해도 계속 백그라운드에서 실행된다
  • 모든 서비스는 Service 클래스를 상속받아서 작성된다
  • 네트워크를 통하여 데이터를 꺼내올 수도 있다

3. 방송수신자(broadcast receiver)


방송수신자(broadcast receiver)는 안드로이드 단말기에서 발생하는 다양한 이벤트/정보를 받고 반응하는 컴포넌트이다. 예를들면 시스템부팅, 배터리 부족, 전화/문자 수신, 네트워크 끊김을 알려주는 것이 방송이다.

  • 단말기에서 발생하는 일 중에서 어플리케이션이 알아야 하는 상황이 발생하면 방송을 해준다
  • 수신기(BroadcastReceiver)를 통해 상황을 감지하고 적절한 작업을 수행한다
  • 일반적으로 UI가 없다

4. 콘텐트 제공자(content provider)


콘텐트 제공자(content provider)는 데이터를 관리하고 다른 애플리케이션 데이터를 제공하는 컴포넌트이다.

  • 데이터는 파일 시스템이나 SQLite 데이터베이스, 웹상에 저장될 수 있다
  • 콘텐트 제공자를 통해서 다른 애플리케이션의 데이터를 쿼리하거나 변경 가능하다

5. 인텐트(intent)


인텐트는 서로 독립적으로 동작하는 4가지 컴포넌트들 간의 상호 통신을 위한 장치이다. 간단하게 말하면, 컴포넌트 간의 통신수단이다. 인텐트를 통하여 다른 애플리케이션의 컴포넌트를 활성화시킬 수 있다.



참고

  • 그림으로 쉽게 설명하는 안드로이드 프로그래밍(생능출판, 천인국 지음)


'Programing > Android' 카테고리의 다른 글

안드로이드 - JNI  (0) 2015.12.23
안드로이드 - Init 프로세스  (0) 2015.12.21
안드로이드 - 커널  (0) 2015.12.21
안드로이드 - 뷰  (0) 2015.12.21
안드로이드 - 구성 및 특징  (0) 2015.12.21

구성 및 특징 - 출처: https://ko.wikipedia.org/wiki/안드로이드_(운영_체제)

구성 및 특징내용
핸드셋 레이아웃플랫폼은 VGA2D 그래픽스 라이브러리, OpenGL ES 1.0에 기반을 둔 3D 그래픽스 라이브러리를 확장하기에 적응적이다.
저장소데이터 저장 목적의 SQLite 데이터베이스 소프트웨어가 사용됨.
통신안드로이드는 GSM/EDGECDMAEV-DOUMTS블루투스와이파이를 포함하는 커넥션 기술을 지원한다.
메시징SMS와 MMS가 가능.
웹 브라우저오픈 소스인 웹키트 응용 프로그램 프레임워크 기반의 브라우저 지원.
자바 지원자바로 작성된 소프트웨어는 달빅 가상 머신에서 실행 가능한 코드로 컴파일된다. 달빅 가상 머신은 표준 자바 가상 머신은 아니지만 모바일 기기를 위해 설계된 레지스터 기반의 가상 머신이다.안드로이드 4.4 킷캣 부터는 달빅 가상 머신외의 개발자 옵션에서 ART런타임을 선택할 수 있게되었고, 안드로이드 5.0 롤리팝부터는 달빅 가상머신이 ART런타임으로 완전히 교체되었다.
미디어 지원안드로이드는 다음의 오디오/비디오/이미지 포맷을 지원한다: H.263H.264 (3GP 또는 MP4 컨테이너), MPEG-4 SPAMRAMR-WB (3GP 컨테이너), AACHE-AAC (MP4 또는 3GP 컨테이너), MP3미디OGG VorbisWAV,JPEGPNGGIFBMP.
추가 하드웨어 지원안드로이드는 카메라, 터치스크린GPS가속도계자력계트랙볼 2D 그래픽 가속, 3D 그래픽 가속을 활용할 수 있다.
개발 환경기기 에뮬레이터, 디버깅 도구, 메모리와 성능 프로파일링을 포함하는 이클립스 IDE 플러그인인 ADT, 플랫폼 개발 키트인 PDK
마켓

iOS의 앱 스토어와 유사한 구글 플레이는 PC 사용 없이 무선으로 대상 하드웨어로 다운로드와 설치가 가능한 응용 프로그램 목록을 제공. 2011년 2월 허니컴 발표와 함께 웹을 통한 마켓 이용이 가능해졌다. 웹마켓에서는 여러대의 안드로이드 기기를 등록하여 사용할 수 있도록 확장되어 있다.

원래 프리웨어만 지원 되었으나 2009년 2월 19일 부터 유료 애플리케이션도 제공되었다. 별도의 라이선싱, 애플리케이션 안에서 유료 구매를 위한 SDK가 함께 발표되었다.

멀티 터치

안드로이드는 멀티 터치를 기본으로 지원한다. 한때 미국에서 출시되는 모델에 한해서, 애플의 터치스크린 기술 특허 침해를 피하기 위해, 멀티터치 기능이 커널 수준에서 비활성화되었다. 이후에 구글은 넥서스 원드로이드를 위해 멀티터치를 네이티브에서 지원하는 업데이트를 발표하였다.

블루투스핸즈프리 통화(HFP), 음악 재생(A2DP,AVRCP) 기능이 있으며 블루투스를 통한 파일 전송이 버전 2.0에 추가되었다. 이외 ICS 이후로 Bluetooth 4.0 기술인 BluetoothHealth 기능도 추가되었다.

- ADB (Android Debug Bridge)
 : Android SDK로서 Android 장치를 제어하거나 인터페이스할 수 있도록 해주는 툴
 : ADB는 SDK에 포함


구조



안드로이드의 구조는 왼쪽 그림과 같은 구성 요소로 구성되며 이 구성 요소에는 응용 프로그램, 응용 프로그램 프레임워크

이브러리, 안드로이드 런타임리눅스 커널의 총 5개의 계층으로 분류되어 있다.

① Applications: 안드로이드 앱
② Applications Framewrok: 안드로이드 앱이 구동되기 위해 필요한 환경 및 기능을 제공.
③ Libraries: C/C++로 구성된 계층으로 하드웨어를 제공하는 기능 제공
④ Android Runtime: 자바 앱을 동작시키기 위한 런타임 달빅 머신.
⑤ 
리눅스 커널: 프로세스 관리, 메모리 관리, 파일시스템 관리, 디바이스 제어, 네트워크 관리 기능 제공.

안드로이드 앱의 컴파일 과정 - 출처: 이것이 안드로이드다



- java virtual machine 과 dlavik virtual machine 의 차이점(출처: http://i5on9i.blogspot.kr/2013/01/jvm-dvm.html)


JVM
DVM
stack/register
stack basedregister-based
.jar/.dex
jar(.class file 의 묶음)DEX(다른 구조와 opcode 를 가졌다.)
instruction 의 양
stack-based 는 data를 stack에 load 하고 그 data 를 사용할 때 register-based 보다 더 많은 instructions 를 사용해야만 한다.register-based 에서는 instruction 에서 source 와 destination register 만 지정해 주면 된다. 그래서 소스가 더욱 작아질 수 있다.
최종파일
java -> .classjava -> .class -> .dex
.class/.dex
java byte code로 된 .class 파일 실행시켜준다.own byte code로 된 .dex file 을 실행시켜준다.
DVM 은 device 가 여러개의 VM instances 를 효과적으로 실행할 수 있도록 디자인되었다.
low memory에서 동작하도록 디자인

안드로이드 버전



VersionCodenameAPI
2.2Froyo8
2.3.3 -
2.3.7
Gingerbread10
4.0.3 -
4.0.4
Ice Cream Sandwich15
4.1.xJelly Bean16
4.2.x17
4.318
4.4KitKat19
5.0Lollipop21
5.122
6.0Marshmallow

23

리소스 ID

genc 폴더에 R.java는 리소스 객체의 포인터가 아니다. 리소스를 참조할 수 있도록 메모리 주소 대용으로 사용하는 ID

'Programing > Android' 카테고리의 다른 글

안드로이드 - JNI  (0) 2015.12.23
안드로이드 - Init 프로세스  (0) 2015.12.21
안드로이드 - 커널  (0) 2015.12.21
안드로이드 - 뷰  (0) 2015.12.21
안드로이드 - 4대 컴포넌트  (0) 2015.12.21

+ Recent posts