2015-01-11 89 views
5

我試圖檢測adb server是否在Android設備上運行,作爲我的免費遊戲的反作弊實施的一部分。檢測ADB服務器是否在Android上運行?

具體而言,我想停止使用adb shell input tap x,y,因爲這款遊戲是一款有競爭力的多人拼圖遊戲。

事情我已經嘗試:

  1. 使用電池的信息,如果USB已插入我能察覺嗯,這也是合法的使用。

  2. 使用Settings.SecureSettings.Global,我可以查詢ADB_ENABLED,但如果啓用了亞洲開發銀行始終返回1。它不考慮adb連接或不!

  3. 查詢所有系統服務,但我看不到任何看起來像adb服務的東西。

在這一點上,我沒有想法。希望有人知道如何做到這一點?

回答

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 

在Android上的adb司機被實現爲通用usb驅動器的功能。您可以檢查當前啓用usb功能(逗號分隔)列表,看它是否包括"adb"

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

但是當你的應用程序被用戶控制設備上運行完全,你將無法停止作弊。

+0

太棒了...謝謝!在這種情況下停止作弊是很容易的......只是不要將分數提交給服務器,如果adb正在運行:) – Richard

+1

後續:你可以檢查MotionEvent.getDeviceId()...它通過adb返回零輸入! – Richard

-1

是不是輸入點擊事件標記爲'synthetic/artificial/monkey'?

static boolean isUserAMonkey() 如果用戶界面當前正在被猴子混淆,則返回「true」。

相關問題