You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python的PPADB连接BlueStacks,解决异常并编写单文件代码

解决PPADB连接BlueStacks并实现手势操作的完整代码

BlueStacks的ADB服务默认不监听5037端口,这是导致PPADB无法检测设备的核心原因。必须先通过ADB命令手动建立与BlueStacks的连接,再用PPADB进行后续操作。以下是参考相关项目实现的单文件完整代码,包含设备连接、点击、滑动功能:

import subprocess
from ppadb.client import Client as AdbClient

def connect_bluestacks(adb_path="adb", host="127.0.0.1", port=5555):
    # 通过ADB命令建立与BlueStacks的连接
    try:
        subprocess.run([adb_path, "connect", f"{host}:{port}"], check=True, capture_output=True)
        print(f"成功连接到BlueStacks {host}:{port}")
    except subprocess.CalledProcessError as e:
        print(f"ADB连接失败: {e.stderr.decode('utf-8')}")
        return None
    
    # 初始化PPADB客户端并获取设备
    client = AdbClient(host="127.0.0.1", port=5037)
    devices = client.devices()
    
    if not devices:
        print("未检测到设备,请检查ADB连接状态")
        return None
    return devices[0]

def tap(device, x, y):
    # 模拟屏幕点击
    device.shell(f"input tap {x} {y}")
    print(f"已点击坐标 ({x}, {y})")

def swipe(device, x1, y1, x2, y2, duration=500):
    # 模拟屏幕滑动,duration为滑动时长(毫秒)
    device.shell(f"input swipe {x1} {y1} {x2} {y2} {duration}")
    print(f"已从 ({x1}, {y1}) 滑动到 ({x2}, {y2}),时长 {duration}ms")

if __name__ == "__main__":
    # 替换为你的BlueStacks实际ADB端口,可在模拟器设置中查看
    bluestacks_port = 5555
    device = connect_bluestacks(port=bluestacks_port)
    
    if device:
        # 示例操作:点击(500,500)坐标
        tap(device, 500, 500)
        # 示例操作:从底部向上滑动
        swipe(device, 100, 800, 100, 200, 1000)

关键注意事项:

  1. 端口确认:打开BlueStacks的「设置」-「ADB连接」,确认模拟器使用的端口(多数版本为5555,部分版本可能不同),替换代码中的bluestacks_port值。
  2. ADB路径配置:如果系统环境变量未添加ADB路径,需将adb_path参数替换为BlueStacks自带ADB的完整路径(比如"C:/Program Files/BlueStacks_nxt/HD-Adb.exe")。
  3. 坐标获取:可通过BlueStacks的截图功能,或开启开发者选项中的「指针位置」来获取准确操作坐标。
  4. 权限与防火墙:确保终端有足够运行权限,且防火墙未拦截BlueStacks的ADB连接。

内容的提问来源于stack exchange,提问作者el merrre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 09:46:39