Python脚本利用adb进行手机控制的方法

YunAdmin
2024-03-29 / 0 评论 / 97 阅读 / 正在检测是否收录...
这篇文章主要介绍了Python脚本利用adb进行手机控制的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一. adb 相关命令:

  1. 关闭adb服务:adb kill-server
  2. 启动adb服务 adb start-server
  3. 查询当前运行的所有设备 adb devices
  4. 可能在adb中存在多个虚拟设备运行 可以指定虚拟设备运行 -s 虚拟设备名称
  5. 重启设备 adb reboot --指定虚拟设备 adb -s 设备名称 reboot
  6. 查看日志 adb logcat 清除日志 adb logcat -c
  7. 进入linux shell下 adb shell 其中常用的linux命令 cd cat 等等 输入su可以获取超级管理员名称了 要确定是否有哪些命令 进入 system/bin目录 就知道了
  8. 传入文件到设备中 adb push 本地文件 远程目录
  9. 从设备中拷贝文件到本地 adb -s emulator-5556 pull /data/config.ini d:/
  10. 显示当前运行的全部模拟器:
    adb devices
  11. 安装应用程序:
    adb install -r 123.apk
  12. 获取模拟器中的文件:
    adb pull
  13. 向模拟器中写文件:
    adb push
  14. 进入模拟器的shell模式:
    adb shell
  15. 卸载apk包:
    adb shell
    cd data/app
    rm 123.apk
    exit
    adb uninstall 123.apk
    adb install -r 123.apk
  16. 查看adb命令帮助信息:
    adb help
  17. 删除系统应用:
    adb remount (重新挂载系统分区,使系统分区重新可写)。
    adb shell
    cd system/app
    rm 123.apk
  18. 获取管理员权限:
    adb root

19、复制文件:
复制一个文件或目录到设备:
adb push
如:adb push update.zip /sdcard/
从设备上复制一个文件或目录:
adb pull
如:adb pull /sdcard/update.zip.

20、取得当前运行设备的实例的列表及每个实例的状态:
adb devices

21:这条命令模拟android手机在屏幕坐标(X,Y)处进行了点击操作。
adb shell input tap

22:这条命令模拟Android手机从屏幕坐标(X1,Y1)滑动到坐标(X2,Y2)的操作。
adb shell input swipe

23:Luiautomator dump dump: creates an XML dump of current UI hierarchy
这个命令是用来成成当前界面的UI层次,并用XML格式进行展示 。这样就可以获取各个组件的位置了
注:如果PC要想同时控制多台Android手机,必须在adb 后面添加-s
例如:adb -s 13b6e4c4 shell input tap 400 400
表示对13b6e4c4这台Android手机进行在屏幕上(400,400)坐标位置进行模拟的点击事件。

24.能看到设备信息就代表设备已经连接成功了,接下来的命令就是adb install 路径+包名.apk
例如我的安装包放在桌面,那么命令就是adb install C:\Users\hyh\Desktop\XXX.apk
* adb shell uiautomator dump /mnt/sdcard/window_dump.xml 获得手机当前界面的UI信息,生成window_dump.xml
* adb shell input text “123” 输入text
举例:
1、打开cmd,进入到当前文件夹中,输入命令 adb devices 查看当前与电脑连接的设备(前提是,手机打开usb调试模式),可以查看已连接成功的手机。
2、 若手机成功连接,输入命令 adb shell input tap 100 100 , 表示点击屏幕上坐标为(100,100)的点,如果不知道需要点击的点的具体位置的话可以在手机开发者模式中设置。

二. adb 模拟按键:

  1. 比如使用 adb shell input keyevent 命令,不同的 keycode 能实现不同的功能,完整的 keycode 列表详见 KeyEvent,摘引部分我觉得有意思的如下:

    Keycode含义
    3HOME 键
    4返回键
    5打开拨号应用
    6挂断电话
    24增加音量
    25降低音量
    26电源键
    27拍照(需要在相机应用里)
    64打开浏览器
    82菜单键
    85播放/暂停
    86停止播放
    87播放下一首
    88播放上一首
    122移动光标到行首或列表顶部
    123移动光标到行末或列表底部
    126恢复播放
    127暂停播放
    164静音
    176打开系统设置
    187切换应用
    207打开联系人
    208打开日历
    209打开音乐
    210打开计算器
    220降低屏幕亮度
    221提高屏幕亮度
    223系统休眠
    224点亮屏幕
    231打开语音助手
    276如果没有 wakelock 则让系统休眠
  2. input 命令的一些用法举例
    电源键
    命令:

    adb shell input keyevent 26

    执行效果相当于按电源键。

菜单键
命令:

adb shell input keyevent 82

HOME 键
命令:

adb shell input keyevent 3

返回键
命令

adb shell input keyevent 4

音量控制
增加音量:

adb shell input keyevent 24

降低音量:

adb shell input keyevent 25

静音:

adb shell input keyevent 164

媒体控制

播放/暂停:

adb shell input keyevent 85

停止播放:

adb shell input keyevent 86

播放下一首:

adb shell input keyevent 87

播放上一首:

adb shell input keyevent 88

恢复播放:

adb shell input keyevent 126

暂停播放:

adb shell input keyevent 127

点亮/熄灭屏幕

可以通过上文讲述过的模拟电源键来切换点亮和熄灭屏幕,但如果明确地想要点亮或者熄灭屏幕,那可以使用如下方法。

点亮屏幕:

adb shell input keyevent 224

熄灭屏幕:

adb shell input keyevent 223

三、使用python脚本自动运行cmd 命令

1.在adb文件夹下建立一个python文件

import os
os.system('adb shell input tap 100 100');

运行脚本,发现与在命令行输入相同语句有同样的效果。

2、也可以使用subprocess.Popen,最简单使用方式如下,设置shell=True,就不会弹出cmd框

process = subprocess.Popen('adb shell input tap 14 1402',shell=True)

程序实例:

#coding:utf-8
#程序功能:可以实现抖音个人页面视频的自动点击,从而自动增加访问量
#思路:抖音主页中两个视频切换点击,可以实现访问量的增加
#使用ADB程序,视频的屏幕坐标可以使用adb shell uiautomator dump命令,获取该页面xml源码后查得
#下述是小米MIX2抖音主页第一个视频和第二个视频的坐标位置
#缺点:运行时不能移动屏幕,后续可以采用获取模块ID号的方式去点击相应的位置
import time
import subprocess
i = 0
#每次操作的间隔时间取决于手机配置,配置越高时间越短
sleep_time = 0.5
while 1:
     #用popen设置shell=True不会弹出cmd框
     process = subprocess.Popen('adb shell input tap 14 1402',shell=True)
     time.sleep(sleep_time)
     process = subprocess.Popen('adb shell input keyevent KEYCODE_BACK', shell=True)
     time.sleep(sleep_time)
     process = subprocess.Popen('adb shell input tap 375 1402', shell=True)
     time.sleep(sleep_time)
     process = subprocess.Popen('adb shell input keyevent KEYCODE_BACK', shell=True)
     time.sleep(sleep_time)
     #os.system('adb shell input tap 14 1402')
     #os.system('adb shell input keyevent KEYCODE_BACK')
     #os.system('adb shell input tap 375 1402')
     i+=1
     print str(i) + 'clicks have been completed'

实现原理

Hierarchy Viewer:获得当前手机实时的UI信息,方便用于手机的自动化测试;

python中的subprocess.Popen() 或 Python os模块:调用系统命令;

uiautomator工具:获取界面控件信息;

adb命令:对手机进行操作;

原文出处: Python脚本利用adb进行手机控制的方法

0

评论 (0)

取消