전체 앱·SDK 구성과 시작 지점
기준:
1398d109c391c4044cae26d0e9aea4d3f08d9670. 지정 커밋의 추적 파일을 직접 확인한 정적 구조 분석이며, 현재 HEAD·후속 TaskManager·SKIX 구현을 포함하지 않는다.
apps/에는 앱뿐 아니라 SDK, 시험 앱, 권한 설정도 함께 있다. 다음 표는 해당 커밋의 18개 하위 디렉터리 전부다. 역할은 소스의 클래스·서비스 계약을 기준으로 요약했고, 실제 제품 탑재 여부는 빌드 선언과 구분했다.
앱·SDK 전체 목록
| 디렉터리 | 역할·주요 진입점 | 소스와 빌드 형태 |
|---|---|---|
AMRAgent |
IAMRControl Service, AMR 명령·상태·통신 | Java/AIDL, Android.mk BUILD_PACKAGE |
AirbotSdkProject |
DeviceControl API library와 SDK sample app | Gradle app + devicecontrolapi library |
DeviceAgent |
IDeviceControl·IWssControl·IStreamingControl, 제품 도메인 조정 | Java/AIDL, AOSP source build와 Gradle |
DeviceControlAPI |
DeviceControl client API | DeviceControlAPIJavaLib 정적 Java library |
ErrorProvider |
ErrorProvider, ErrorDataCleanupService, boot·upgrade receiver | Java ContentProvider 앱, BUILD_PACKAGE |
EventAssetAgent |
RecordingAidlService, ClipUploadService, 시험·기록 화면 | Gradle Java 앱; 이 트리에 Android.mk 없음 |
ICT |
LineTestActivity, 생산·기능 검사 | Gradle Kotlin/Java; 제품 목록 ICT, 자체 Android.mk 없음 |
IotAgent |
IIotControl, MQTT 연결·명령·상태 전송 | Gradle 소스 존재; Android.mk는 IotAgent.apk prebuilt |
LLMAgent |
ILLMControl 서비스 계약 | Java/AIDL BUILD_PACKAGE; 음성 LLM 제품 전체 구현으로 동일시하지 않음 |
MCUAgent |
IMCUControl 서비스와 MCU 처리 | Java/AIDL BUILD_PACKAGE; DeviceAgent의 현행 직접 HAL 경로와 구별 |
PairingAgent |
PairingAgentService, BLE·Wi-Fi 등록 | Gradle 소스 존재; Android.mk는 PairingAgent.apk prebuilt |
SKMLauncher |
HOME SplashActivity와 제품 UI | Gradle Java; 제품 목록 SKMLauncher, 자체 Android.mk 없음 |
SKMLauncher2 |
같은 package의 확장 Launcher UI | Gradle Java; 제품 목록에 이 이름 없음 |
StartupService |
부팅 초기화, factory reset 보조 | Java 앱, AOSP·Gradle |
UpdateAgent |
IUpdateControl, OTA 화면·PrepareUpdateService | Java/AIDL BUILD_PACKAGE, 일부 JAR 의존 |
VisionAgent |
IVisionControl·IFaceControl, VisionAgent·FaceVerifyService | Java/AIDL BUILD_PACKAGE, face SDK JAR 의존 |
devicecontrolapi_test |
MainActivity, SDK 호출 시험 | BUILD_PACKAGE, DeviceControlAPIJavaLib 사용 |
permissions |
privileged permission allowlist·생성 도구 | APK 아님; packages.mk의 복사 입력 |
소스 근거: 각 디렉터리의 Android.mk, AndroidManifest.xml 또는 app/src/main/AndroidManifest.xml, app/build.gradle. 상세 설치 경계는 빌드 페이지에서 설명한다.
프로세스와 Service의 구분
AMRAgent, IotAgent, DeviceAgent, PairingAgent 등은 각각 앱 패키지다. DeviceAgent 안의 DeviceAgent·WssService·StreamingService는 같은 Manifest에 선언되고 별도 android:process 지정이 없다. 따라서 세 Service 이름을 세 개의 독립 프로세스로 그리지 않는다. 반대로 서로 다른 APK가 android.uid.system을 공유해도 같은 프로세스라는 뜻은 아니다.
근거: apps/DeviceAgent/app/src/main/AndroidManifest.xml, 각 Agent Manifest.
Launcher: 두 소스, 같은 applicationId
SKMLauncher와 SKMLauncher2의 applicationId는 모두 com.sk.airbot.skmlauncher다. 각각의 SplashActivity가 MAIN·HOME·DEFAULT·LAUNCHER intent를 가진다.
- SKMLauncher:
ui/splash/SplashActivity.java에서 InitActivity·StayActivity로 이동한다. - SKMLauncher2: 같은 경로의 SplashActivity에서 HomeActivity·StayActivity·InitActivity 선택이 추가된다.
- 두 variant의 동시 설치를 전제로 하면 안 된다. 실제 제품이 어떤 산출물을 선택하는지는 product 설정·APK 증거가 필요하다.
근거: 두 모듈의 app/build.gradle:22 이후와 Manifest, app/src/main/java/com/sk/airbot/skmlauncher/ui/splash/SplashActivity.java.
부팅 보조와 네트워크 등록
| 앱 | 코드상 시작 경로 | 주의점 |
|---|---|---|
| IotAgent | BOOT_COMPLETED → receiver.BootReceiver → IotAgent.onCreate → foreground notification | 이 소스와 설치 prebuilt APK 일치는 별도 확인 |
| PairingAgent | BOOT_COMPLETED → receiver.BootReceiver → PairingAgentService.onCreate | IntentReceiver의 pairing/reset 액션도 존재 |
| StartupService | BOOT_COMPLETED → receiver.BootReceiver → StartupService.onCreate | factory reset Intent를 만드는 코드도 있어 단순 watchdog으로 축약하면 안 됨 |
| AMRAgent | BootReceiver → AMRAgent Service | DeviceAgent의 bind에 의한 시작도 구분 |
근거: 각 모듈 receiver/BootReceiver.java, IotAgent IotAgent.java:966, PairingAgent PairingAgentService.java:150, StartupService StartupService.java:43, :104.
StartupService Manifest의 service action은 IIotControl 이름을 사용한다. action 이름만 보고 IotAgent 구현이라고 합치지 말고 실제 service class와 패키지로 구분해야 한다.
SDK와 계약 사본
AirbotSdkProject/devicecontrolapi에는 IDeviceControl뿐 아니라 WSS·Streaming AIDL 및 Wss parcelable 사본이 있다. DeviceControlAPI는 별도 legacy Java library 모듈이다. devicecontrolapi_test는 이를 호출하는 시험 앱이다. 서로 다른 SDK 디렉터리를 곧바로 하나의 배포 AAR로 간주하지 않는다.
근거: apps/AirbotSdkProject/devicecontrolapi/src/main/aidl/, apps/DeviceControlAPI/Android.mk, apps/devicecontrolapi_test/Android.mk.
제품 포함 여부
조건부 PRODUCT_PACKAGES에는 앱 11개(AMRAgent, DeviceAgent, ErrorProvider, ICT, IotAgent, StartupService, PairingAgent, SmartFactory, SKMLauncher, UpdateAgent, VisionAgent)와 native 2개가 나온다. SmartFactory 디렉터리는 이 tree에 없고 HQA도 별도 조건에서 이름만 추가된다. LLMAgent·MCUAgent·EventAssetAgent 등의 디렉터리 존재만으로 이 목록에 의해 설치된다고 볼 수 없다.
Connections
전체 목차 · 앱 구성 · DeviceAgent 내부 · IPC · 실행 흐름 · 플랫폼·빌드 · 근거·확인 범위