@18 - 스마트폰 제어
1. 안드로이드 폰을 제어하려고 한다.
2. 실제 폰이 아닌 PC에 블루스택(안드로이드 시뮬레이터)을 설치하고 거기에 접속해 제어한다.
3. PC에는 안드로이드 디버그 브릿지 (ADB)를 설치하여야 한다.
4. ADB서버를 실행시키고 안드로이드 디바이스를 찾아 표시한다.
5. 웹 브라우저 열기 명령
6. 네이버 열고 스크린샷 후 저장하기
2. 블루스택 설치
- 블루스택 검색 후 설치
- 설정 변경하기
> 고급 기능 설정 > Android 디버그 브릿지 활성화
> 디버깅 입력 활성화
> 디스플레이 설정 > 세로모드 (1080x1920)
결과.
3. 안드로이드 디버그 브릿지 설치
- https://developer.android.com/studio/releases/platform-tools
SDK 플랫폼 도구 출시 노트 | Android 개발자 | Android Developers
Android SDK 플랫폼 도구는 Android SDK의 구성요소입니다.
developer.android.com
가. 설치 후 프로그램 폴더로 이동시켜 압축 해제.
나. 압축 해제된 폴더를 [통합 터미널에서 열기] 로 열기
다. 터미널이 열리면 서버 실행
>.\adb start-server
결과.
4. 안드로이드 기기 찾기
from ppadb.client import Client
# adb 사용하기 위한 고정 IP, 포트
client = Client(host='127.0.0.1', port=5037)
# 디바이스 찾기
find_devices = client.devices()
if len(find_devices) == 0:
print('No Devices')
quit()
device = find_devices[0]
print(f'찾은 디바이스 : {device}')
결과
5. 웹브라우저 열기
from ppadb.client import Client
import time
def adb_connect():
client = Client(host='127.0.0.1', port=5037)
find_devices = client.devices()
if len(find_devices) == 0:
print('No Devices')
quit()
device = find_devices[0]
print(f'찾은 디바이스 : {device}')
return device, client
# 디바이스 연결
device, client = adb_connect()
# 디바이스에 명령 보내기 : 웹 브라우저 열기
device.shell('input keyevent 64')
time.sleep(2.0)
결과.
- 키 이벤트들
# 키 이벤트값 입력으로 전달
device.shell('input keyevent 3')
input tap x y # x y 에 좌표 입력
input text 'text' # text에 글자 입력
input keyevent 3 # 홈 버튼
input keyevent 4 # 뒤로 가기 버튼
input keyevent 5 # 전화
input keyevent 24 # 볼륨 업
input keyevent 25 # 볼륨 다운
input keyevent 26 # 전원 켜기 / 끄기
input keyevent 27 # 카메라 열기
input keyevent 64 # 브라우저 열기
input keyevent 66 # 엔터
input keyevent 67 # 지우기(back)
input keyevent 277 # 잘라내기
input keyevent 278 # 복사하기
input keyevent 279 # 붙여넣기
6. 네이버 열고 캡쳐
from ppadb.client import Client
import time
def adb_connect():
client = Client(host='127.0.0.1', port=5037)
find_devices = client.devices()
if len(find_devices) == 0:
print('No Devices')
quit()
device = find_devices[0]
print(f'찾은 디바이스 : {device}')
return device, client
# 디바이스 연결
device, client = adb_connect()
# 디바이스에 명령 보내기 : 웹 브라우저 열기
device.shell('input keyevent 64')
time.sleep(2.0)
# 좌표 이동 (블루스택에 웹브라우저 열리면 주소창으로 마우스 가져가서 좌표 알아내기)
xyPosition = '382 133'
device.shell(f'input tap {xyPosition}')
time.sleep(2.0)
# url 입력
url = 'www.naver.com'
device.shell(f'input text {url}')
time.sleep(2.0)
# 엔터 입력
device.shell(f'input keyevent 66')
time.sleep(2.0)
# 스크린샷 찍기 / 저장
result = device.screencap()
with open(r'기초프로그램\18_smartPhone\screen.png', 'wb') as fp:
fp.write(result)
결과.
캡쳐된 화면.
블루스택 처리속도가 너무 느려서 네이버로 이동한 뒤 20초를 기다리고 스크린샷 찍었는데도 아직 로딩이 다 안됨
파이썬에서 스마트폰 제어가 가능할줄이야.
실제 스마트폰과 연동되면 좋겠다. 하는 방법이 있겠지.
안드로이드 말고 아이폰도 되는지 모르겠네.
만약에 프로그램으로 실제 스마트폰을 제어할 수 있다면?
CCTV 처럼 동작시켜서 영상처리도 할 수 있을 것 같다.
꿈만 크네 ㅎ
최근댓글