今回はPythonからAndroid端末をリモートで制御する方法です。
adb.exeのパスを確認する

adb.exeでできること
adb.exeを使用するとコマンドライン上でコマンドを実行することでAndroidを操作できます。

ソースコード(クラス)
# -*- coding: Shift-JIS -*-
from enum import IntEnum
import subprocess
import os
import cv2
import time
import numpy as np
class AdbCtrl(object):
class InitParam(object):
def __init__(self) -> None:
self.AdbRootDir: str = r""
self.IsUseHdAdb: bool = False
class Device(object):
def __init__(self, deviceId: str = "", deviceName: str = "") -> None:
self.DeviceId: str = deviceId
self.DeviceName: str = deviceName
class eKeyCode(IntEnum):
Home = 3
Back = 4
Task = 187
def __init__(self) -> None:
self.initParam = AdbCtrl.InitParam()
self.isInitialized = False
def Initialize(self, param) -> None:
if not os.path.isdir(param.AdbRootDir):
raise Exception(f"ADBのフォルダパス({param.AdbRootDir})が不正です")
self.initParam = param
self.isInitialized = True
def ExecTap(self, device, x: int, y: int) -> None:
send = f"adb {self.GetOptionDeviceStr(device)}shell input touchscreen tap {int(x)} {int(y)}"
self.NonQuery(send)
def ExecSwipe(self, device, x1, y1, x2, y2, timeMs) -> None:
send = f"adb {self.GetOptionDeviceStr(device)}shell input touchscreen swipe {x1} {y1} {x2} {y2} {timeMs}"
self.NonQuery(send)
def ExecScreenCap(self, device):
send = f"adb {self.GetOptionDeviceStr(device)}exec-out screencap -p"
png_bytes = self.QueryBin(send)
return cv2.imdecode(np.frombuffer(png_bytes, np.uint8), cv2.IMREAD_COLOR)
def GetOptionDeviceStr(self, device) -> str:
if device is None:
return ""
return f"-s {device.DeviceId} "
使い方
self.adbCtrl = AdbCtrl()
initParam = AdbCtrl.InitParam()
initParam.AdbRootDir = self.appConfig.AdbRootDir
self.adbCtrl.Initialize(initParam)
self.adbCtrl.ExecTap(None, 100, 200)
最後に
実際にこのクラスを使用して、定型作業を自動化することもできます。
以上!