OTA·제품 빌드·native 서비스 — 상세 구조도
기준 커밋:
1398d109c391c4044cae26d0e9aea4d3f08d9670. 도식은 기존 구현을 설명한다. 제품 이미지 설치·실기기 성공을 증명하지 않는다.
UpdateEngine 소유자와 제품 편입·init·library 경계를 함께 확인
SVG 원본 크게 열기 · Mermaid 원본 · 모듈 분석 본문
읽는 순서와 연결 의미
행은 책임·실행 경로별 묶음이며 별도 프로세스라는 뜻은 아니다. 같은 행의 인접 연결은 화살표로, 행을 넘거나 떨어진 상자 사이 연결은 동일한 E 번호의 출력·입력 포트로 표시한다. 아래 표는 방향과 의미를 모두 풀어 쓴 것이다. 그림의 코드 파일명을 눌러 저장소로 이동하는 기능은 없으며, 아래 경로로 지정 커밋을 조회할 수 있다.
| 연결 | 출발 → 도착 | 동작 | 종류 |
|---|---|---|---|
| E01 | UpdateAgent Service → MainActivity | 상태·메시지 알림 | 결과·이벤트 |
| E02 | MainActivity → UpdateManager | applyUpdate | 호출·명령 |
| E03 | UpdateManager → 외부 UpdateEngine | applyPayload | 호출·명령 |
| E04 | packages.mk → Android.mk 모듈 | 제품 모듈 선택 | 데이터·구성 의존 |
| E05 | packages.mk → privapp allowlist | XML copy 선언 | 데이터·구성 의존 |
구성요소별 책임과 코드 근거
| 상자 | 구성요소 | 책임·상태 | 지정 커밋의 소스 경로 |
|---|---|---|---|
| N01 | UpdateAgent Service | IUpdateControl OTAUpdate / MainActivity에 broadcast | apps/UpdateAgent/java/com/sk/airbot/updateagent/UpdateAgent.java |
| N02 | MainActivity | UpdateManager owner / config 선택 / applyUpdate | apps/UpdateAgent/java/com/sk/airbot/updateagent/ui/MainActivity.java |
| N03 | UpdateManager | PrepareUpdateService → payload / bind / cancel / 상태 재동기화 | apps/UpdateAgent/java/com/sk/airbot/updateagent/UpdateManager.java |
| N04 | 외부 UpdateEngine | Android payload 적용 / slot·재부팅 완료는 별도 | apps/UpdateAgent/java/com/sk/airbot/updateagent/UpdateManager.java |
| N05 | ethernetagent | init → ethernetStatic.c / eth0 / route / property / ping | service/ethernetagent/ethernetStatic.c |
| N06 | logwriter | logcat / inotify worker / 회전·gzip / ZIP 도구 | service/logwriter/logwriter.cpp |
| N07 | a1_decrypt | 외부 binary·rc prebuilt / 기본 packages 선택 없음 | service/decrypt/Android.mk |
| N08 | libserial_port | 32/64 bit prebuilt .so / system/lib·lib64 선언 | libs/serial_port/Android.mk |
| N09 | packages.mk | PREBUILT=n / PACKAGES=y / 조건부 PRODUCT_PACKAGES | packages.mk |
| N10 | Android.mk 모듈 | source BUILD_PACKAGE / IoT·Pairing BUILD_PREBUILT | Android.mk |
| N11 | privapp allowlist | system 권한 XML 복사 / 최종 grant는 별도 확인 | apps/permissions/ |
| N12 | sepolicy / script | system_app.te 빈 파일 / build_DA / cmd_test 운영 도구 | sepolicy/system_app.te |
해석 경계와 변경 시 검토
- OTAUpdate broadcast가 항상 payload 실행을 시작하는 것은 아니다. 적용 owner는 MainActivity다.
- daemon 3개와 library 1개는 독립 모듈이다. 서로 직렬 호출하는 파이프라인이 아니다.
- AOSP framework·HAL·커널 구현은 이 저장소 밖이다. 제품 이미지·서명·SELinux 동작은 미검증이다.