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

针对带反作弊的Android游戏,如何用Python替代ADB发送输入事件?

解决方案:Root设备下绕过COC反ADB的Python模拟点击方案

针对《部落冲突》反ADB检测导致常规点击方法失效的问题,结合你已Root的设备状态,提供以下三种不依赖ADB核心输入通道的可行方案:

方案1:复用Scrcpy控制协议模拟输入

Scrcpy的鼠标输入能正常工作,说明其走的输入通道未被游戏拦截。你可以直接通过Python连接Scrcpy的控制端口,发送触摸事件,和Scrcpy鼠标输入走完全相同的路径。

步骤:

  1. 启动Scrcpy时开启控制端口:
scrcpy --control-port=27183
  1. Python通过Socket发送符合Scrcpy协议的触摸事件(需参考Scrcpy官方源码构造正确的二进制/Protobuf消息):
import socket
import struct

def scrcpy_touch(x, y):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('127.0.0.1', 27183))
    
    # 构造触摸DOWN事件(简化版,需根据Scrcpy协议版本调整)
    down_msg = struct.pack('<BBHHH', 1, 0, 0, x, y)  # 协议头+坐标
    s.send(down_msg)
    
    # 构造触摸UP事件
    up_msg = struct.pack('<BBHHH', 1, 1, 0, x, y)
    s.send(up_msg)
    
    s.close()

# 调用示例
scrcpy_touch(137, 1000)

注:完整协议需参考Scrcpy的ControlMessage定义,建议生成对应Python Protobuf代码构造标准消息。

方案2:Root权限直接操作输入设备节点

Root设备可直接写入/dev/input/eventX节点,绕过所有上层输入拦截,直接和硬件输入层交互,游戏反作弊几乎无法检测。

步骤:

  1. 在设备端执行getevent -l,找到触摸对应的输入节点(如/dev/input/event2)
  2. 选择以下两种实现方式:

方式A:设备端运行Python脚本(需Termux等Android Python环境)

import struct

EVENT_PATH = '/dev/input/event2'  # 替换为你的触摸节点

def send_input_event(type_, code, value):
    # 构造input_event结构体:timeval(sec, usec) + type + code + value
    event = struct.pack('llHHI', 0, 0, type_, code, value)
    with open(EVENT_PATH, 'wb') as f:
        f.write(event)

# 模拟触摸按下
send_input_event(3, 57, 1)    # ABS_MT_TRACKING_ID
send_input_event(3, 53, 137)  # ABS_MT_POSITION_X
send_input_event(3, 54, 1000) # ABS_MT_POSITION_Y
send_input_event(1, 330, 1)   # BTN_TOUCH
send_input_event(0, 0, 0)     # SYN_REPORT

# 模拟触摸抬起
send_input_event(3, 57, -1)
send_input_event(1, 330, 0)
send_input_event(0, 0, 0)

方式B:PC端通过SSH调用设备命令(需开启设备SSH服务)

import subprocess

DEVICE_SSH = 'root@192.168.1.100'  # 替换为你的设备SSH地址
EVENT_NODE = '/dev/input/event2'

# 构造sendevent命令序列
touch_cmds = [
    f'sendevent {EVENT_NODE} 3 57 1',
    f'sendevent {EVENT_NODE} 3 53 137',
    f'sendevent {EVENT_NODE} 3 54 1000',
    f'sendevent {EVENT_NODE} 1 330 1',
    f'sendevent {EVENT_NODE} 0 0 0',
    'sleep 0.1',
    f'sendevent {EVENT_NODE} 3 57 -1',
    f'sendevent {EVENT_NODE} 1 330 0',
    f'sendevent {EVENT_NODE} 0 0 0',
]

# 执行SSH命令
subprocess.run(['ssh', DEVICE_SSH, ' && '.join(touch_cmds)], check=True)

方案3:Root权限调用Android系统injectInputEvent API

通过Root权限直接调用Android系统输入注入API,和系统原生输入事件路径一致,稳定性高。

设备端Python实现(需pyjnius库)

from jnius import autoclass, cast

InputManager = autoclass('android.hardware.input.InputManager')
MotionEvent = autoclass('android.view.MotionEvent')

# 获取系统InputManager实例
input_manager = cast('android.hardware.input.InputManager', InputManager.getInstance())

def inject_touch(x, y):
    # 构造按下事件
    down_event = MotionEvent.obtain(0, 0, MotionEvent.ACTION_DOWN, x, y, 0)
    input_manager.injectInputEvent(down_event, 0)
    
    # 构造抬起事件
    up_event = MotionEvent.obtain(0, 0, MotionEvent.ACTION_UP, x, y, 0)
    input_manager.injectInputEvent(up_event, 0)

# 调用示例
inject_touch(137, 1000)

注意事项

  • 所有Root方案需确保设备已获取完整Root权限,执行命令时若权限不足,需添加su -c前缀
  • 操作/dev/input/eventX节点时,若提示权限错误,可执行chmod 666 /dev/input/eventX临时修改权限
  • Scrcpy协议需对应版本,建议参考官方源码同步协议细节

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 12:07:17