一篇清晰易懂的Python操控手机APP攻略!

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: 一篇清晰易懂的Python操控手机APP攻略!

最近经常看到许多公号在推一些Python操作手机App自动化的文章,例如自动刷抖音、玩钓鱼之类的。而这些Android自动化项目无一例外都需要部署ADB环境。至于什么是ADB,网上很容易可以检索一堆介绍(包括在我即将上市的新书中也会单独有一小节介绍ADB原理和常用操作),如果正在文的你,是自动化新手,对ADB还不了解。



不妨可以先通过官方的介绍,了解一下ADB是什么,这里我就不过多介绍了。


https://developer.android.google.cn/studio/command-line/adb


为了使没有安卓开发经验的人也能快速学会用Python操作手机App,我从Android SDK部署、ADB基础应用、Python操作手机等方面入手写了这篇文章,当然也不会写的太详细,重点还是使大家对ADB的使用有一个直观的认识,这样大家在玩Android App自动化项目时也会更轻松一些。


PS: 本文涉及的各类操作可能有多种实现方法,我只会提及其中一种,而且采取的方法可能并不是最优的方法。

1. Android SDK下载和配置


说起Android SDK工具,那还真是不少,有SDK Tools、SDK、Platform-tools等等,这里我推荐SDK Tools,进入https://www.androiddevtools.cn/这个网站点击Android SDK工具菜单,找到下图中的界面,选择自己对应的系统版本(zip版)下载。(比如此处我的是使用Mac版)

微信图片_20220524102352.png


将下载后的文件解压缩,如下图所示。


微信图片_20220524102422.png

接着就是配置环境变量了,把android-sdk目录下的platform-tools和tools文件夹添加到系统变量中,这一步属于常规操作,我就不再演示了。


执行完以上步骤,ADB环境就算配置完毕了,之后如果手机是通过USB连接电脑的,需要先开启手机的开发者选项、开启USB调试、然后用USB线将手机跟电脑连接。当然,也可以通过WIFI连接。


ADB WIFI连接方法:

  • 手机与电脑用数据线连接,打开命令行窗口,执行:

adb tcpid 5555
  • 断开数据线连接,执行:

adb connect xxx.xxx.xxx.xxx(手机ip)


PS: 至于如何查看手机IP,我相信我公号读者都知道的,就不再介绍了。


本文以夜神模拟器作为被操作设备,启动夜神模拟器后,如下所示。

微信图片_20220524102453.png

输入adb devices查看设备列表。如果提示类似这种的错误信息:


adb server version (36) doesn't match this client (40); killing...,


说明当前adb server与adb client版本不匹配所致。解决方法也很简单:统一adb版本号即可,如将sdk下面的adb拷贝一份到夜神模拟器相应的目录下。

微信图片_20220524102521.png


解决上述问题后,重新获取设备列表。

➜  adb devices
List of devices attached
127.0.0.1:62001  device


2. ADB的一些基本操作

虽说是基本操作,但ADB的命令也还是挺多的,说多了大家一时也难以消化。所以我这里只列举几个操作手机APP常用的指令,都是一些基本的操作。


1).显示所有包名


adb shell pm list packages

这个指令会罗列出手机已经安装的所有应用包的名称,如果后缀加上参数-s,则会列出所有的系统应用的名称,而加上后缀参数-3则会列出所有第三方应用名称,如下:

➜ adb shell pm list package -3
package:io.appium.settings
package:com.example.android.contactmanager
package:com.kugou.android




2).显示活动程序


adb shell dumpsys activity activities

这个指令能够获取到当前手机系统中正在运行的程序包的名称,例如打开模拟器中已安装的酷狗音乐App,运行上述指令就会获取到下述信息:

