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

Detect if ADB server is running on Android?

我正在尝试检测 Android 设备上的 adb server 是否为 运行,作为我的免费游戏的反作弊实施的一部分。

具体来说,我想停止使用 adb shell input tap x,y,因为该游戏是一款多人益智竞技游戏。

我尝试过的事情:

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

  2. 使用 Settings.SecureSettings.Global,我可以查询 ADB_ENABLED,但如果启用了 adb,那总是 returns 1。它不考虑 adb 连接与否!

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

在这一点上,我没主意了。希望其他人知道该怎么做?

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

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

$ cat /sys/devices/virtual/android_usb/android0/functions
mtp,adb

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