首先先来简单科普一下adb
:
adb工具即Android Debug Bridge(安卓调试桥) tools。它就是一个命令行窗口,用于通过电脑端与模拟器或者真实设备交互。在某些特殊的情况下进入不了系统,adb
就派上用场啦!
好,科普完就不说废话了,直接进入主题,先简单介绍一下,我们要用adb
来实现什么功能:
- 自动打开若干个
app
并按照一定规则进行切换app
- 进入app后自动点击列表内容跳转到详情页,进行自动浏览。
(好,有点想法的人可能知道我要干嘛了,对,现在不是流行用脚本跑新闻阅读赚金币嘛,咱就用python
和adb
来实现一下。[PS:本文章仅作为技术调研使用])
那么问题来了,要做到这几点功能,我们需要adb
来执行那些操作,先大体总结一下:
- 需要使用
adb
查找出不同app
的包名以及启动页、主页面、文章详情页、视频详情页- 需要
adb
获取到手机当前的window,以用来纠正异常中断或跳转失败adb
点击桌面具体坐标adb
滚动桌面adb
打开appadb
退出app
Ok,一个一个来解决
本文章举例暂时采用趣头条
这个巨头,所以,下面输出的一些内容,就直接是它
1. 用adb
查找出包名以及页面对应的activity名
adb shell dumpsys window windows |grep 'Current'
好,执行这条语句,我们会得到一个反馈:
mCurrentFocus=Window{fd5d7fe u0 com.jifen.qukan/com.jifen.qkbase.main.MainActivity}
这里面即有包名,又包含了当前页面所对应的activity
。但请你注意,这个activity并不一定是第五步所需要的activity
名字。但是我们依然可以用这个方法获取到文章页面的activity
名字(随机从列表中点开一篇文章,再继续执行上面的adb
命令) :
mCurrentFocus=Window{16a0f38 u0 com.jifen.qukan/com.jifen.qukan.content.newsdetail.news.NewsDetailNewActivity}
okay, 这些信息便是我们跑程序的前提。所以,在这一步其实已经学习到了第二步需要执行的命令,我们直接来到第三步。
3. adb
点击桌面具体坐标
命令如下:
adb shell input tap 200 700
200 700代表x和y的坐标。
4. adb
滚动桌面
命令如下:
adb shell input swipe 200 650 200 400 100
200 650
代表开始的x,y坐标
200 400
代表结束的x,y坐标
100
代表滑动所需要的时间(毫秒)
5. adb
打开app
命令如下:
adb shell am start -n com.jifen.qukan/com.jifen.qkbase.main.MainActivity
com.jifen.qukan/com.jifen.qkbase.main.MainActivity
为需要打开的页面。
(PS:这里是巧合,开始页面与主面板为一个activity
,在很多其他的app中,是不一样的,这里请知晓)
6. adb
退出app
命令如下:
adb shell input keyevent 4
其实就是模拟点击手机的返回键。连续模拟,就可以强行退出app了,当然有的app很邪门,会采用弹窗的方式,让你确认,那种先忽略,我们就玩最传统最简单的。
好,到了这一步,基本的准备工作就已经完成,接下来就是代码的书写,我们采用python
来调用本地adb
命令,千万不要紧张,这里非常简单,简单到,只需要一个python文件就可以了,所以,你只需要在你的机器上安装python环境,并且可以执行.py文件就算你赢了。
主要执行代码请看下一篇*: 你以为adb只可以用来调试么?看python+adb可以做到什么:2