➜  ~ adb shell dumpsys activity activities
    Running activities (most recent first):
      TaskRecord{4a9fe700 #2 A=android.task.kugou U=0 sz=1}
        Run #0: ActivityRecord{4a96e0c8 u0 com.kugou.android/.app.MediaActivity t2}
    mResumedActivity: ActivityRecord{4a96e0c8 u0 com.kugou.android/.app.MediaActivity t2}
    mLastPausedActivity: ActivityRecord{4a921424 u0 com.kugou.android/.app.splash.SplashActivity t2 f}
  mFocusedActivity: ActivityRecord{4a96e0c8 u0 com.kugou.android/.app.MediaActivity t2}
  mDismissKeyguardOnNextActivity=false
  mFocusedStack=ActivityStack{4a9e1488 stackId=1, 1 tasks} mStackState=STACK_STATE_HOME_IN_BACK
  Recent tasks:
  * Recent #0: TaskRecord{4a9fe700 #2 A=android.task.kugou U=0 sz=1}
    numActivities=1 rootWasReset=true userId=0 mTaskType=0 numFullscreen=1 mOnTopOfHome=true
    affinity=android.task.kugou
    intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.kugou.android/.app.splash.SplashActivity}
    realActivity=com.kugou.android/.app.splash.SplashActivity
    Activities=[ActivityRecord{4a96e0c8 u0 com.kugou.android/.app.MediaActivity t2}]
    askedCompatMode=false
    lastThumbnail=null lastDescription=null
    lastActiveTime=446142 (inactive for 13s)


上述信息被删除了一部分,其中realActivity后面的参数就是当前正在运行的Activity名称,稍微留意一下就会发现,这个名称相比上面的包名称要更加详细一些,实际在获取当前运行活动的App包名和Activity名方法还有很多种,比如:


adb shell dumpsys activity | grep mFocusedActivity

至于这个名称有什么用,我们马上就会提到。


3).启动应用程序


adb shell am start -n 要启动的应用Activity名称

这里所使用的Activity名称就是刚才获取到的realActivity后面的参数,使用这个指令时要注意,启动APP一定要使用上一条命令获取到的Activity名称,不能使用adb shell pm list packages命令获取到的包名称。例如,我们如果要启动酷狗音乐,可以使用命令:


adb shell am start -n com.kugou.android/.app.splash.SplashActivity


如无意外,执行上述命令后,你会听到“Hello 酷狗” 熟悉的声音。


而如果使用了下面这条命令是无法顺利启动应用的:


adb shell am start -n com.kugou.android



4).停止应用程序


adb shell am force-stop 要停止的应用名称


这条指令会强制停止指定的应用程序,跟程序的启动略有差别,在停止应用时,使用adb shell pm list packages命令获取到的包名称就可以了。还是以小米的游戏中心为例,停止应用使用以下指令:


adb shell am force-stop com.kugou.android


5).点击指定位置


adb shell input tap x y

这条指令就很好理解了,模拟点击手机屏幕中的某个位置,(x,y)是对应的位置坐标。在ADB中默认手机屏幕的左上角坐标是(0,0),右下角坐标是(x-max,y-max)。


6).滑动手机屏幕


adb shell input swipe x_start y_start x_end y_end

这条指令的本质是使得坐标为(x_start, y_start)的点移动到(x_end, y_end)的坐标位置,以此来实现屏幕滑动的效果。


7).输入文字信息



adb shell input text 需要输入的字符

这条指令没什么好说明的,选定对应位置,然后输入对应的字符即可。


8).模拟手机按键



adb shell input keyevent code

现在的大部分手机除了常规键盘字符以外还有一些特殊按键,例如HOME键、音量+/-,以及软键盘中有时会出现的确认键等等,这些按键的模拟就可以通过上面这条指令来实现。

其中code对应的是特殊键的编号,下面举几个常用的例子(其他的特殊键还有很多):

  • 3对应的是HOME键
  • 24对应的是音量+
  • 25对应的是音量-
  • 66对应的是确认键
  • 4对应返回键
  • 26对应电源键
  • 84对应搜索键


KeyEvent官方文档可见:


https://developer.android.google.cn/reference/android/view/KeyEvent



9).获取元素位置

细心的朋友现在可能会发现,上面提到的一些关于模拟点击、模拟输入的命令,都涉及到手机元素定位的问题,那么我们在实践中如何确定具体的坐标位置和元素信息呢?如果是Android端,这里一般建议使用uiautomatorviewer这个工具,它会随着SDK Tools一起安装,就在tools目录下。

来看下面这幅图,手机连接成功后,点击左上角的绿色图标就会获取到手机的当前页面信息,然后在屏幕左侧可以点选任意位置或者元素,相关信息会在右侧屏幕中显示。

微信图片_20220524102739.png

是不是感觉跟用chrome分析网页非常类似,有了这些信息,再使用上面提到的几款指令操作手机就不是问题了。


如果上述命令你觉得介绍的还不够多,不妨继续看看ADB官方文档介绍。


https://developer.android.google.cn/studio/command-line/adb?hl=zh_cn

