728x90 반응형 전체 글228 Android 접근성 서비스로 AI 휴대폰 제어, 바뀐 버튼을 누른 이유 AI 작업 모니터 앱에 PC의 AI가 휴대폰 화면을 보고 누르는 기능을 넣었다. Android 접근성 서비스로 화면 요소를 읽고 터치를 보낸다. 감사 중 바뀐 버튼을 누르는 문제를 찾아 수정 과정과 15분 종료 규칙을 정리했다.AI는 화면을 본 뒤에만 누를 수 있다AI는 로컬 MCP 어댑터와 기존 HTTPS 서버, 휴대폰 활성 세션을 거쳐 AccessibilityService에 연결된다. 사용에 USB·같은 Wi-Fi·PC ADB는 필요 없다. 휴대폰에서 접근성을 승인하고 제어를 시작해야 한다.화면 조회(observe): 축소한 JPEG와 텍스트·버튼·입력칸 목록요소 조작(click, set_text): 화면 요소 ID로 클릭·입력좌표 조작(tap, swipe)과 뒤로가기·홈규칙은 하나다. 조작할 때마다.. 2026. 10. 30. Compose 역순 채팅 목록, 펼친 도구 제목이 -10,619dp로 밀린 이유 AI 작업 모니터 앱에서 긴 도구 출력을 펼치자 누른 제목이 화면 위로 사라졌다. 원인은 Jetpack Compose 역순 목록의 높이 변화와 스크롤 보정이 한 프레임 어긋난 데 있었다. 수정 과정과 최신 이동 버튼, 페이드 조정도 정리했다.도구 상세를 펼치면 제목이 화면 밖으로 밀려났다새 메시지가 아래에 붙는 역순 목록이었다. 도구 상세를 펼치자 늘어난 높이만큼 위쪽이 밀려, 방금 누른 제목이 화면에서 사라졌다.에뮬레이터 검사로 재보니 제목의 위쪽 위치가 약 270dp에서 -444dp로 이동했다. 아래로 돌아가는 버튼도 없었다.누른 위치를 기억하고 새 높이만큼 되돌렸다처음엔 탭한 도구 위치를 저장했다. 새 높이에 맞춰 스크롤을 보정하고, 펼침 상태는 안정적인 메시지 키로 보존했다.이어 펼침 240ms,.. 2026. 10. 30. Cursor 첫 답변이 작업 완료 뒤 맨 아래에 또 나온 이유, 사라진 임시 답변 Cursor 작업 완료 뒤 최종 답변 아래에 첫 답변 문장이 또 붙었다. 원인은 정식 답변이 저장된 뒤에도 임시 답변이 앱 캐시에 남은 것이었다. 최신 목록에서 사라진 항목만 지우고, 오래된 조회가 되살리지 못하게 막았다.작업이 끝났는데 첫 문장이 맨 아래에 또 있었다휴대폰에서 Cursor 대화를 열자 답변 순서가 이상했다. 첫 답변과 최종 답변 아래에 작업 상태를 확인 중이라는 문장이 또 나왔다.서버에서 최신 메시지 100개를 다시 조회했다. 목록은 정식 첫 답변과 최종 답변으로 끝났고 중복 문장은 없었다. 서버에는 없고 앱에만 남은 문장이었다.임시 답변은 저장되면 ID가 바뀐다Cursor 기록을 읽는 쪽은 아직 저장되지 않은 응답을 checkpoint:라는 임시 assistant 메시지로 보낸다. 저.. 2026. 10. 30. Cursor 작업이 끝났는데 도구 카드 3개가 계속 돈 이유, 두 개의 호출 ID AI 작업 모니터 앱에서 Cursor 작업이 '완료'로 끝났는데, 최종 답변 위에 도구 카드 3개가 계속 회전했다. 원인은 같은 도구 호출이 실시간 기록과 저장 기록에서 서로 다른 ID로 들어온 것이었다. 정확히 같은 호출 ID만 합치도록 병합을 고친 과정을 정리했다.작업은 끝났는데 카드 3개가 계속 돌았다한 대화를 열어 보니 원본 Cursor 상태는 completed였다. 서버에서 새로 읽은 도구 결과도 모두 완료나 실패였다. 그런데 앱 화면에는 최종 답변 뒤로 임시 도구 카드 세 개가 회전 아이콘을 띄우고 있었다.서버 데이터는 맞는데 화면만 틀렸으니, 문제는 앱의 기록 병합에 있다고 봤다. 이 앱은 실시간으로 들어온 항목과 저장된 기록을 ID 기준으로 합친다. 둘을 같은 호출로 알아보지 못하면 최종 .. 2026. 10. 30. 백그라운드 SSE 1.2MB를 65KB로, 안 보이는 화면은 조회를 멈췄다 휴대폰 화면을 꺼도 내 AI 작업 모니터 앱은 서버에 상태를 묻고 있었다. 조사해 보니 숨긴 화면의 조회, 백그라운드 전체 상태 수신, 같은 메시지의 객체 교체가 겹쳤다. 보이지 않으면 묻지 않고, 바뀌지 않으면 다시 그리지 않기로 했다.화면을 안 볼 때도 앱은 계속 묻고 있었다기능은 그대로 두고 반복 갱신 경로를 전수 조사했다. Android 소스 44개와 서버 SSE(Server-Sent Events), 웹, IDE 확장을 살피고 에뮬레이터 재현 테스트 6개로 확인했다.먼저 수명 문제가 드러났다. 예약 화면의 Activity를 CREATED로 내리고 테스트 시계를 6.5초 진행하자 조회가 1회에서 2회로 늘었다. LaunchedEffect는 Activity가 아니라 컴포지션 수명을 따랐다.한 메시지만.. 2026. 10. 29. 사용 한도 자동 재개 예약, 429만으로는 한도라고 판단하지 않았다 AI 에이전트가 한도에 막히면 리셋 뒤 직접 메시지를 보내는 일이 번거로웠다. 그래서 앱이 대신 보내는 '재개 예약'을 만들었다. 단, 429나 잔여량 0%만으로 한도 중단을 판단하지 않게 했다.한도에 막힌 대화를 리셋 뒤 다시 깨우고 싶었다앱이 추적하는 한도는 Codex·Cursor의 주간 한도와 Codex의 5시간 한도다. 긴 작업이 멈추면 리셋 뒤 내가 '이어서 해 줘'를 보내야 이어졌다.이번에는 앱 왼쪽 메뉴에 '예약'을 넣었다. 대기 중, 한도 중단, 기록 세 칸으로 나뉜다. 채팅 목록에는 '한도 중단', '재개 가능', '재개 예약됨', '예약 확인 필요' 표시가 붙는다.한도로 멈춘 채팅은 입력창 위에 '재개 예약' 버튼이 뜬다. 작업 중에 미리 걸어 두려면 입력창 추가 메뉴의 '한도 후 보내.. 2026. 10. 29. 이전 1 2 3 4 ··· 38 다음 728x90 반응형