Python调用adb shell

2023-05-16

在Android开发中,ADB(Android Debug Bridge)是一个非常重要的工具。它可以让我们通过命令行或者其他的客户端与安装了ADB驱动的Android设备进行通信,并进行一些调试操作。

Python作为一门灵活强大的语言,很自然就成为了用来控制ADB的工具之一。本文将介绍如何使用Python调用ADB shell,在外部程序中控制Android设备。

  1. 安装ADB

首先需要在电脑上安装ADB。可以在终端执行以下命令来检查是否已经安装:

adb version

如果未找到该命令,请按照以下步骤来安装:

下载适用于您计算机操作系统的最新版 ADK 工具包并提取其内容。

启动 Android Studio 并打开 SDK 管理器:

确保打开“SDK 工具”选项卡,并选择“Android SDK Platform-tools”复选框。接下来单击“OK”按钮以下载和安装所选项目及其依赖项。

在完成设置后,请添加 adb 所在目录至 PATH 环境变量中。这样做可以让您从任意位置运行 adb 命令。

  1. 检查设备连接状态

在使用Python调用adb shell之前,必须先检查Android设备是否正确地连接到计算机上。可以通过执行以下adb命令来检查当前设备列表:

adb devices

如果设备已经与电脑连接,则会列出所有相关信息。

  1. 通过subprocess模块执行adb命令

Python的subprocess模块是一个非常有用而且方便操作外部进程和应用程序的库。我们可以使用它来执行各种各样的系统调用,包括运行adb命令。

下面是一个简单示例,展示如何利用subprocess模块在Python中执行adb shell命令:

import subprocess

output = subprocess.getoutput(‘adb shell’)

print(output)

这段代码会输出类似于下面这样的东西(不包含单引号):

‘mobile:/$’

这个输出表示你正处于一个虚拟移动平台shell环境里,而’$'则代表着这里是提示符。

注意:要想成功地连通 Python 和直接面向移动平台输入指令并接受响应时完全一致,我们需要注意标准输入流、标准输出流以及标准错误流之间关系和传输要求等问题。例如,在获取返回结果之前应该先阻塞等待读取语句结束信号等,以免造成数据混乱和无效API操作。

  1. 使用Python adb库

除了使用subprocess模块之外,还可以使用Python adb库。它是一个功能丰富而又易于使用的ADB工具,提供了对设备和模拟器的高级控制。可以直接在PyPI上安装此库:

pip install adb

调用adb库需要先连接到设备,并获取设备对象,在利用该类的send_command()方法发送指令即可实现运行AT指令等复杂SDK开发。

以下是一个简单示例程序:

import adb
a = adb.ADB()
a.command(“devices”)

  1. 控制Android设备输入输出

PyAutoGUI 是 Python 的第三方自动化框架,支持跨平台。它使得通过编写 Python 脚本能够自动地模拟鼠标和键盘操作、截屏、图像处理等功能。当然,这个库也支持 Android 设备操作。

首先需要在Android设备上安装 PyAutoGUI 的应用程序:https://github.com/asweigart/pyautogui-android/releases

下载 apk 文件并安装到您的 Android 设备中即可。打开应用之后,请允许它访问“无障碍”权限,以便能够更好地监视并控制其他应用程序。

下面是一个简单示例程序,展示如何使用 PyAutoGUI 在Android设备上控制输入输出:

import pyautogui as gui
import time

gui.click(500, 250)
time.sleep(1)
gui.typewrite(‘Hello, world!’)

以上代码会在Android设备的(500, 250)位置点击屏幕并输入 ‘Hello, world!’。

  1. 实现基础自动化测试

在实际项目中,经常会需要进行一些基础的自动化测试,例如检查某个页面是否正常进行渲染或者检查某个按钮是否能正常响应点击事件。这时候就可以结合以上介绍的内容来实现自动化测试。

以下是一个简单示例程序:

import subprocess
import time
import pyautogui as gui

连接到Android设备

output = subprocess.getoutput(‘adb devices’)
if ‘device’ not in output:
print(’😦 Device not found’)
exit()

打开浏览器页面

