尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

pure-python-adb 进阶功能:远程连接与端口转发(forward)完整攻略

pure-python-adb 进阶功能:远程连接与端口转发(forward)完整攻略 pure-python-adb 进阶功能远程连接与端口转发forward完整攻略【免费下载链接】pure-python-adbThis is pure-python implementation of the ADB client.项目地址: https://gitcode.com/gh_mirrors/pu/pure-python-adbpure-python-adb导入名ppadb是一个纯 Python 实现的 ADB 客户端库它跳过 adb 命令行直接与本机 adb server默认127.0.0.1:5037通信完整复刻了adb devices、adb shell、adb install等能力。本文聚焦两个最常用的进阶功能无线设备远程连接remote_connect和本地端口转发forward带你用 Python 轻松打通电脑与 Android 设备的任意端口。工作原理30 秒看懂架构传统 adb 的工作链路是这样的而 pure-python-adb 相当于替换掉 adb 命令行你的 Python 代码直接以客户端身份连接 adb server好处显而易见不再需要解析命令行输出直接拿到 Python 对象可以在 Web 服务、自动化脚本、测试框架中无缝集成远程连接、端口转发等底层功能全部开放给开发者安装很简单一条命令搞定pip install -U pure-python-adb快速上手三行代码创建 ADB 客户端from ppadb.client import Client as AdbClient client AdbClient(host127.0.0.1, port5037) # 默认值可省略 device client.device(emulator-5554) # 按序列号获取设备 print(device.shell(getprop ro.product.model))客户端核心实现见 ppadb/client.py设备操作shell、push、forward 等定义在 ppadb/device.py 和 ppadb/command/serial/init.py。远程连接设备如何使用 remote_connect 连接局域网内的手机USB 调试方便但无线调试才是进阶玩家的日常。只要设备开启了 ADB 网络调试先在设备上执行一次adb tcpip 5555你的 Python 脚本就能远程接管它。一键连接远程设备# 连接 172.20.0.1 上开启 5555 端口的设备 client.remote_connect(172.20.0.1, 5555) # 注意无线设备的 serial 是 IP:端口 格式 device client.device(172.20.0.1:5555) print(device.shell(getprop))断开连接单台 / 全部# 断开指定设备 client.remote_disconnect(172.20.0.1, 5555) # 一键断开所有远程设备 client.remote_disconnect()remote_connect的底层实现发送host:connect命令在 ppadb/command/host/init.py 中返回True表示连接成功。 小提示client.devices()可以列出所有在线设备无线设备的序列号形如172.20.0.1:5555直接用它调用client.device(serial)即可。端口转发如何用一行 Python 代码实现 adb forwardadb forward的作用是把本机端口映射到设备端口访问电脑上的9999端口流量会被 adb server 转到设备的7777端口。ppadb 把它变成了一个方法调用。建立转发规则# 本机 tcp:9999 - 设备 tcp:7777 device.forward(tcp:9999, tcp:7777)端口前缀支持 adb 的完整规则常用的有前缀含义示例tcp:TCP 端口tcp:8080localabstract:设备端 abstract Unix socketlocalabstract:webview_devtools_remote_1234localfilesystem:设备端文件系统中的 socket 路径localfilesystem:/data/local/tmp/socknorebind 参数避免重复绑定报错默认情况下重复执行forward会直接覆盖旧规则。如果希望端口被占用时明确报错类似adb forward --no-rebind加上norebindTruedevice.forward(tcp:9999, tcp:7777, norebindTrue) # 端口已被占用时会抛出 RuntimeError: cannot rebind existing socket实现逻辑见 ppadb/command/serial/init.py官方测试用例参考 test/test_host_serial.py。管理转发规则list_forward 查询与 killforward 清理转发规则建立后随时可以查询和清理# 查询当前设备的所有转发规则 - {tcp:9999: tcp:7777} forward_map device.list_forward() # 删除单条规则 device.killforward(tcp:9999) # 删除该设备的全部规则 device.killforward_all()也可以在客户端层面一次性管理所有设备# 查看全局转发映射 {serial: {local: remote}} print(client.list_forward()) # 清空全部转发规则 client.killforward_all()实战场景浏览器直接打开设备内的网页服务假设你在 Android 设备或模拟器里跑了一个监听8080端口的 Flask 服务想从电脑浏览器访问它两行代码即可device.forward(tcp:8000, tcp:8080) # 现在浏览器访问 http://127.0.0.1:8000 就是设备里的服务同样的思路也能打通Chrome DevTools 调试把localabstract:webview_devtools_remote_进程号映射到本地端口后浏览器 DevTools 即可远程调试设备 WebView。异步版本多设备批量转发不阻塞如果你的自动化平台要同时管理几十台设备阻塞式客户端会拖慢节奏。ppadb 内置了完整的 asyncio 版本ClientAsync源码见 ppadb/client_async.pyAPI 与同步版一一对应只需加async/awaitimport asyncio from ppadb.client_async import ClientAsync async def main(): client ClientAsync() devices await client.devices() await asyncio.gather(*[ device.forward(tcp:8000, tcp:8080) for device in devices ]) asyncio.run(main())常见问题排查FAQQ1报cannot rebind existing socket怎么办端口已有转发规则。要么先device.killforward(tcp:9999)要么改用norebindFalse覆盖旧规则。Q2remote_connect返回False确认设备已执行adb tcpip 5555、与电脑在同一网段且防火墙放行了 5555 端口可用adb devices对照检查。Q3设备列表里找不到无线设备无线设备的 serial 是IP:端口格式别只按 USB 序列号查找用client.devices()打印一遍即可确认。Q4想定位问题如何打开调试日志import logging logging.getLogger(ppadb).setLevel(logging.DEBUG)总结把 ADB 进阶能力装进你的 Python 代码需求ppadb 方法连接局域网设备client.remote_connect(ip, port)断开远程设备client.remote_disconnect()建立端口转发device.forward(local, remote)查询转发规则device.list_forward()/client.list_forward()清理转发规则device.killforward_all()/client.killforward_all()掌握remote_connect与forward这两大进阶功能后无论是远程调试、批量设备管理还是搭建自己的云真机平台pure-python-adb 都能让你只写业务逻辑、不再和命令行字符串打交道。【免费下载链接】pure-python-adbThis is pure-python implementation of the ADB client.项目地址: https://gitcode.com/gh_mirrors/pu/pure-python-adb创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表