명령줄
bash, zsh, PowerShell에서 droidline 명령을 씁니다. 인자 규칙, 명령별 출력, 종료 코드, 스크립트 패턴, 예약 작업을 다룹니다.
번역된 페이지입니다. 영어 문서와 내용이 다르면 영어 문서가 기준입니다. English
서버를 실행하는 droidline 프로그램은 명령줄 클라이언트이기도 합니다. 모든 폰 명령이 하위 명령으로 동작하므로, 다른 것을 설치하지 않고도 직접 손으로 시험해 보고, 셸 스크립트를 쓰고, 예약 작업을 돌릴 수 있습니다.
droidline launch com.android.settings
droidline touch text "Network & internet"
droidline screenshot shot.png
serve, version, help를 뺀 모든 명령은 서버가 실행 중이어야 합니다(다른 터미널에서 droidline serve).
명령줄의 구성
droidline [global options] <command> [arguments] [--option value]
인자는 명령어 레퍼런스의 파라미터 순서를 따릅니다. 선택 파라미터는 뒤에서부터 뺄 수 있습니다.
droidline touch text "Log in" # by, value
droidline touch text "Log in" 0 30 # by, value, nth, timeout
droidline long_tap 540 1200 800 # x, y, ms
옵션은 어떤 파라미터든 이름으로, 순서와 상관없이 지정합니다. 선택 파라미터에는 이쪽이 더 명확합니다.
droidline touch text "Log in" --timeout 30
droidline screenshot small.jpg --scale 0.5 --quality 70
droidline proxy @kr1 --app com.android.chrome
몇몇 값 형식은 쓰는 방법이 따로 있습니다.
| 형식 | 쓰는 법 | 예 |
|---|---|---|
| 공백이 있는 텍스트 | 따옴표로 감쌈 | droidline touch text "Close ad" |
| true / false | true 또는 false(on/off도 됨) | droidline wifi false |
| 예/아니요 옵션 | 옵션만 쓰면 true | droidline apps --system |
| 이름 목록 | 쉼표로 구분 | droidline notify_filter com.android.chrome,com.google.android.gm |
which의 후보 | field=value 쌍 | droidline which text="Log in" id=main_tab |
batch의 단계 | 작은따옴표로 감싼 JSON | droidline batch '[["airplane",true],["sleep",3000],["airplane",false]]' |
droidline help는 모든 명령을 보여 주고, droidline help touch는 명령 하나의 파라미터, 기본값, 예시를 보여 줍니다.
전역 옵션
전역 옵션은 명령 앞에 씁니다.
| 옵션 | 의미 |
|---|---|
--device NAME, -d NAME | 사용할 폰. 온라인인 폰이 두 대 이상이면 필요합니다. |
--json | 서버의 가공하지 않은 응답을 JSON 한 줄로 출력합니다. |
--addr HOST:PORT | 서버 주소. 기본값은 127.0.0.1:8780입니다. |
--token TOKEN | 클라이언트 토큰. 다른 컴퓨터에 있는 서버에 접속할 때 씁니다. |
--home DIR | 설정 폴더. serve와 관리 명령이 씁니다. |
droidline -d shelf-02 current
droidline --json exists text OK
같은 설정을 DROIDLINE_DEVICE, DROIDLINE_HOST, DROIDLINE_PORT, DROIDLINE_TOKEN으로도 줄 수 있습니다.
명령의 출력
| 명령이 돌려주는 것 | 출력 | 예 |
|---|---|---|
| 값 하나 | 값만 | droidline exists text OK는 true를 출력 |
| 없음 | ok | droidline back |
| 여러 항목 | JSON 한 줄 | droidline battery는 {"charging":true,"level":87,"temperature":31.5}를 출력 |
| 화면 덤프 | 들여쓴 JSON, 파일 이름을 주면 그 파일 이름 | droidline dump screen.json |
| 스크린샷 | 파일 이름과 크기 | after-login.png (1080x2400) |
에러는 표준 에러로 나가므로 $(...)에는 실제 출력만 담깁니다.
종료 코드
| 코드 | 의미 |
|---|---|
0 | 명령이 성공했습니다. 조건 확인이 false로 답한 것도 성공입니다. |
1 | 명령이 실패했습니다. 요소를 찾지 못했거나, 폰이 오프라인이거나, 서버가 파라미터를 거부한 경우입니다. |
2 | 명령줄 자체가 틀렸습니다. 모르는 명령이나 옵션을 썼거나, 인자가 너무 많은 경우입니다. |
bash나 zsh에서 스크립트 작성
set -e를 켜서 처음 실패할 때 스크립트가 멈추게 하고, 값은 $(...)로 읽고, 조건 확인 결과는 텍스트로 비교합니다.
#!/usr/bin/env bash
set -e
droidline launch dev.droidline.demo
if [ "$(droidline exists text "Close ad")" = "true" ]; then
droidline touch text "Close ad"
fi
balance=$(droidline get_text id balance)
echo "Balance is $balance"
# 예상한 실패: 멈추지 않고 처리
if ! droidline touch text "Maybe later" --timeout 3; then
echo "no prompt this time"
fi
jq로 온라인인 모든 폰을 돌며 실행합니다.
for name in $(droidline --json devices | jq -r '.value[] | select(.online) | .name'); do
droidline -d "$name" launch com.android.chrome &
done
wait # 폰들이 병렬로 실행됨. 모두 끝날 때까지 기다림
PowerShell
같은 스크립트를 PowerShell 7로 쓰면 이렇습니다. 조건 확인 결과는 문자열 true와 false로 돌아옵니다.
# droidline 명령이 실패하면 멈춤(PowerShell 7.4 이상)
$PSNativeCommandUseErrorActionPreference = $true
$ErrorActionPreference = "Stop"
droidline launch dev.droidline.demo
if ((droidline exists text "Close ad") -eq "true") {
droidline touch text "Close ad"
}
$balance = droidline get_text id balance
"Balance is $balance"
# 예상한 실패: 멈추지 않고 종료 코드를 확인
$PSNativeCommandUseErrorActionPreference = $false
droidline touch text "Maybe later" --timeout 3
if ($LASTEXITCODE -ne 0) { "no prompt this time" }
PowerShell의 자체 JSON 기능으로 폰을 돌며 실행합니다.
$phones = (droidline --json devices | ConvertFrom-Json).value | Where-Object online
foreach ($p in $phones) {
droidline -d $p.name launch com.android.chrome
}
Windows PowerShell 5.1에는 $PSNativeCommandUseErrorActionPreference가 없습니다. 반드시 성공해야 하는 명령마다 실행 후 $LASTEXITCODE를 확인하세요.
예약 작업
CLI는 서버 말고는 아무것도 필요 없어서 예약 작업에 잘 맞습니다. 먼저 droidline serve가 항상 실행되게 해 두세요(서버 설정).
# crontab -e: 매일 07:00에 폰을 깨우고 아침 앱을 엶
0 7 * * * /home/me/.local/bin/droidline -d shelf-01 wake && /home/me/.local/bin/droidline -d shelf-01 launch com.example.news$action = New-ScheduledTaskAction -Execute "pwsh.exe" -Argument "-NoProfile -File C:\Scripts\morning.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At 7am
Register-ScheduledTask -TaskName "Droidline morning" -Action $action -Trigger $trigger예약 작업에서는 전체 경로를 쓰세요. 예약 작업은 터미널보다 좁은 PATH로 실행됩니다.
관리 명령
CLI는 폰 명령 말고도 서버를 관리합니다.
| 명령 | 하는 일 |
|---|---|
droidline serve | 서버를 실행합니다. 열어 두세요. |
droidline pair | 폰을 페어링할 QR 코드를 보여 줍니다. |
droidline pair <code> [--name NAME] | 이 6자리 코드를 보여 주는 폰을 승인합니다. |
droidline devices | 페어링된 폰과 상태를 보여 줍니다. |
droidline rename <id> <name> | 폰에 새 이름을 붙입니다. |
droidline revoke <device> | 폰의 페어링을 지웁니다. |
droidline doctor | 설치 상태를 확인하고 설정 폴더를 출력합니다. |
droidline token create|list|revoke | 다른 컴퓨터에서 서버를 쓸 때 필요한 클라이언트 토큰을 관리합니다. |
droidline relay set|status|off | 직접 운영하는 릴레이를 거쳐 모바일 데이터를 쓰는 폰에 접속합니다. |
droidline proxy add|list|remove | 앱별 프록시에 쓸 업스트림 프록시를 저장하고 관리합니다. |
droidline webhook secret | 알림 웹훅의 서명용 시크릿을 보여 줍니다. |
droidline on_notification [--package P] | 멈출 때까지 알림마다 JSON 한 줄을 출력합니다. |
droidline mcp | AI 에이전트를 위한 MCP 서버를 실행합니다. |
droidline version | 버전을 출력합니다. |