你以为adb只可以用来调试么(看python+adb可以做到什么)

首先先来简单科普一下adb:
adb工具即Android Debug Bridge(安卓调试桥) tools。它就是一个命令行窗口,用于通过电脑端与模拟器或者真实设备交互。在某些特殊的情况下进入不了系统,adb就派上用场啦!
好,科普完就不说废话了,直接进入主题,先简单介绍一下,我们要用adb来实现什么功能:

  1. 自动打开若干个app并按照一定规则进行切换app
  2. 进入app后自动点击列表内容跳转到详情页,进行自动浏览。
(好,有点想法的人可能知道我要干嘛了,对,现在不是流行用脚本跑新闻阅读赚金币嘛,咱就用pythonadb来实现一下。[PS:本文章仅作为技术调研使用])
那么问题来了,要做到这几点功能,我们需要adb来执行那些操作,先大体总结一下:
  1. 需要使用adb查找出不同app的包名以及启动页、主页面、文章详情页、视频详情页
  2. 需要adb获取到手机当前的window,以用来纠正异常中断或跳转失败
  3. adb点击桌面具体坐标
  4. adb滚动桌面
  5. adb打开app
  6. adb退出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可以做到什么)】主要执行代码请看下一篇*: 你以为adb只可以用来调试么?看python+adb可以做到什么:2

    推荐阅读