본문 바로가기

Android44

안드로이드 하드웨어 서비스 02 RIL (1) RIL은 크게 릴 데몬과 벤더 릴 라이브러리로 구성되어 있음. 릴 데몬은 벤더 릴을 동적으로 로딩하여 모뎀을 제어하고 모뎀으로부터 응답을 수신함. 안드로이드 릴 구조, 릴 데몬의 초기화, 릴 이벤트 스케줄러의 릴 이벤트 처리 메커니즘에 대해서 소개함. 안드로이드 RIL은 텔레포니 프레임워크와 모뎀 간의 HAL을 제공함. 모뎀의 프로토콜 스택 관련 구현 사항은 모뎀 벤더에 따라 다르며 모뎀 벤더의 고유 자산이므로 공개되지 않는다. 2.1.3 AP와 모뎀 간의 통신 : RIL 명령 RIL은 AP가 모뎀을 제어하기 위해 RIL 명령을 제공함. 초장기 버전인 컵케익의 경우 Solicited RIL 명령은 103개, Unsolicited RIL 명령은 29개임. 텔레포니 프레임워크는 모뎀에 서비스를 요청할 때 위.. 2021. 5. 19.
안드로이드 하드웨어 서비스 01 안드로이드 하드웨어 서비스 (3) 1.4 ITC(Inter Thread Communication) 쓰레드의 공유 객체를 이용하는 방법. UI 작업은 main 쓰레드에서 그 이외의 시간이 오래 걸리는 작업은 worker 쓰레드에서 처리하여 main 쓰레드가 블록 상태에 빠져 ANR이 발생하는 것을 방지함. 쓰레드는 프로세스의 자원을 공유하지만, 독립적으로 실행되므로 여러 가지 작업이 동시에 실행되어야 하는 경우 각 작업을 쓰레드에 분담시켜 동시에 처리할 수 있음. 안드로이드의 자바 앱은 멀티 쓰레드를 지원함. 멀티 쓰레드 간 통신을 위해 핸들러와 루퍼를 제공함. 루퍼 기반의 핸들러를 이용하여 통신할 수 있음. 하나의 핸들러는 하나의 루퍼에 연결될 수 있음. 루퍼는 여러 개의 핸들러를 가질 수 있으며 메시지를 정확하게 목적지 핸들러에 전달할.. 2021. 5. 19.
안드로이드 하드웨어 서비스 01 안드로이드 하드웨어 서비스 (2) 1.2 IPC(Inter Process Communication) 프로세스는 독립된 실행 객체로 서로 다른 프로세스는 서로 다른 주소 공간에서 실행됨. 프로세스 간에 영향을 받지 않는 장점이 있지만 주소 공간이 독립되어 있는 만큼 별도의 프로그래밍 장치가 없이 서로 간의 통신이 어려움. 안드로이드 네이티브 데몬 서비스에서 주로 사용하는 리눅스 커널 IPC인 파이프와 유닉스 도메인 소켓을 소개하고. ppid가 1인 프로세스는 init 프로세스에 의해 생성된 데몬 프로세스임. 데몬 프로세스는 init 프로세스가 fork(), exec() 호출하여 새로운 데몬 프로세스를 만들음. Zygote 프로세스는 시스템 서버를 생성하고 각종 자바 앱을 생성함. 유닉스와 리눅스에서 새로운 프로세스를 만드는 함수는 fork.. 2021. 5. 19.
안드로이드 하드웨어 서비스 01 안드로이드 하드웨어 서비스 (1) 저자 서문 기본 지식을 잘 이해하는 사림이 더 좋은 성적을 얻을 수 있음. 안드로이드의 깊은 이해를 가진 엔지니어가 실제로 엔지니어 10명 이상의 몫을 한다고 믿음. 01 안드로이드 하드웨어 서비스 모바일 디바이스용 소프트웨어 플랫폼으로 다양한 하드웨어를 지원하며 하드웨어 제어를 위한 상위 수준의 API를 지원함. 안드로이드의 데몬 프로세스는 IPC를 위해 .. 자바프로세스는 ITC를 위해 구현된 메시지 통신 방법을 사용함. 자바를 앱 작성 언어로 채택하면 특정 아키텍처용 앱을 만들 필요없이 하나의 앱으로 멀티 플랫폼에서 실행시킬 수 있는 이점이 있음. 컴파일된 자바바이트코드는 자바 VM이 아닌 구글에서 자체 개발한 Dalvik VM에 의해 실행됨. 1.1 안드로이드 하드웨어 서비스의 소개 아파치 v2라.. 2021. 5. 19.
인사이드 안드로이드 11 자바 시스템 서비스 동작 분석 (1) 액티비티 매니저 서비스르 통해 자바 시스템 서비스가 안드로이드 프레임워크 내에서 어떻게 동작하는지 확인 11.1 액티비티 매니저 서비스 자바 시스템 서비스의 일종인 코어 플랫폼 서비스로서 안드로이드 앱 컴포넌트인 액티비티, 서비스, 브로드캐스트 리시버 등을 생성하고, 이들의 생명주기를 관리하는 역할을 함. 액티비티 매니저 서비스는 어떻게 RemoteService를 실행할까. 안드로이드의 모든 자바 기반 프로세스는 Zygote에 의해 생성됨. 액티비티 매니저 서비스는 Zygote를 이용해 서비스를 실행할 프로세스를 생성함. 그런 다음 새로 생성된 프로세스 상에서 앱이 요청한 RemoteService를 실행함. 안드로이드 앱은 startService()나 bindService() API를 통해 앱 서비스를 .. 2021. 5. 19.
인사이드 안드로이드 10 자바 서비스 프레임워크 (2) 10.5 AIDL을 이용한 서비스 프록시와 스텁의 구현 안드로이드 자바 서비스 프레임워크에서 제공하는 자바 시스템 서비스는 대부분 AIDL을 이용해 서비스를 생성함. 서비스 인터페이스는 서비스 포록시와 서비스가 서로 동일한 인터페이스를 공유하기 위한 함수를 정의하고, 서비스 인터페이스와 IBinder 사이에 형 변환 기능을 구현해야 함. 또한 서비스 프록시는 바인더 RPC를 위한 바인더 RPC 코드와 데이터를 생성해야 함. 서로 다른 프로세스에서 동작하는 서비스를 구현한 경우 전달할 데이터를 마샬링 하는 과정은 자주 반복되는 코드를 만들어 냄. 이러한 경우에 AIDL 언어를 이용해 서비스의 인터페이스를 기술하면 서비스 인터페이스, 서비스 프록시, 서비스 스텁 클래스의 자바 코드를 자동으로 생성할 수 있음.. 2021. 5. 19.
인사이드 안드로이드 10 자바 서비스 프레임워크 (1) 시스템 내부에서 서비스가 동작하는 메커니즘과 서비스 작성 방법에 있어 차이점 있음 10.1 자버 서비스 프레임워크 자바 시스템 서비스는 컨텍스트 매니저에 서비스를 등록한 후 서비스 매니저를 통해 서비스를 사용할 수 있음. 자바 앱 서비스는 컨텍스트 매니저가 아닌 액티비티 매니저 서비스에서 관리함 10.1.1 자바 서비스 프레임워크의 계층별 요소 앱 개발자들이 사용할 수 있게끔 시스템 서비스 개발자는 FooManager 래퍼 클래스를 만들고, ServiceManager를 사용해 FooService를 획득하여 반환하는 기능을 추가하여 SDK에 포함하면 됨. 자바 서비스 프레임워크를 이용해 개발한 서비스와 서비스 프록시가 상호작용 할 때도 바인더 IPC를 이용함. 바인더 IPC를 위해 네이티브 서비스 프레임워.. 2021. 5. 18.
인사이드 안드로이드 09 네이티브 시스템 서비스 분석 안드로이드에서는 디바이스 노드의 접근 권한을 리눅스 유저나 그룹으로 설정하는 것 외에 앱에서 디바이스를 사용하려면 그에 해당하는 권한을 명시적으로 부여하도록 하고 있음. callback을 상속받아 인터페이스를 구현하는 이유는 앱에서는 서페이스에 직접 접근할 수 없고 서페이스홀더를 통해 서페이스에 대한 처리를 하기 때문임. 서페이스가 생성되거나 소멸, 또는 속성이 변경되면 surfaceholder.callback 인터페이스의 메서드가 호출되고, 이를 구현한 Preview의 메서드가 호출됨. 카메라 인스턴스를 얻는다. 9.3 카메라 서비스 프레임워크 9.5 정리 1. 서페이스를 생성할 때 카메라 서비스와 연결함 2. 서페이스의 속성이 변경되면 카메라 디바이스의 설정과 미리 보기가 시작됨 3. 서페이스가 소멸.. 2021. 5. 18.
인사이드 안드로이드 08 안드로이드 서비스 프레임워크 (3) 8.4 네이티브 서비스 매니저 각 종 서비스의 정보와 목록을 컨텍스트 매니저가 관리함. 이러한 과정을 통해 서비스와 서비스 사용자 사이에 연결 고리가 만들어짐. 서비스와 서비스 사용자는 서로 다른 프로세스에서 각 독립된 메모리 공간을 사용하기 때문에 둘 사이의 정보 공유를 위해서 프로세스 간 통신이 필요함. 바인더 드라이버는 컨테스트 매니저에 서비스가 등록되는 과정에서 드라이버 내부에 서비스에 대한 연결 정보를 가진 바인더 노드를 생성함. 서비스 프레임워크에서 바인더 노드의 번호를 서비스 핸들 값으로 참조함. 바인더 RPC를 처리해주는 서비스 프록시를 제공함. 서비스 프록시는 서비스와 사용자 사이에서 바인더 알피씨데이터의 송수신을 제공함. 서비스 프레임워크에서 서비스 매니저를 이용해 서비스를 등록하고 서.. 2021. 5. 18.