빠른 시작

폰을 PC와 페어링하고 셸, Python, Node.js, HTTP로 첫 명령을 보냅니다. 다섯 단계 정도면 됩니다.

번역된 페이지입니다. 영어 문서와 내용이 다르면 영어 문서가 기준입니다. English

이 페이지는 서버와 앱을 설치하고 앱 권한도 이미 켜 두었다고 가정합니다. 아직이라면 먼저 설치를 따라 하세요. 15분 정도 걸립니다. 이 페이지를 따라 하려면 PC와 폰이 같은 Wi-Fi에 있어야 합니다.

1. 서버 시작

PC의 터미널에서 다음을 실행합니다.

droidline serve

실행한 채로 둡니다. 아래 내용은 모두 두 번째 터미널에서 합니다.

2. 폰 페어링

페어링은 폰과 PC를 서로 한 번 소개하는 과정입니다. 둘은 키를 주고받고, 그때부터 서로를 알아보며 둘 사이에 오가는 모든 내용을 암호화합니다. 폰마다 한 번만 하면 됩니다.

  1. PC에서 다음을 실행합니다.

    droidline pair

    터미널에 QR 코드가 나타납니다. 이 코드는 10분 동안 유효하고 폰 한 대를 페어링합니다.

  2. 폰에서 Droidline을 열고 페어링 탭으로 가서 QR 스캔을 누릅니다.

  3. 카메라를 터미널에 비춥니다. 앱에 PC 이름과 함께 페어링되었습니다라는 메시지가 나타납니다.

폰에 카메라가 없거나 QR 코드가 인식되지 않을 때 이 방법을 씁니다.

  1. 폰에서 Droidline을 열고 페어링 탭으로 가서 이 Wi-Fi에서 페어링을 누릅니다.

  2. 앱이 네트워크에서 PC를 찾습니다. 여러 대가 보이면 내 PC를 고릅니다. 그러면 앱이 6자리 코드를 보여 줍니다. 이 코드는 5분 동안 유효합니다.

  3. PC에서 코드를 입력합니다. --name은 나중에 쓸 짧은 이름을 폰에 붙입니다.

    droidline pair 482913 --name shelf-01

3. 폰이 온라인인지 확인

droidline devices
NAME      ID        MODEL     ANDROID  STATE   ROUTE  MISSING
shelf-01  k7d2q9xa  SM-S921N  14       online  lan    notif,vpn
  • STATE는 online이어야 합니다.
  • ROUTE는 폰이 PC에 닿는 방식을 보여 줍니다. lan은 Wi-Fi로 직접 연결됐다는 뜻입니다.
  • MISSING에는 폰에서 아직 꺼져 있는 권한이 나옵니다. a11y(접근성 서비스), ime(Droidline 키보드), notif(알림 접근), vpn(VPN 권한), capture(화면 캡처, Android 9와 10에서만 물음)입니다. 필수는 a11y와 ime뿐이므로 여기 나온 notif,vpn은 괜찮습니다.

4. 첫 명령 보내기

아래 예제는 모두 폰에서 설정 앱을 열고, 항목 하나를 탭한 뒤, 지금 어떤 화면이 보이는지 읽어 옵니다. 사용할 언어의 탭을 고르세요.

droidline launch com.android.settings
droidline touch text "네트워크 및 인터넷"
droidline current
from droidline import connect

d = connect()                        # 온라인인 유일한 폰
d.launch("com.android.settings")     # 설정 열기
d.touch("text", "네트워크 및 인터넷")
print(d.current())                   # {'package': 'com.android.settings', 'activity': ...}
import { connect } from "droidline";

const d = await connect();                    // 온라인인 유일한 폰
await d.launch("com.android.settings");      // 설정 열기
await d.touch("text", "네트워크 및 인터넷");
console.log(await d.current());              // { package: 'com.android.settings', activity: ... }
curl -s -X POST localhost:8780/devices/_/launch \
  -H 'content-type: application/json' -d '{"package":"com.android.settings"}'

curl -s -X POST localhost:8780/devices/_/touch \
  -H 'content-type: application/json' -d '{"by":"text","value":"네트워크 및 인터넷"}'

curl -s -X POST localhost:8780/devices/_/current -H 'content-type: application/json'

Python 예제는 first.py로 저장해 python first.py로 실행하고, Node.js 예제는 first.mjs로 저장해 node first.mjs로 실행합니다. 확장자 .mjs는 이 파일이 import를 쓴다는 것을 Node.js에 알려 줍니다.

5. 화면에 무엇이 있는지 보기

화면을 조작하려면 Droidline이 그 화면을 어떻게 보는지 알아야 합니다. dump는 화면을 요소 트리로 저장하고, screenshot은 이미지로 저장합니다.

droidline dump screen.json
droidline screenshot screen.png
d.dump("screen.json")
d.screenshot("screen.png")
await d.dump("screen.json");
await d.screenshot("screen.png");
curl -s -X POST localhost:8780/devices/_/dump -H 'content-type: application/json' > screen.json
curl -s localhost:8780/devices/_/screenshot.png -o screen.png

screen.json을 열고 폰에 보이는 글자를 검색해 보세요. 각 요소에는 text, id, desc가 있고, 이 값들을 touch에 넘깁니다. 셋 중 무엇을 고를지는 요소 찾기에서 설명합니다.

다음 단계

  • 첫 스크립트에서는 완전한 로그인 스크립트를 한 줄씩 설명하며 단계별로 만듭니다.
  • 언어별 가이드: Python, Node.js, CLI, HTTP.
  • 개념에서 대기, 조건 확인, 에러를 설명합니다.
  • 잘 안 됐다면 droidline doctor를 실행하고 문제 해결을 보세요.