用python控制您的安卓手机

简介: 用python控制您的安卓手机

image.png介绍

不久前,我在思考如何通过向好友发送几分钟的垃圾邮件来惹恼我的朋友,而在做一些研究的过程中,我遇到了Android调试桥。在本快速指南中,我将向您展示如何使用Python与之交互以及如何创建2个快速脚本。


ADB(Android调试桥)是一个命令行工具(CLI),可用于控制Android设备并与之通信。您可以执行许多操作,例如安装应用程序,调试应用程序,查找隐藏的功能并使用外壳程序直接与设备连接。要启用ADB,您的设备必须首先解锁开发者选项并启用USB调试。要解锁开发人员选项,您可以转到设备设置,然后向下滚动到“关于”部分,找到设备上当前软件的内部版本号。单击内部版本号 7次,将启用开发人员选项。然后,您可以转到设置中的“开发人员选项”面板,然后从那里启用USB调试。现在,您唯一需要做的另一件事就是将设备连接到计算机的USB电缆。


这是今天的旅程:


  1. 安装要求
  2. 入门
  3. 编写脚本的基础
  4. 创建自拍计时器
  5. 创建定义搜索器

安装要求

我们需要安装的两件事中的第一件事是计算机上的ADB工具。它会自动与Android Studio捆绑在一起,因此,如果您已经拥有了,那就不用担心了。否则,您可以转到[官方文档](https://developer.android.com/studio/command-line/adb),并且在页面顶部应有有关如何安装它的说明。


安装ADB工具后,您需要获取python库,我们将使用该库与ADB和我们的设备进行接口。您可以使用pip install pure-python-adb安装pure-python-adb库。


可选:为使我们在开发脚本时更轻松,我们可以安装一个名为scrcpy的开源程序,该程序允许我们使用鼠标和键盘在我们的计算机上显示和控制我们的android设备。要安装它,您可以转到[Github repo](https://github.com/Genymobile/scrcpy)并下载适用于您的操作系统(Windows,macOS或Linux)的正确版本。如果您使用的是Windows,则将zip文件解压缩到一个目录中,然后将此目录添加到您的路径中。这样一来,我们只需在终端窗口中键入scrcpy即可从系统上的任何位置访问该程序。


入门

现在已经安装了所有依赖项,我们可以启动ADB并连接设备。首先,使用USB电缆将设备连接到PC,如果启用了USB调试,则会弹出一条消息,询问PC是否可以控制设备,只需回答是。然后在您的PC上,打开一个终端窗口,并通过键入adb start-server来启动ADB服务器。这应该打印出以下消息:


  • daemon not running; starting now at tcp:5037
  • daemon started successfully

如果您还安装了scrcpy,则可以通过在终端中键入**scrcpy来启动它。但是,这仅在将其添加到路径时才有效,否则可以通过将终端目录更改为安装scrcpy的目录并键入scrcpy.exe**来打开可执行文件。希望一切顺利,您应该能够在PC上看到您的设备,并能够使用鼠标和键盘对其进行控制。


现在,我们可以创建一个新的python文件,并检查是否可以使用该库找到连接的设备:


rom ppadb.client import Client as AdbClient
if __name__ == '__main__':
    client = AdbClient(host="127.0.0.1", port=5037) # Default is "127.0.0.1" and 5037
    devices = client.devices()
    if len(devices) == 0:
        print('No devices')
        quit()
    device = devices[0]
    print(f'Connected to {device}')


在这里,我们导入AdbClient类并使用它创建一个客户端对象。然后,我们可以获得连接的设备的列表。最后,我们从列表中获得第一台设备(如果仅连接了一个设备,则通常是唯一的设备)。


编写脚本的基础

我们要与设备连接的主要方式是使用外壳,通过这种方式,我们可以发送命令以模拟特定位置的触摸或从A滑动到B。要模拟屏幕触摸(轻击),我们首先需要工作了解屏幕坐标的工作方式。为了帮助解决这些问题,我们可以在开发人员选项中激活指针位置设置。激活后,无论您在屏幕上的何处触摸,都可以看到该点的坐标显示在顶部。坐标系的工作方式如下:

20210511134808619.png



该图显示了坐标系的工作方式


显示屏的左上角分别具有* x 和 y 坐标(0,0),并且右下角的坐标是 x 和 y *的最大可能值。


现在我们知道了坐标系的工作原理,我们需要检查一下可以运行的不同命令。我在下面列出了命令列表以及如何使用它们,以供快速参考:

Input tap x y
Input text “hello world!”
Input keyevent eventID
Here is a list of some common eventID’s:
3: home button
4: back button
5: call
6: end call
24: volume up
25: volume down
26: turn device on or off
27: open camera
64: open browser
66: enter
67: backspace
207: contacts
220: brightness down
221: brightness up
277: cut
278: copy
279: paste

如果您想找到更多,请在这里找到一长串清单。https://forum.xda-developers.com/t/q-adb-input-keyevent-for-long-press-on-power- button.2063741 / post-64890206。


创建自拍计时器

现在我们知道我们能做什么,让我们开始吧。在第一个示例中,我将向您展示如何创建一个快速的自拍计时器。首先,我们需要导入我们的库并创建一个connect函数以连接到我们的设备:

import time
from ppadb.client import Client as AdbClient
def connect():
    client = AdbClient(host="127.0.0.1", port=5037) # Default is "127.0.0.1" and 5037
    devices = client.devices()
    if len(devices) == 0:
        print('No devices')
        quit()
    device = devices[0]
    print(f'Connected to {device}')
    return device, client

您可以看到connect函数与前面的如何连接到设备的示例相同,除了这里我们返回设备和客户端对象以供以后使用。

if __name__ == '__main__':
    device, client = connect()
    # open up camera app
    device.shell('input keyevent 27')
    # wait 5 seconds
    time.sleep(5)
    # take a photo with volume up
    device.shell('input keyevent 24')
    print('Taken a photo!')

在我们的主代码中,我们可以调用connect函数来检索设备和客户端对象。从那里我们可以打开相机应用程序,等待5秒钟并拍照。真的就是这么简单!正如我之前说过的,这只是复制您通常会做的事情,因此,如果您首先手动进行操作并写下步骤,则思考如何做事情是最好的。


创建定义搜索器

现在,我们可以做一些更复杂的事情,那就是要求浏览器找到特定单词的定义,并截图以将其保存在我们的计算机上。


该程序的基本流程如下:


  1. 打开浏览器
  2. 单击搜索栏
  3. 输入搜索查询
  4. 等待几秒钟5
  5. 截图并保存

但是,在我们开始之前,您需要在默认浏览器中找到搜索栏的坐标,您可以使用我之前建议的方法轻松地找到它们。对我来说,他们是(440,200)。


首先,我们将必须导入与以前相同的库,并且我们还将具有相同的connect方法。

import time
from ppadb.client import Client as AdbClient
def connect():
    client = AdbClient(host="127.0.0.1", port=5037) # Default is "127.0.0.1" and 5037
    devices = client.devices()
    if len(devices) == 0:
        print('No devices')
        quit()
    device = devices[0]
    print(f'Connected to {device}')
    return device, client

在我们的主要函数中,我们可以调用connect函数,并为我们的搜索栏的* x 和 y *坐标分配一个变量。注意这是一个字符串,而不是列表或元组,这样我们可以轻松地将坐标合并到我们的shell命令中。我们还可以从用户那里获取输入信息,以查看他们想要获取哪个单词的定义:

if __name__ == '__main__':
    device, client = connect()
    search_bar = '440 200' # x y
    query = input('What word do you want to find the definition of: ')
    search_query = f'what is the definition of {query}'

我们会将查询添加到完整的句子中,然后对其进行搜索,这样我们就可以始终获取定义。之后,我们可以打开浏览器,然后将搜索查询输入到搜索栏中,如下所示:

device.shell('input keyevent 64')
time.sleep(0.25) # wait for browser to load
device.shell(f'input tap {search_bar}')
device.shell(f'input text "{search_query}"') # make sure you have the quotation marks around your text
device.shell('input keyevent 66')
time.sleep(3) # wait for results to load

在这里,我们使用eventID 66模拟输入键的按下以执行搜索。如果需要,可以根据需要更改等待时间。


最后,我们将在设备对象上使用screencap方法获取屏幕截图,然后可以将其另存为* .png *文件:


screenshot = device.screencap()
with open('result.png', 'wb') as f: # save the screenshot as result.png
    f.write(screenshot)
    print('Saved screenshot!')

在这里,我们必须以写字节模式打开文件,因为screencap方法返回表示图像的字节。


如果一切都按计划进行,则应该有一个快速脚本来搜索特定单词。这在我的手机上正常工作:

20210511134833164.png


最后的想法

希望您今天学到了一些新知识,在我对此进行研究之前,我个人甚至都不知道这是一回事。很酷的事情是,您可以执行平常可以做的任何事情,而且还可以做更多的事,因为它只是模拟您自己的触摸和动作!


希望您喜欢这篇文章,并感谢您的阅读! 💖


相关实践学习
使用CLup和iSCSI共享盘快速体验PolarDB for PostgtreSQL
在Clup云管控平台中快速体验创建与管理在iSCSI共享盘上的PolarDB for PostgtreSQL。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
3月前
|
监控 安全 Android开发
【新手必读】Airtest测试Android手机常见的设置问题
【新手必读】Airtest测试Android手机常见的设置问题
|
3月前
|
机器学习/深度学习 人工智能 Android开发
安卓智能手机操作系统演化史
【2月更文挑战第5天】 本文通过对安卓智能手机操作系统的演化历程进行探讨,分析了安卓系统从诞生至今的发展脉络和关键技术革新,从最初的版本到如今的最新版本,探讨了其在移动互联网时代的重要作用,以及未来可能的发展方向。
|
4月前
|
JavaScript Android开发
手机也能搭建个人博客?安卓Termux+Hexo搭建属于你自己的博客网站
手机也能搭建个人博客?安卓Termux+Hexo搭建属于你自己的博客网站
37 0
|
27天前
|
网络协议 安全 Linux
如何使用Android手机通过JuiceSSH远程访问本地Linux服务器
如何使用Android手机通过JuiceSSH远程访问本地Linux服务器
|
1月前
|
Android开发
安卓远离手机app
远离手机是专门为防止年轻人上瘾而打造的生活管理类的软件,适度用手机,保护眼睛,节约时间。
11 0
安卓远离手机app
|
1月前
|
存储 数据库 Android开发
Android实现手机内存存储功能
Android实现手机内存存储功能
27 2
|
2月前
|
数据采集 数据挖掘 开发者
手机使用Python轻松下载闲鱼短视频
手机使用Python轻松下载闲鱼短视频
33 0
手机使用Python轻松下载闲鱼短视频
|
2月前
|
Web App开发 前端开发 网络安全
前端分析工具之 Charles 录制 Android/IOS 手机的 https 应用
【2月更文挑战第21天】前端分析工具之 Charles 录制 Android/IOS 手机的 https 应用
61 1
前端分析工具之 Charles 录制 Android/IOS 手机的 https 应用
|
2月前
|
网络协议 关系型数据库 MySQL
安卓手机termux上安装MariaDB数据库并实现公网环境下的远程连接
安卓手机termux上安装MariaDB数据库并实现公网环境下的远程连接
|
2月前
|
JavaScript Android开发
手机也能轻松搭建个人博客,使用安卓Termux+Hexo建立自己的网站
手机也能轻松搭建个人博客,使用安卓Termux+Hexo建立自己的网站