# Milestone: USB 설치와 device 선택 ## 위치 - Roadmap: `agent-roadmap/ROADMAP.md` - Phase: `agent-roadmap/phase/usable-mvp/PHASE.md` ## 목표 USB로 연결된 Android device를 표시하고, 선택한 단일 APK를 `adb install -r`로 설치한다. 사용자는 폰 네트워크나 VPN 상태와 무관하게 Mac에서 내려받은 APK를 바로 밀어 넣을 수 있어야 한다. ## 상태 [계획] ## 승격 조건 - 없음 ## 구현 잠금 - 상태: 해제 - 결정 필요: 없음 ## 범위 - `adb devices -l` 기반 device 목록 - unauthorized/offline/device 상태 표시 - 설치 대상 device 선택 - `adb install -r` 실행, stdout/stderr 표시 - install success/failure 결과 기록 ## 기능 ### Epic: [device-list] device 탐색 연결된 Android device를 사용자가 이해할 수 있는 형태로 보여준다. - [ ] [adb-path] 설정된 adb path 또는 PATH의 `adb` 실행 가능 여부를 확인한다. - [ ] [parse-devices] `adb devices -l` 결과를 serial/state/model/product로 parsing한다. 검증: `device`, `unauthorized`, `offline` fixture test가 통과한다. - [ ] [device-state] USB debugging 승인 필요, offline, ready 상태를 UI에서 구분한다. - [ ] [refresh] 사용자가 device 목록을 새로고침할 수 있다. ### Epic: [install] APK 설치 선택한 device에 단일 APK를 설치하고 결과를 확인한다. - [ ] [install-run] 선택한 APK와 device serial로 `adb install -r`를 실행한다. - [ ] [install-output] stdout/stderr와 exit code를 UI에 표시한다. - [ ] [install-guard] APK가 선택되지 않았거나 device가 ready가 아니면 설치 버튼을 비활성화한다. - [ ] [install-result] 성공/실패 결과를 이후 이력 milestone에서 재사용할 수 있는 구조로 남긴다. ## 완료 리뷰 - 상태: 없음 - 요청일: 없음 - 완료 근거: 모든 기능 Task와 Task 안에 명시된 검증 충족 후 기록한다. - 리뷰 필요: - [ ] 사용자가 완료 결과를 확인했다 - [ ] archive 이동을 승인했다 - 리뷰 코멘트: 없음 ## 범위 제외 - `adb install-multiple` - AAB를 APK로 변환하는 `bundletool` - 무선 ADB pairing ## 작업 컨텍스트 - 관련 경로: `lib/src/features/devices/`, `lib/src/models/adb_device.dart`, `lib/src/services/adb_service.dart` - 표준선(선택): 화면 코드에서 `Process`를 직접 호출하지 않고 `AdbService`를 통해 실행한다. - 선행 작업: Artifact 탐색과 다운로드 - 후속 작업: ADB 콘솔과 logcat - 확인 필요: 없음