3. Python操作手机App


通常来讲,如果我们单纯想通过ADB命令来操控手机,一般建议借助Python脚本使其批量化、自动化运行。

Python执行终端指令可以借助os.system()函数,我们来看下面这段代码:

```python
def execute(cmd):
  adb_str="adb shell {}".format(cmd)
  print(adb_str)
  os.system(adb_str)
if __name__ == '__main__':
  execute("am start -n com.kugou.android/.app.splash.SplashActivity")
  time.sleep(3)
  execute("input tap 263 515")
  ```


当然上面这段代码实际上并没有任何意义,主要是为了给大家简单演示一下。

4. 最后


今天的文章讲到的都是ADB的入门级操作,可能有一些自动化基础的人会说,我平常都不屑直接用ADB这种小命令,如果需要实现自动化,都是直接搬出像Appium、Airtest这类型的框架。


但其实在Android系,任何的第三方开源或商业自动化框架,本质上在驱动连接手机这块,都离不开ADB。而如果不懂ADB很多跟安卓App相关的实践更没办法实现下去,但是仅仅学会这些还不足以实现一个像样的自动化控制脚本,想要学习更牛逼的操作。

相关实践学习
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
18天前
|
JSON 监控 数据格式
1688 item_search_app 关键字搜索商品接口深度分析及 Python 实现
1688开放平台item_search_app接口专为移动端优化,支持关键词搜索、多维度筛选与排序,可获取商品详情及供应商信息,适用于货源采集、价格监控与竞品分析,助力采购决策。
|
1月前
|
缓存 监控 Android开发
京东 item_get_app 接口深度分析及 Python 实现
京东item_get_app接口可获取商品原始详情数据,包含更丰富的字段和细节,适用于电商分析、价格追踪等场景。需通过认证获取权限,支持字段筛选和区域化数据查询。
|
2月前
|
缓存 数据挖掘 API
淘宝 item_get_app 接口深度分析及 Python 实现
淘宝item_get_app接口是淘宝开放平台提供的移动端商品详情数据获取接口,相较PC端更贴近APP展示效果,支持获取APP专属价格、促销活动及详情页结构,适用于电商导购、比价工具、数据分析等场景。接口采用appkey+appsecret+session认证机制,需申请相应权限。本文提供Python调用示例及使用注意事项,帮助开发者高效对接移动端商品数据。
|
4月前
|
Java
照片一键生成眨眼视频app,手机照片一键生成眨眼动图,通过JAR代码实现效果
这是一个自动生成眨眼GIF动画的Java程序,包含主程序处理、图像变形和GIF生成三个模块。输入照片路径,自动识别人脸眼睛位置,生成闭眼、半闭眼等多帧图像,并合成为眨眼动效GIF文件。
|
28天前
|
缓存 供应链 开发者
1688 item_get_app 接口深度分析及 Python 实现
1688平台item_get_app接口专为移动端设计,提供商品原始详情数据,包含批发价格、起订量、供应商信息等B2B特有字段,适用于采购决策、供应链分析等场景。接口需通过appkey+access_token认证,并支持字段筛选,返回结构化数据,助力企业实现智能采购与供应商评估。
|
2月前
|
数据采集 数据可视化 API
驱动业务决策:基于Python的App用户行为分析与可视化方案
驱动业务决策:基于Python的App用户行为分析与可视化方案
|
5月前
|
数据采集 Web App开发 JavaScript
基于Selenium的Python爬虫抓取动态App图片
基于Selenium的Python爬虫抓取动态App图片
350 68
|
3月前
|
API 数据安全/隐私保护 开发者
企业微信自动加好友软件,导入手机号批量添加微信好友,python版本源码分享
代码展示了企业微信官方API的合规使用方式,包括获取access_token、查询部门列表和创建用户等功能
|
3月前
|
存储 API 数据库
自动发短信的软件,批量自动群发短信,手机号电话号生成器【python框架】
这个短信群发系统包含以下核心功能: 随机手机号生成器(支持中国号码) 批量短信发送功能(使用Twilio API)
|
3月前
|
API 数据安全/隐私保护 Python
批量发短信的软件,自动群发短信批量工具,手机号电话生成脚本插件【python】
该工具包含三个核心模块:短信发送核心功能、配置管理系统和命令行界面。使用时需先配置API密钥和短信模板

热门文章

最新文章

推荐镜像

更多