检测ADB服务器是否在Android上运行?

Ric*_*ard 5 android adb

我试图检测是否在adb serverAndroid设备上运行我的免费游戏的反作弊实施的一部分.

具体来说,我想停止使用adb shell input tap x,y,因为游戏是一个有竞争力的多人益智游戏.

我尝试过的事情:

  1. 使用电池信息我可以检测USB是否已插入.嗯,这也是一种合法用途.

  2. 使用Settings.SecureSettings.Global,我可以查询ADB_ENABLED,但1如果启用了adb ,它总会返回.它没有考虑adb连接与否!

  3. 查询所有系统服务,但我看不到任何看起来像adb服务的东西.

在这一点上,我没有想法.希望别人知道怎么做?

Ale*_* P. 6

您可以检查正在运行的adbd进程或查询init.svc.adbd系统属性:

$ ps adbd
USER     PID   PPID  VSIZE  RSS     WCHAN    PC         NAME
root      14947 1     4596   208   ffffffff 00019358 S /sbin/adbd

$ getprop init.svc.adbd
running
Run Code Online (Sandbox Code Playgroud)

在Android中,adb驱动程序是作为通用usb驱动程序的功能实现的.您可以检查当前启用的usb函数的(逗号分隔)列表,看它是否包含"adb":

$ cat /sys/devices/virtual/android_usb/android0/functions
mtp,adb
Run Code Online (Sandbox Code Playgroud)

但是,当您的应用程序完全在用户控制的设备上运行时,您将无法停止作弊.

  • 后续:您可以检查MotionEvent.getDeviceId()...它返回零,以供adb输入! (2认同)