2015-01-11 1 views
5

Ich versuche herauszufinden, ob die adb server auf dem Android-Gerät für einen Teil einer Anti-Cheating-Implementierung für mein kostenloses Spiel läuft.Erkennen, ob ADB Server unter Android läuft?

Konkret möchte ich die Verwendung von adb shell input tap x,y stoppen, da das Spiel ein kompetitives Multiplayer-Puzzle-Spiel ist.

Dinge, die ich habe versucht:

  1. Batterie Info Verwenden ich erkennen kann, wenn USB angeschlossen ist Nun, das ist auch eine legitime Verwendung..

  2. Mit Settings.Secure oder Settings.Global, kann ich abfragen ADB_ENABLED, aber das gibt immer 1 wenn adb aktiviert ist. Es berücksichtigt nicht adb verbunden oder nicht!

  3. Abfrage aller Systemdienste, aber ich kann nichts sehen, das wie ein Adb-Dienst aussieht.

An diesem Punkt habe ich keine Ideen mehr. Hoffentlich weiß jemand anders, wie man das macht?

Antwort

6

können Sie prüfen, für adbd Prozess oder Abfrage init.svc.adbd Systemeigenschaft ausgeführt wird:

$ 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 

In Android die adb Treiber wird als Funktion der universellen usb Treiber implementiert. Sie können prüfen, die (durch Komma getrennt) Liste der derzeit usb Funktionen aktiviert, um zu sehen, ob es "adb" beinhaltet:

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

Aber Sie würden nicht in der Lage Stopp Betrug sein, während die App vollständig auf den Benutzer gesteuert Gerät läuft.

+0

Super ... danke! Schummeln zu stoppen ist in diesem Fall einfach ... reiche die Punkte nicht an die Server weiter, wenn das Adb läuft :) – Richard

+1

Folge: du kannst MotionEvent.getDeviceId() überprüfen ... es gibt Null für die Eingabe durch das Adb zurück! – Richard

-1

Werden keine Eingabe-Tap-Ereignisse als "synthetisch/künstlich/Affe" markiert?

static boolean isUserAMonkey() Gibt "true" zurück, wenn die Benutzeroberfläche gerade von einem Affen durchsucht wird.