Binder·HAL·데이터 계약 지도
기준:
1398d109c391c4044cae26d0e9aea4d3f08d9670. 지정 커밋의 추적 파일을 직접 확인한 정적 구조 분석이며, 현재 HEAD·후속 TaskManager·SKIX 구현을 포함하지 않는다.
D/는 DeviceAgent Java 루트, A/는 apps/DeviceAgent/app/src/main/aidl/com/sk/airbot/다. Android bound Service와 vendor HAL을 구분한다. 이 저장소에서 SystemServer에 새 서비스를 등록하는 구조를 확인한 것은 아니다.
공개 진입점
| 등록 → 계약 → 구현 | 용도 | 반환 의미 |
|---|---|---|
Manifest .DeviceAgent → A/devicecontrol/IDeviceControl.aidl → D/DeviceAgent.java의 Stub |
callback 등록·해제, sendModuleCommand(in Bundle, out Bundle) |
정수 0 자체는 물리 완료 증거 아님 |
Manifest .WssService → A/wsscontrol/IWssControl.aidl → D/ipc/WssControlStub.java → WssManager |
WSS 시작·중지·검증·자료 요청 | 요청 결과와 후속 WSS 이벤트를 함께 해석 |
Manifest .StreamingService → A/streamingcontrol/IStreamingControl.aidl → D/ipc/StreamingControlStub.java → StreamingManager |
스트리밍·업로드·수동 이동 | 세션 결과·callback과 구별 |
Manifest .provider.DeviceAgentProvider → D/provider/DeviceAgentProvider.java |
ContentProvider 접근 | Binder 명령 API와 별도 진입점 |
근거: apps/DeviceAgent/app/src/main/AndroidManifest.xml, D/DeviceAgent.java:513, D/WssService.java, D/StreamingService.java.
동료와 플랫폼 연결
| 호출자 → 계약 → 상대 | 연결 근거 | 해석 경계 |
|---|---|---|
| DeviceAgent → IAMRControl → AMRAgent | D/device/item/amr/AMRService.java:60, :124; D/main/MainService.java:78 callback |
AMRAgent Java 소스와 command dispatcher 존재; 하위 로봇 펌웨어는 별도 경계 |
| DeviceAgent → IIotControl → IotAgent | D/DeviceAgent.java:560; D/main/MainService.java:525 |
연결 후 callback 등록, 양방향 명령 전달 |
| DeviceAgent → IPairingControl → PairingAgent | D/DeviceAgent.java:556; D/main/MainService.java |
네트워크 등록·페어링 협력 |
| DeviceAgent → IUpdateControl → UpdateAgent | D/DeviceAgent.java:564; D/main/MainService.java |
UpdateAgent Java 소스와 UpdateEngine 연계; 플랫폼 엔진은 외부 경계 |
| VisionAIManager → IVisionControl / IFaceControl → VisionAgent | D/recognition/VisionAIManager.java; A/visioncontrol/ |
시각·얼굴 서비스 연계, 모델 내부는 미확인 |
| WssEventAssetManager → IEventAssetService → EventAssetAgent | D/wss/eventasset/WssEventAssetManager.java; A/eventassetcontrol/ |
증거 영상·자료 처리와 업로드 |
| DeviceAgent·MCUComm → IDeviceManager HAL | D/DeviceAgent.java:337; D/device/item/mcu/MCUComm.java |
HAL 구현·드라이버는 저장소 밖 |
| SoundFlowManager → ISoundFlowService HAL | D/system/SoundFlowManager.java:441 |
오디오 엔진 구현은 저장소 밖 |
| DeviceAgent → IEncryptionService | D/DeviceAgent.java:387 및 EncryptionServiceManager 의존 |
지도 초기화가 연결 callback에 걸림; 서비스 구현은 이 트리에서 확정하지 않음 |
MCUAgent의 AIDL·prebuilt는 있으나 DeviceAgent.connectServices()의 MCUAgent bind는 주석 처리되어 있다. 실제 DeviceAgent 경로는 device_manager HAL과 MCU 프로토콜 객체를 따라가야 한다.
명령과 결과는 다른 방향이다
일반 명령은 method와 개별 Bundle 필드로 의미를 전달한다. MainService의 AMR callback은 reportCmd를 읽어 BatteryStatus·CurrentPosition·MapStatus·DockingStatus 등의 처리를 분기한다. 이후 상태 반영과 PUI·IoT 통지가 이뤄진다. 동일 정수 ACK를 모든 기능의 공통 완료 계약으로 해석하지 않는다.
근거: D/DeviceAgent.java:264, D/main/MainService.java:78, D/app/AppCmd.java, A/devicecontrol/IDeviceControlCallback.aidl.
접근 제어에서 실제 확인한 것
WssControlStub의 여러 진입 메서드는 WssPackageValidator.enforceCallerAccess()를 호출한다. validator는 Binder 호출 UID가 SYSTEM_UID인지 확인하고, 호출 PID의 package 목록을 조회해 패키지 이름을 해시한 허용 목록의 front/remote 역할과 비교한다. 이는 APK 서명 인증서 해시 검증과 다른 동작이다.
StreamingService.onBind()의 CALLER_PACKAGE 로그만으로 호출자 인증이 됐다고 볼 수 없다. 일반 IDeviceControl과 Streaming에 WSS의 같은 validator가 보편 적용된다고도 가정하지 않는다. Manifest의 exported와 shared UID, 각 Stub의 검증은 함께 검토할 항목이다. 이 문서는 전체 보안 감사를 수행한 결과가 아니다.
근거: D/wss/policy/WssPackageValidator.java:47–129, D/ipc/WssControlStub.java, D/ipc/StreamingControlStub.java, Manifest.
데이터 소유와 지속성
| 데이터 | 대표 소유·저장 경로 |
|---|---|
| 기기 설정·기록 일부 | D/data/pref/SKMPreferences.java, PrefsMigrator.java, PrefsCryptoUtil.java |
| 예약 | D/schedule/db/ScheduleDao.java, ScheduleDbHelper.java |
| 청정 보고 | D/db/CleaningReportDao.java, CleaningReportDatabaseHelper.java |
| 경보 | D/alert/AlertDao.java, AlertDbHelper.java |
| 지도·구역 | D/map/MapManager.java, MappingManager.java, MapUploader.java |
| WSS 진행·검증·복구 | D/wss/data/, D/wss/eventasset/, WssUploadRecoveryController.java |
AIDL 사본이 SDK와 서비스들에 반복된다. 계약 변경 시 한 파일만 수정한 것으로 호환성을 보장할 수 없다. SDK·server·consumer가 같은 메서드 순서와 parcel 형식을 사용하는지 확인해야 한다.
Connections
전체 목차 · 앱 구성 · DeviceAgent 내부 · IPC · 실행 흐름 · 플랫폼·빌드 · 근거·확인 범위