109.9 KB · 수정 2026-08-25 12:25
목차

poin-agent — 작업 규칙 (rules)

이 파일 = note20 폰·카톡 조작 작업 규칙의 단일 출처. 상태·진행·구현이력은 handoff.md, 여긴 규칙만. 갱신 지침(필수): 새 규칙·교훈·함정이 나오면 그 답변에서 바로 아래 🆕 신규에 1줄 append(날짜 + 규칙 한 줄 + 근거 포인터). 다음 세션으로 미루지 않는다. 신규가 쌓이거나 안정화되면 확립 규칙의 해당 §로 원문 이관(삭제 금지, cut&paste).

📑 인덱스 (필요한 항목만 열어 읽는다)

§ 내용 언제
§1 연결·환경 (유선 기본·adb·python) 세션 시작·연결 실패 시
§2 화면·좌표 (세로고정·재잠금·팝업) 모든 UI 조작 전 필수
§3 봇탐지 회피 (지터·타이밍·레드라인) 카톡 조작 전 필수
§4 카톡 조작 (IME·친구추가·발송·노드맵) 카톡 기능 구현·실행 시
§5 검증·마무리 (단정 금지·화면끄기·경로함정) 작업 끝낼 때

🆕 신규 (미편입 · 최신 위)


확립 규칙

§1 연결·환경

§2 화면·좌표 — 세로화면 고정 = 필수 전제 (2026-07-23 페페 지시, 근본수정 완료)

adb 작업 중 폰 자동회전이 켜져 가로화면이 되는 이슈가 실재. 가로가 되면 좌표계 전체가 뒤집혀(1080x2400 ↔ 2400x1080) 모든 하드코딩 좌표·스와이프가 엉뚱한 데로 가고, 화면 밖 스와이프는 조용히 무시된다 → "메뉴 항목이 없다"는 유령 오진을 낳음(실제로 이 버그로 공지 메뉴를 "없다"고 오판했다). - 고정 방법: P.portrait() = accelerometer_rotation 0(자동회전 끔) + user_rotation 0(세로). connect()마다 자동 실행(프로세스당 1회) + app() 실행 직후 force=True 재적용. - ⚠ 카톡은 실행 시 화면을 가로로 뒤집는다(회전잠금 걸려 있어도). 그래서 connect 시점 1회로는 부족 → 앱 실행 후 재적용이 필수. 실측: 재적용 전 in room: (2400,1080) → 재적용 후 (1080,2400) 유지. - wm size로 방향 판정 금지 — 물리 패널 크기(항상 1080x2400)라 회전해도 안 변함(내가 이걸로 오판했다). dumpsys window displayscur=WxH(회전 반영)를 봐야 한다. P.size()/P.is_portrait()가 이걸 쓴다. - 좌표는 화면크기 계산 대신 노드 bounds에서 유도하는 게 근본적으로 안전 → 리스트 스크롤은 _find_in_list()scrollable 컨테이너 자체 bounds 안에서 스와이프(회전 무관). - 재잠금 대비: unlock 성공해도 조작 중 잠금화면 복귀함(실측). 매 조작 전 잠금상태 재확인 + 필요시 재unlock. P.awake() 컨텍스트매니저가 이걸 담당(finally에서 화면 끔). - is_locked()는 포커스 라인만 판정(Bouncer/Keyguard/StatusBar/NotificationShade). dumpsys 전체에서 "Keyguard" 문자열 찾으면 잠금 아닌데 True → 켜진 화면에 스와이프 → 알림셰이드가 앱을 덮어 작업 전부 실패(수정 완료, 재발 주의). 스와이프 시작 y=1800(2000은 제스처바라 home 제스처로 먹힘). - unlock 직후 팝업이 화면을 덮는 케이스: MtpPopupActivity(USB연결)·CellBroadcastAlertDialog(재난문자) → BACK으로 대개 닫히나 재난문자는 확인버튼 좌표탭 필요. 조작 전 focus가 com.kakao.talk인지 확인 필수.

§3 봇탐지 회피 (최우선 원칙)

§4 카톡 조작 (P3 확립)

§5 검증·마무리