본문 바로가기

전체 글571

안드로이드 하드웨어 서비스 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.
인사이드 안드로이드 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.