检测Android设备上的ADB服务器是否正在运行?

6
我正在尝试检测Android设备上是否运行adb server,用于我的免费游戏中反作弊实现的一部分。
具体而言,我希望停止使用adb shell input tap x,y,因为这个游戏是一个竞争性的多人智力游戏。
我尝试过的方法如下:
1. 使用电池信息可以检测USB是否插入。然而,这也是合法的使用方式。
2. 使用Settings.SecureSettings.Global,我可以查询ADB_ENABLED,但如果启用了adb,则始终返回1。它不考虑adb是否连接!
3. 查询所有系统服务,但我无法看到任何类似adb服务的东西。
到目前为止,我已经没有更多的想法。希望有人知道如何做到这一点?
1个回答

8

您可以检查运行中的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

在安卓系统中,adb驱动程序是作为通用usb驱动程序的一部分实现的。您可以检查当前启用的usb功能(以逗号分隔的列表)以查看是否包括"adb"
$ cat /sys/devices/virtual/android_usb/android0/functions
mtp,adb

但是,如果你的应用程序完全在用户控制的设备上运行,你将无法完全停止作弊。


太棒了...谢谢!在这种情况下,防止作弊很容易...如果adb正在运行,只需不将分数提交到服务器即可 :) - Richard
2
跟进:你可以检查MotionEvent.getDeviceId()...对于通过adb输入,它返回零! - Richard
这里的所有3种方法都无法告诉您设备是否连接到正在运行adb的PC。我刚刚断开了我的设备,在设备上运行所有命令,终端模拟器显示adb仍在运行。 - i336_

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接