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 的相关文章

随机推荐

  • 【Linux中QT加载.so库与调用Python】

    Linux中QT添加 so库与Python库 一 如何导入 so库1 1 不同系统中 库名称各有不同1 2 Linux中的QT导入库方法 xff1a 二 调用Python2 1 添加Python库2 2 创建Python文件 引入头文件2
  • QT连接SQLServer并添加ODBC数据源

    QT连接SQLServer并添加ODBC数据源 一 创建数据源1 打开ODBC数据源2 创建数据源3 测试数据源 二 QT连接SQLServer1 连接代码2 测试成功样图 一 创建数据源 1 打开ODBC数据源 在搜索框中进行搜索ODBC
  • QT生成exe独立运行文件

    目录 一 封装QT独立运行的 exe文件好处1 1 xff1a 封装软件 xff1a Enigma Virtual Box 9 901 2 xff1a 下载链接 xff1a 阿里云盘 https www aliyundrive com s
  • 【1期 QT之控件的创建与使用】

    前言 QT一开始在1991年被奇趣公司研发 xff0c 创建的目的就是实现GUI图形界面开发与非GUI的开发 后来被诺基亚收购了 xff0c 维护至今 当然在诺基亚手里也是越发展越好 好了QT就介绍这么多了 我们直接上干货 xff1a 我将
  • 【2期 QT信号与槽函数&回调函数与函数指针】

    前言 信号与槽函 xff1a 一对多 多对一 多对多 类似于C 43 43 设计模式中的观察者模式 信号与槽函数不是C 43 43 标准代码 xff0c 是QT特有的 xff0c 最终通过moc meta Object Complier 进
  • 关于约瑟夫环问题的思考(数组做法)

    这几天做题时碰见了一个很有意思的问题 xff0c 也是一个十分经典问题 约瑟夫环问题 问题很简单 xff0c 就是有n个人围成一个圈 xff0c 每隔m个人就自杀一个 xff0c 直到剩下最后一个人为止 xff0c 问最后剩下的最后一个人是
  • Windows Powershell相关(历史命令、命令)

    Powershell取证 历史命令 xff1a win10 powershell的命令历史记录存储在 span class token operator span USERPROFILE span class token operator
  • 符合ASTM标准的雨流计数法及其不同的改进方法

    随着研究的深入 xff0c 人们发现采用时间序列计算载荷谱太麻烦了 xff0c 处理的工作量太大 xff0c 我们不需要将每个时刻点的载荷都做运算 xff0c 疲劳计算只需要提供幅值 均值和循环次数 xff0c 鉴于此发展出了很多不同的计数
  • 对载荷谱进行雨流计数的几个主要步骤(以四点雨流计数为例)

    对载荷谱进行雨流计数的几个主要步骤 xff08 以四点雨流计数为例 xff09 滤除小幅值 Hysteresis Filtering 峰谷滤波 Peak Valley Filtering 离散化 Discretization 四点法雨流计数
  • bigdecimal乘法_Java BigDecimal乘法()方法与示例

    bigdecimal乘法 BigDecimal类的multiple 方法 BigDecimal Class multiply method Syntax 句法 xff1a public BigDecimal multiply BigDeci
  • 侯捷老师C++学习笔记——大气编程(上)

    本课程要有一点点C或C 43 43 的基础 xff0c 学习效果会更好哦 侯捷老师讲的特别通透 xff0c 听完收获很大 Lesson1 简介 课程基础 xff1a 曾经学过某种面向过程的编程语言 procedural language 知
  • 侯捷老师C++学习笔记——大气编程(下)

    侯捷老师C 43 43 课程下半部分 本课程是对之前课程中所提的一些东西的补充 xff0c 以及C 43 43 11新特性的一些讲解 Lesson1 介绍 本课程会讲的内容 xff1a 泛型编程深入探索面向对象继承关系所形成的的对象模型 x
  • JS基础-22-HTTP和HTTPS协议

    HTTP与HTTPS 一 前言 xff1a 先来观察这两张图 xff0c 第一张访问域名http www 12306 cn xff0c 谷歌浏览器提示不安全链接 xff0c 第二张是https kyfw 12306 cn otn regis
  • Spring架构图

    1 xff0e 核心容器模块 核心容器提供Spring框架的基本功能 xff0c 包括Core Beans Context EL模块 Core模块封装了框架依赖的最底层部分 xff0c 包括资源访问 类型转换及一些常用工具类 Beans模块
  • Spring Boot 中的日志

    文章目录 一 日志的输出1 1 日志等级划分1 2 日志输出操作1 3 日志等级设置 二 日志的存储三 SpringBoot 中的日志框架四 lombok 原理 当一个项目报错以后 xff0c 如何快速的定位错误的原因 xff0c 找到解决
  • face_recognition人脸检测

    文章目录 原理一 效果预览二 实现过程 原理 face recognition是最简单的人脸识别库 xff0c 该模型的准确率为 99 38 代码仅需要三行 xff1a span class token keyword import spa
  • python自动化运维第一步-利用psutil模块获取服务器信息

    文章目录 1 简易版演示 2 不成熟版演示 初学python不久 xff0c 尝试使用python写一些简单脚本 1 简易版 shell居多 span class token keyword import span os total mem
  • 判断链表是否有环(Java)

    快慢指针 xff0c 如果有环 xff0c 两指针一定会相遇 注意 xff1a 空链表和一个元素的链表直接返回false 如果没环 xff0c 快指针一定会先到null xff0c 所以只需判断快指针是否为null 注意空指针异常 xff0
  • Nginx学习笔记06——Nginx反向代理

    正向代理和反向代理 正向代理 用户和外网不能互通 xff0c 通过代理服务器将用户请求发送给外网 反向代理 用户和nginx是互通的 xff0c 用户和应用服务器是不互通的 xff0c 用户发送请求到nginx xff0c nginx作为代
  • Python调用adb shell

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