명령줄

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 / falsetrue 또는 false(on/off도 됨)droidline wifi false
예/아니요 옵션옵션만 쓰면 truedroidline apps --system
이름 목록쉼표로 구분droidline notify_filter com.android.chrome,com.google.android.gm
which의 후보field=value 쌍droidline which text="Log in" id=main_tab
batch의 단계작은따옴표로 감싼 JSONdroidline 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를 출력
없음okdroidline 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 mcpAI 에이전트를 위한 MCP 서버를 실행합니다.
droidline version버전을 출력합니다.