본문 바로가기

Android44

인사이드 안드로이드 08 안드로이드 서비스 프레임워크 (2) 8.3 동작 메커니즘 내장도니 시스템 서비스 수준으로 개발하려면 서비스 프레임워크를 구성하는 클래스에 관해 잘 이해하고 있어야 함. IAudioFlinger 서비스 인터페이스를 기준으로 왼쪽은 서비스를 구현하는 데 필요한 구성요소가 배치돼 있고, 오른쪽에는 서비스 프록시를 구현하는 데 필요한 구성요소가 배치돼 있음. 서비스 인터페이스에는 서비스와 서비스 프록시에서 동일하게 사용하는 서비스 함수가 선언돼 있음. BnAudioFlinger의 부모 클래인 BnInterface 클래스는 클래스 템플릿으로 선언돼 있으며 인자로 받은 IAudioFlinger를 상속할뿐만 아니라 BBinder 클래스도 상속받음. 시스템 서비스는 서비스 사용자가 이용할 수 있게 안드로이드 플랫폼에 자신을 등록해야 함. 서비스 매니저를.. 2021. 5. 18.
인사이드 안드로이드 08 안드로이드 서비스 프레임워크 (1) 08 서비스 프레임워크 서비스는 시스템 서비스를 의미함. 앱 서비스는 앱 서비스로 기술함. 8.1 서비스 프레임워크 안드로이드 플랫폼에서 동작하는 서비스를 개발하기 위한 클래스의 집합. 서비스 프레임워크는 설계와 구현을 재사용 가능한 형태로 제공하고 있음. 다양한 클래스와 인터페이스를 확장해 서비스를 개발할 수 있음. 서비스를 등록하고 사용하는 방법이나 서비스의 바인더 아피씨를 지원하는 등의 기능은 시스템에서 제공함. 개발자는 서비스 프레임워크를 이용하기만 하면 됨. C++로 작성된 네이티브 시스템 서비스와 자바로 작성된 코어 플랫폼 서비스 및 하드웨어 서비스가 서비스 프레임워크를 이용해 구현되어 있음. 프레임 워크의 대표적인 특징 두 가지는 프레임워크를 수정하는 것이 아니라 확장을 통해 새로운 기능을 .. 2021. 5. 18.
인사이드 안드로이드 07 바인더 IPC (3) 7.4 컨텍스트 매니저 컨텍스트 매니저는 서비스 서버가 서비스를 등록할 때마다 자신의 서비스 목록에 서비스의 이름과 바인더 노드 번호를 등록해 둠. 7.4.1 컨텍스트 매니저의 동작 바인더 드라이버를 열고 IPC 데이터 수신 버퍼를 확보하는 함수, 특수 노드가 되기 위한 함수, 지속적으로 IPC데이터를 수신하는 함수로 구성됨. 시스템 콜 호출과 시스템 콜을 통한 IPC 데이터 수신 버포를 확보하는 동작을 함. 바인더 드라이버 함수 분석에서 살펴본 binder_write_read 구조체의 사용자 공간 버퍼를 등록함. ioctl() 시스템 콜을 통해 IPC 데이터를 수신 대기 상태로 들어감. 2021. 5. 18.
인사이드 안드로이드 07 바인더 IPC (2) 7.3 안드로이드 바인더 드라이버 분석 바인더 드라이버를 통한 RPC 과정보다는 바인더 드라이버의 실제 역할인 IPC 과정에 초점. 서비스 클라이언트가 서비스 서버의 서비스를 사용하기까지의 IPC과정을 각각 '서비스 등록', '서비스 검색', '서비스 사용' 3단계로 나누고,이를 서비스 사용 과정이라고 하겠음 7.3.1 프로세스 관점에서의 서비스 사용 1. 서비스 등록(서비스 서버와 컨텍스트 매니저 사이의 아피씨) 2. 서비스 검색(서비스 클라이언트와 컨테스트 매니저 사이의 아피씨) 3. 서비스 사용(서비스 클라이언트와 서비스 서버 사이의 아피씨) 1. 바인더 드라이버 열기 2. IPC 데이터 수신 퍼버 3. 아피씨 데이터 수신을 위한 대기 상태 진입 4. 바인더 드라이버 열기 5. 아피씨 응답 데이터 .. 2021. 5. 17.
인사이드 안드로이드 07 바인더 IPC (1) 안드로이드 바인더 IPC 구글로 옮겨간 핵복은 안드로이드의 프로세스를 관리하기 위해 오픈 바인더를 수정한 안드로이드 바인더(이하 바인더)를 개발함. 바인더는 원래 IPC 도구이지만 안드로이드에서는 다른 프로세스에 있는 함수를 마치 현재 프로세스에 존재하는 함수처럼 사용할 수 있게 해주는 RPC를 지원하는 데 주로 이용됨. 7.1 리눅스 메모리 공간과 바인더 드라이버 프로세스만의 고유한 가상 주소 공간에서 실행됨. 총 4GB에 달하는 가상 주소 공간은 3GB의 사용자 공간과 1GB의 커널 공간으로 나뉨. (커널 설정으로 변경 가능함). 사용자 코드와 관련 라이브러리는 사용자 공간의 코드 영역, 데이터 영역, 스택 영역에서 동작하고, 커널 공간에서 동작해야 할 코드는 커널 공간의 각 영역에서 동작함. 프로세.. 2021. 5. 17.
인사이드 안드로이드 06 서비스 개요 안드로이드 서비스 개요 서비스는 UI 없이 주기적으로 특정한 일을 수행하는 백그라운드 프로세스를 가리킴 사용자와 상호작용 없이 다양한 데이터를 백그라운드에서 처리하는 앱을 작성할 때 이러한 안드로이드 앱 서비스가 활용됨 6.1 안드로이드 서비스 동작 이해 API Demos의 AlarmService라는 샘플 예제를 통해 앱이 시스템 서비스와 앱 서비스가 어떻게 활용되는지 알아봄 6.3 안드로이드 앱 서비스 안드로이드 SDK의 Service 클래스를 확장한 클래스의 인스턴스로 UI없이 주기적으로 특정한 일을 수행하는 백그라운드 프로세스를 가리킴. 이러한 서비스는 액티비티나 브로드캐스트 리시버처럼 안드로이드 앱 컴포넌트의 일종임. 미디어 플레이어에서 음악을 실행하면 백그라운드로 음악 서비스를 시작시켜 음악을 .. 2021. 5. 15.
인사이드 안드로이드 04 JNI와 NKD 4.1 안드로이드와 JNI location manger가 제공하는 자바 API를 호출함. 이 호출은 프레임워크 내부의 GPS 라이브러리를 통해 GPS 디바이스 드라이버에 연결되어 앱에서 현재 위치 정보 값을 전달해주는 구조로 동작함 - 빠른 처리 속도를 요구하는 루틴 작성 - 하드웨어 제어 - 기존 C/C++ 프로그램의 재사용 플랫폼별로 로딩되는 C라이브러리가 있음 윈도우에서는 .dll 리눅스는 .so UnsatisfiedLinkError 오류가 발생하는 이유는 자바 가상 머신이 네이티브 메서드와 링크될 코드에서 작성한 hellojni.dll 라이브러리에서 찾지 못했기 떄문이다. 자바 가상 머신 : 함수 매핑 테이블 이런 형태로 C함수 원형을 만들어야 자바 가상 머신이 이 함수와 자바 네이티브 메서드를 .. 2021. 5. 15.
인사이드 안드로이드 03 init 프로세스 init 프로세스 3.1 init 프로세스의 실행 과정 init 프로세스는 자식 프로세스의 종료 처리뿐만 아니라 앱이 디바이스 드라이버에 접근할 떄 사용하기 위한 디바이스 노드 파일을 생성하며, 시스템 동작에 필요한 환경 변수를 저장하는 프로퍼티 서비스를 제공함. 리눅스의 프로세스들은 서로 정보를 교환하기 위해 메시지를 주고 받는데, 이러한 메시지를 시그널이라고 함. 그리고 각 프로세스는 다른 프로세스에서 발생하는 시그널을 처리하기 위한 루틴을 등록하는데 이를 시그널 핸들러라고 함. 발생한 시그널에 대한 실제 처리는 init 프로세스 동작 과정의 마지막 단계인 이벤트 처리 루프에서 이뤄짐. 모든 프로세스에서 시스템의 설정 값을 공유하기 위해 프로퍼티라는 이름의 저장소를 제공함. 공유 메모리 영역에서 생성.. 2021. 5. 15.
인사이드 안드로이드 01 안드로이드 프레임 워크 개요 저자 서문 "안드로이드 플랫폼의 필수 요소인 init 프로세스, 바인더, JNI, Zygote, 서비스 프레임워크, 핵심적인 시스템 서비스 등의 의 동작원리에 고나해 설명하고 있습니다." "에상대로 개방성을 무기로 하는 안드로이드 플랫폼은 시장의 많은 제조사들을 끌어 들였고, 점차 시장의 큰 부분을 차지해 가고 있습니다." 01 안드로이드 프레임 워크 개요 즉, 안드로이드는 모바일 디바이스용 애플리케이션을 쉽게 제작하기 위한 소프트웨어 프레임워크를 제공해 준다. hardware:안드로이드 HAL(Hardware Abstraction Layer) 소스 package:안드로이드 기본 애플리케이션, 컨텐트 프로바이더 system:안드로이드 init 프로세스, 블루투스 도구 모음 1.2 부팅 프로세스로 알아보는.. 2021. 5. 15.