adb叫做安卓调试桥 (Android Debug Bridge),是一种可以用来操作手机设备或模拟器的命令行工具。它在sdk/platform-tools 目录下。虽然现在 Android Studio 已经将大部分 ADB 命令以图形化的形式实现了,但是了解一下还是有必要的。它是用来管理模拟器或设备,采用C/S模式,主要包括三个部分:
A client 客户端Client运行在自己的电脑上,可以通过adb命令 adb start-server启动Client,也可以通过ADT或者DDMS创建Client。A daemon Daemon作为后台程序运行在手机或者模拟器上。server Server最为后台程序运行在自己的电脑上,用来管理Client和Daemon之间的信息交互在开发调试Android程序时我们需要通过adb工具在我们的手机和电脑之间建立连接,通常情况我们都是使用数据线,另外还可以使用wifi连接电脑。
首先,使用的手机要打开开发者模式,这个问题比较简单(根据需求搜一下就行),不同的手机有不同的打开方式,打开开发者模式后,在里面找到usb调试并启用它,我使用的小米手机,如果想要操作模拟输入input和模拟点击keyevent,还需要打开USB调试(安全设置)。
如果连接成功,输入adb devices后,会出现下面的内容:
List of devices attached 80QBCNP234K3 device其中 80QBCNP234K3 是设备序列号,device 是设备状态,设备的状态有三种:
offline —— 设备未连接到 adb 或者没有响应
device —— 设备已连接到 adb
no device —— 未连接模拟器 / 设备
如果出现以下情况,原因是当前用户组权限不够,需要将当前用户的权限进行修改,加入到plugdev组。
List of devices attached ???????????? no permissions也可以通过 lsusb 命令查看接入,系统的 usb 设备都有哪些。
使用wifi连接,需确保电脑和Android设备连接在同一个WIFI网络环境(同一个局域网下,进行通信)。
查看android设备的IP地址,这里有三种方式查看Android设备IP。
设置-关于手机-状态信息-IP地址中查看
设置-WLAN-点击当前链接上的Wi-Fi查看IP
例如:设置—〉无线或网络---〉WLAN设置—〉查看当前连接Wi-Fi的IP地址
通过adb命令查看设备IP地址:adb shell netcfg
前提:(设备已经和 PC 建立了 usb 连接)
查到 Android 设备的 IP 后,在 PC 端 ping 一下 IP 地址,如果成功显示,就可以进行下一步。
知道设备 IP 地址之后,就可以用 adb connect 命令通过 IP 和端口号连接 adb。
adb connect 192.168.43.5如果显示连接成功,则可继续执行后面的操作。如果不成功,可以使用 adb tcpip 模式重启 adb。
adb tcpip 5555adb connect ip 连接成功以后可以执行原来usb连接时的所有命令。
adb 命令可参考 adb 命令大全:https://blog.csdn.net/qq_36685813/article/details/102874284
这一行指令包含两部分操作:
adb shell:进入设备的Shell命令行;input swipe 1000 600 200 600:模拟屏幕滑动,从x=1000,y=600坐标处滑动到x=200,y=600坐标处。即从右向左滑 屏,也就是翻页的触摸操作;好了,理解了这行命令后,剩下的事情就好办多了。我们只需要间隔一段时间,循环执行这句话即可。即将下面两行命令放在循环中,循环的次数由书籍的未读页数决定。 time.sleep(random.uniform(rv_t1,rv_t2)) run('adb shell input swipe 1000 600 200 600', shell=True)为了尽量模拟人类阅读的真实性,这里的时间间隔是给定时间范围内的随机值。 最后,为了更方便地使用这个脚本,除了正序(即从右向左滑屏)外,还增加了倒序(即从左向右滑屏)和无尽模式(即正序结束后自动倒序,倒序结束后自动正序,循环往复)。连接上手机,启动APP,直接运行脚本就行,完整的Python脚本如下:
# encoding:utf-8 from subprocess import run import time import random import os def book(rv_sel, rv_page_num, rv_t1, rv_t2): rv_sel = int(rv_sel) if rv_sel == 1: print('程序运行中') for i in range(rv_page_num): time.sleep(random.uniform(rv_t1,rv_t2)) run('adb shell input swipe 1000 600 200 600', shell=True) n = i + 1 print('总计需翻阅 %d 页,已翻阅 %d 页,剩余 %d 页' % (rv_page_num, n, rv_page_num - n)) exit() elif rv_sel == 2: print('程序运行中') for i in range(rv_page_num): time.sleep(random.uniform(rv_t1,rv_t2)) run('adb shell input swipe 200 600 1000 600', shell=True) n = i + 1 print('总计需翻阅 %d 页,已翻阅 %d 页,剩余 %d 页' % (rv_page_num, n, rv_page_num - n)) exit() else: print() print('* ' * 8, '1.正循环-倒循环,无限循环', '* ' * 8) print('* ' * 8, '2.倒循环-正循环,无限循环', '* ' * 8) print() loop = int(input('请选择循环方式:')) print('程序运行中') if loop == 1: while 1: for i in range(rv_page_num): time.sleep(random.uniform(rv_t1,rv_t2)) run('adb shell input swipe 1000 600 200 600', shell=True) n = i + 1 print('总计需翻阅 %d 页,已翻阅 %d 页,剩余 %d 页' % (rv_page_num, n, rv_page_num - n)) for i in range(rv_page_num): time.sleep(random.uniform(rv_t1,rv_t2)) run('adb shell input swipe 200 600 1000 600', shell=True) n = i + 1 print('总计需翻阅 %d 页,已翻阅 %d 页,剩余 %d 页' % (rv_page_num, n, rv_page_num - n)) else: while 1: for i in range(rv_page_num): time.sleep(random.uniform(rv_t1,rv_t2)) run('adb shell input swipe 200 600 1000 600', shell=True) n = i + 1 print('总计需翻阅 %d 页,已翻阅 %d 页,剩余 %d 页' % (rv_page_num, n, rv_page_num - n)) for i in range(rv_page_num): time.sleep(random.uniform(rv_t1,rv_t2)) run('adb shell input swipe 1000 600 200 600', shell=True) n = i + 1 print('总计需翻阅 %d 页,已翻阅 %d 页,剩余 %d 页' % (rv_page_num, n, rv_page_num - n)) def rand_time(rv_xh): if int(rv_xh) == 1: return 10,20 else: while 1: t1 = int(input('请输入最小等待时间:')) t2 = int(input('请输入最大等待时间:')) if t2 >= t1: return t1,t2 break else: print('最小时间不得小于最大时间,请重新输入') print('* ' * 50,) print('请选择翻页间隔时间:') print('1.预设(10秒 - 20秒之间):') print('2.自定义(大于0):',) print('* ' * 50,) while 1: xh = input('请输入序号:') if xh == '': print('输入有误,请重新输入') elif xh in str([1,2]): t1,t2 = rand_time(xh) break else: print('输入有误,请重新输入') while 1: print() print('* ' * 8, '1.正序', '* ' * 8) print('* ' * 8, '2.倒序', '* ' * 8) print('* ' * 8, '3.无尽', '* ' * 8) print() sel = input('请选择翻书方式:') if sel in str([1,2,3]): page_num = int(input('请输入书籍总页数:')) book(sel,page_num,t1,t2) elif sel == '': print('输入错误') else: print('输入错误')