subprocess.call([‘adb’, ‘shell’, ‘am’, ‘start’,
‘-a’, ‘android.intent.action.VIEW’,
‘-d’, ‘http://www.baidu.com’])
time.sleep(10)

定位搜索框并输入关键字

x,y = gui.locateCenterOnScreen(‘search_box.png’)
gui.moveTo(x,y,duration=0.2)
gui.click()
gui.typewrite(‘python’)
gui.press(‘enter’)

以上代码会连接至Android设备,并启动系统默认浏览器后前往百度搜索Python相关信息。

  1. 总结

Python调用ADB shell已经成为一种非常普遍而又必要的方式去控制Android平台其主要优势在于精简快速查询状态;批量时延低最为突出以及流程引导,并能与同一或不同语言项目结合起来协作处理完整团队容器健康状况考核评估然后交付给真实环境平台完成系统封装等大任务请求。

在日常开发过程中,在特定开发场景下区分原生移动端调试技巧和深度定位搜索策略都可以优良传递价值思想使得核心竞争力倍增同时促进全球分布式软件服务发挥出最长远影响力。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python调用adb shell 的相关文章

随机推荐

  • 中文分词:隐马尔可夫-维特比算法(HMM-Viterbi)附源码

    目录 0 先验知识 1 什么是中文分词 2 数据集的构造 3 训练及预测过程简述 4 训练阶段 xff1a 统计隐马尔可夫模型的参数 5 预测阶段 xff1a 应用 Viterbi 算法 6 完整的 Python 实现代码 0 先验知识 有
  • python学习day1

    打印字 print haha 注释符 单行注释符 xxx 多行注释符 xxx xxx 34 34 定义变量 a 61 10 定义数字 b 61 haha ni hao 定义字符串 print a print b 赋值 b 61 a 用户交互
  • 系统学习-----firewalld概述

    动态防火墙后台服务程序 xff1a 提供一个动态管理的防火墙 xff0c 用以支持网络 Zone xff0c 来分配对一个网络链接和界面一定程序的信息 xff0c 它具备对IPv4和Ipv6防火墙设置的支持 它支持以太网桥 xff0c 并有
  • 系统学习----DHCP服务原理

    文章目录 DHCPDHCP优点DHCP相关概念DHCP租约更新DHCP运行过程 DHCP DHCP xff1a 动态主机设置协议 xff0c 是一个局域网协议 xff0c 使用UDP协议工作 主要有两个用途 xff1a 用于局域网或网络服务
  • 区块链技术及应用---区块链技术(一)

    文章目录 第一章 疯狂的比特币及其原理机制1 1 比特币诞生1 2 疯狂的比特币1 2 1 疯狂的价格1 2 2 疯狂的矿机和芯片 1 3 通俗地讲比特币机制1 4比特币交易1 5 比特币挖矿1 5 1 数学难题1 5 2 矿池原理 1 6
  • OpenFlow协议是什么

    为什么学习OpenFlow xff1f 实践SDN的首选主流南向接口协议P4和PISA的前身 OpenFlow起源 Ethane项目是OpenFlow的前身 集中式 主动式 xff0c 基于Flow控制2008年的Open Flow论文最初
  • OpenDaylight(ODL)学习笔记

    什么是OpenDaylight xff1f OpenDaylight是SDN开发及运行的一个平台 OpenDaylight架构特点 基于OSGi的模块化设计多南向协议 OpenFlow xff0c Netconf xff0c OVSDB 模
  • Vue / axios / props 调用后端接口数据并渲染到页面

    情景介绍 给了一个可视化大屏的代码 xff0c 代码上写的是假数据 现在要调用后端接口获取数据 xff0c 并将其渲染到页面上 分析问题 给的代码是一个 vue 组件嵌套一个子组件 xff0c 要把数据渲染到子组件上 要调用后端接口 xff
  • Element-ui关于el-icon无法正常显示的问题(已解决)

    在使用element ui组件库的时候 xff0c 使用自带的图标不显示 xff0c 查了好多篇博客 xff0c 都说是element ui的版本老了 xff0c 在package json中修改版本重新安装就行 xff0c 但是我的情况不
  • el-dialog关闭后表单数据缓存没清空【已解决】

    情景介绍 系统中有 新增 和 修改 两个功能 xff0c 共用一个对话框 要求新增时对话框内容为空 xff0c 修改时内容默认填充旧数据 遇到的问题是 xff0c 点击新增后内容填充了 xff0c 关闭对话框再点击新增或者其他条目的修改 x
  • Vue中父组件向子组件传值,子组件没有接收到

    情景介绍 父组件调用接口获取数据 xff0c 然后通过props传值给子组件 xff0c 子组件拿到数据后渲染到 el table 表格组件中 结果子组件没有将数据渲染到表格中 xff0c 但是控制台打印是获取到数据的 问题分析 先看父组件
  • 数字通信系统的性能及可靠性

    目录 1 数字通信系统的性能 2 数字通信系统的可靠性 1 数字通信系统的性能 数字通信系统的性能由码元速率 信息速率 频带利用率表示 每个码元所携带的信息量I定义如下 xff1a 这里 P 是每个码元的概率 xff0c M 是码元的个数
  • 前端学习资源分享

    学习资源 编程导航 xff08 包含以下所有资源 xff0c 强烈推荐 x1f44d xff09 xff1a https www code nav cn freeCodecamp 在线编程 xff1a https learn freecod
  • 嵌入式方向分析

    很多计算机 电子信息类专业的学生都想把嵌入式开发作为自己的职业目标 xff0c 但是因为嵌入式涉及的知识太多 xff0c 太杂 xff0c 太广 xff0c 很多嵌入式初学者陷入嵌入式知识的海洋中 xff0c 东学一点 xff0c 西学一点
  • UWB-DW1000初始化、发送和接收详解(一)

    DWM1000简介 DWM1000板子上的DW1000芯片 xff0c 是基于CMOS的 低功耗的无线收发集成电路 xff0c 遵循IEEE 802 15 4 2011协议中的UWB标准芯片 DWM1000不需要用户去设计电路 xff0c
  • 云计算-弹性存储

    云盘 挂载到ECS上的磁盘 NAS 文件存储 OSS 对象存储 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img 1NMdcten 1653882562436 https files mdnice com user
  • computers & security投稿教程

    在computers amp security上投稿了一篇论文 xff0c 中间还是遇到一些不太懂的东西 xff0c 在此记录下来 1 首先打开官网 xff0c 链接 https www editorialmanager com cose
  • 【SDN测试题】

    SDN测试题 一 判断题 NFV与SDN的基础都是通用服务器 云计算以及虚拟化技术 正确答案 xff1a 对 安装OpenvSwitch时必须根据系统内核版本选择相应的Open vSwitch版本 正确答案 xff1a 对 执行命令ovs
  • 【阅读论文】基于VAE-LSTM混合模型的时间序列异常检测

    Anomaly Detection for Time Series Using VAE LSTM Hybrid Model CCFB Shuyu LinRonald ClarkRobert BirkeSandro Sch nbornNiki
  • Python调用adb shell

    在Android开发中 xff0c ADB xff08 Android Debug Bridge xff09 是一个非常重要的工具 它可以让我们通过命令行或者其他的客户端与安装了ADB驱动的Android设备进行通信 xff0c 并进行一些