컴퓨터에 꽂아둔 안드로이드 폰을 봇 전용으로 만들기

 ・ 6분

photo by Pat Whelen(https://unsplash.com/@patwhelen?utm_source=templater_proxy&utm_medium=referral) on Unsplash

안 쓰는 안드로이드 폰 하나쯤 서랍에 있죠. 저는 그 폰을 집에 있는 맥 미니에 USB로 계속 꽂아두고, 봇이 adb로 대신 조작하는 자동화 전용 폰으로 쓰기로 했어요. 맥 미니가 아니어도 adb가 돌아가는 컴퓨터라면 똑같이 할 수 있어요.

사람이 들고 다니는 폰과 봇이 쓰는 폰은 필요한 설정이 꽤 달라요. 화면이 꺼지거나 잠기면 봇은 거기서 멈추거든요. 이 글에서는 갤럭시 S23을 봇 친화적으로 바꾼 과정을 순서대로 정리해볼게요.

메뉴 이름은 갤럭시(One UI) 기준이라 다른 제조사 폰은 조금 다를 수 있어요.

adb(Android Debug Bridge)는 컴퓨터에서 안드로이드 기기에 명령을 보내는 공식 도구예요. 앱 설치, 화면 탭, 텍스트 입력, 파일 관리까지 터미널에서 할 수 있어요.

폰 쪽 설정: 봇이 멈추지 않게#

화면 잠금은 아예 해제했어요#

봇이 가장 자주 막히는 지점은 잠금 화면이에요. 처음에는 패턴을 유지한 채 확장 잠금 해제(Smart Lock)의 "신뢰할 수 있는 장소"를 써봤어요. 집 위치에 있으면 잠금이 풀린 상태로 유지되는 기능이에요.

그런데 위치를 켜 두었는데도 폰이 잠기는 일이 계속 생겼어요. 찾아보니 이유가 여러 가지였어요.

  1. 처음 잠금 해제 — 재부팅 직후에는 신뢰할 수 있는 장소여도 한 번은 직접 풀어야 해요.
  2. 4시간 규칙 — 확장 잠금 해제 상태라도 4시간 동안 직접 잠금을 풀지 않으면 다시 잠겨요.
  3. 재부팅 — 업데이트 등으로 재부팅되면 1번 상황으로 돌아가요.
  4. 위치 정확도 — 실내에서는 위치가 튀어서 "집이 아니다"로 판단될 때가 있어요.
  5. 배터리 최적화 — 위치 관련 서비스가 절전 때문에 제때 갱신되지 않을 수 있어요.

사람이 매일 들고 다니는 폰이라면 4시간 규칙은 큰 문제가 아니에요. 하지만 아무도 만지지 않는 자동화 폰에는 치명적이죠. 이 폰은 집에만 두는 기기라서 잠금 자체를 없음으로 바꿨어요.

개발자 옵션에서 바꾼 세 가지#

설정 → 휴대전화 정보 → 소프트웨어 정보에서 빌드 번호를 일곱 번 누르면 개발자 옵션이 열려요. 여기서 세 가지를 바꿨어요.

  1. 화면 켜짐 상태로 유지 — 충전 중에는 화면이 꺼지지 않아요. USB로 상시 연결된 폰이라 사실상 항상 켜져 있어요.
  2. 화면 꺼짐 시간 최대 — 디스플레이 설정의 화면 자동 꺼짐 시간도 가장 길게 잡았어요.
  3. 애니메이션 배율 0 — 창 애니메이션, 전환 애니메이션, Animator 길이 배율을 모두 끄면 화면 전환이 즉시 끝나요. 봇이 "화면이 바뀔 때까지" 기다리는 시간이 줄어들어요.

애니메이션 배율은 adb로도 바꿀 수 있어요.

# 애니메이션 배율 세 가지를 모두 0으로
adb shell settings put global window_animation_scale 0
adb shell settings put global transition_animation_scale 0
adb shell settings put global animator_duration_scale 0

화면과 배터리 보호#

화면이 계속 켜져 있으면 번인(같은 화면이 오래 떠 있어 잔상이 남는 현상)이 걱정되잖아요. 그래서 밝기는 최저로 내렸어요.

배터리는 배터리 보호 기능으로 충전을 79%에서 멈추게 했어요. 하루 종일 충전기에 꽂혀 있는 폰은 100% 상태로 오래 있으면 배터리가 빨리 상해요. 마지막으로 방해 금지 모드를 켜서 알림이 화면을 가리지 않게 했어요.

컴퓨터 쪽 설정: adb를 편하게#

제 환경은 macOS와 zsh라서 아래 예시도 그 기준이에요. 다른 OS를 쓴다면 경로와 설치 방법만 환경에 맞게 바꾸면 돼요.

adb 경로와 zsh 함수#

macOS에서 Android Studio로 SDK를 설치했다면 adb는 아래 경로에 있어요.

~/Library/Android/sdk/platform-tools/adb

처음에는 자주 쓰는 명령을 문자열 변수에 담아 썼는데, zsh에서는 이게 기대대로 동작하지 않았어요. zsh는 bash와 달리 따옴표 없는 변수도 공백으로 쪼개지 않거든요. 그래서 ADB="adb -s 시리얼"처럼 담은 뒤 $ADB shell ...로 부르면 통째로 하나의 명령 이름으로 취급돼요.

이럴 때는 함수로 묶는 게 깔끔해요.

# ~/.zshrc
# <시리얼>은 adb devices로 확인한 기기 시리얼로 바꿔요
phone() {
  "$HOME/Library/Android/sdk/platform-tools/adb" -s "<시리얼>" "$@"
}
 
# 사용 예
# phone shell input tap 500 1200

scrcpy로 컴퓨터에서 폰 화면 보기#

scrcpy는 USB로 연결한 안드로이드 화면을 컴퓨터 창에 띄우고, 마우스와 키보드로 조작하게 해주는 도구예요. 봇이 뭘 하고 있는지 눈으로 확인할 때 유용해요. Windows와 Linux도 지원하고, 저는 macOS라서 Homebrew로 설치했어요. 이번에 설치된 버전은 5.0.1이에요.

brew install scrcpy

scrcpy는 내부적으로 adb를 쓰기 때문에 adb가 PATH에 있어야 해요. SDK의 platform-tools 경로를 PATH에 추가해주면 돼요.

# ~/.zshrc
export PATH="$HOME/Library/Android/sdk/platform-tools:$PATH"

이제 터미널에서 scrcpy만 입력하면 컴퓨터 화면에 폰이 떠요.

ADBKeyBoard로 한글 입력하기#

adb에는 input text라는 텍스트 입력 명령이 있지만 한글은 제대로 입력되지 않아요. 그래서 ADBKeyBoard라는 입력기 앱을 따로 설치했어요. adb 브로드캐스트로 받은 문자열을 그대로 입력해주는 키보드예요.

Play 프로텍트 경고#

설치하려고 하니 Play 프로텍트가 "안전하지 않은 앱 차단됨"이라며 막았어요. 옛날 안드로이드 버전용으로 만들어진 앱이라 뜨는 경고였어요.

이 앱이 하는 일과 출처를 확인한 뒤, "세부정보 더보기 → 무시하고 설치하기"로 설치했어요. 이 판단은 뒤의 주의점에서 다시 이야기할게요.

한글 문장을 한 번에 입력하기#

ADBKeyBoard는 ADB_INPUT_B64 브로드캐스트로 Base64 인코딩된 문자열을 받아요. Base64로 보내면 한글이나 공백, 특수문자가 셸에서 깨지지 않아요.

# 자동화할 때만 ADBKeyBoard로 전환
adb shell ime enable com.android.adbkeyboard/.AdbIME
adb shell ime set com.android.adbkeyboard/.AdbIME
 
# 한글 문장을 Base64로 인코딩해서 한 번에 입력
adb shell am broadcast -a ADB_INPUT_B64 \
  --es msg "$(printf '%s' '안녕하세요, 자동화 테스트예요' | base64)"

평소 기본 키보드는 삼성 키보드로 두고, 자동화할 때만 ime set으로 바꿔요. 작업이 끝나면 다시 삼성 키보드로 돌려놓으면 돼요. 입력기 ID는 adb shell ime list -s로 확인할 수 있어요.

이렇게 해서 뭘 하냐면#

캡컷 TTS 음성 만들기#

캡컷의 일부 TTS 음성(예: "애덤")은 모바일 앱에서만 쓸 수 있어요. 그래서 봇이 adb로 캡컷 앱을 조작해서 음성을 만들고 내보내게 했어요. 데스크톱에서는 못 하던 작업을 폰을 거쳐 자동으로 처리하는 셈이죠.

갤러리 정리#

자동화를 돌리다 보면 내보낸 파일이 갤러리에 계속 쌓여요. adb로 파일을 지워도 갤러리 앱에는 한동안 그대로 보이는데, 갤러리가 보는 미디어 목록이 바로 갱신되지 않아서 그래요. 그래서 파일을 삭제한 뒤 미디어 스캔을 다시 실행해서 목록을 맞춰줘요.

꼭 알아둘 주의점#

편해진 만큼 감수해야 하는 부분도 있어요.

  1. 잠금 없는 기기 — 이 폰을 잃어버리면 누구나 열 수 있어요. 집 밖으로 가지고 나가지 않는 기기에만 적용하고, 중요한 계정이나 결제 수단은 로그인하지 않는 게 좋아요.
  2. Play 프로텍트 우회 — 경고를 무시하는 건 출처와 동작을 직접 확인한 앱에만 해야 해요. "그냥 설치되네" 하고 넘어가면 진짜 악성 앱도 같은 방법으로 들어올 수 있거든요.
  3. 앱 자동화와 약관 — 다른 회사의 앱을 봇으로 조작하는 건 그 플랫폼의 이용 약관에 어긋날 수 있어요. 자동화하기 전에 약관을 한 번 확인해보세요.
  4. 개인정보 가리기 — 이 글처럼 설정을 공유할 때는 기기 시리얼이나 경로에 들어간 사용자 이름 같은 정보는 가리는 게 좋아요.

마무리#

정리하면 봇 전용 폰은 세 가지만 지키면 돼요. 잠기지 않게, 꺼지지 않게, 그리고 오래 버티게 하는 거예요. 여기에 adb 함수, scrcpy, ADBKeyBoard까지 갖추면 컴퓨터에서 폰을 거의 원격 손처럼 쓸 수 있어요.

서랍 속 폰이 있다면 먼저 개발자 옵션의 "화면 켜짐 상태로 유지"부터 켜보세요. 거기서부터 자동화가 훨씬 수월해져요.


I endeavour to be wise when I cannot be merry, easy when I cannot be glad, content with what cannot be mended and patient when there is no redress.

— Elizabeth Montagu


다른 글
7개월 만에 다시 비교한 Paperclip과 Multica 커버 이미지
 ・ 9분

7개월 만에 다시 비교한 Paperclip과 Multica

AI 에이전트가 일하는 걸 지켜보는 화면을 설계해봤어요 커버 이미지
 ・ 4분

AI 에이전트가 일하는 걸 지켜보는 화면을 설계해봤어요

마크다운으로 AI 에이전트 작업 자동화할 때 챙길 것 커버 이미지
 ・ 5분

마크다운으로 AI 에이전트 작업 자동화할 때 챙길 것