Co to jest narzędzie „zrzutów” powłoki ADB systemu Android i jakie są jego zalety?

140

Szukam pełnej listy dumpsyspoleceń powłoki ADB z pełnym wyjaśnieniem wszystkich poleceń.

Gdzie mogę znaleźć te informacje?

Vishwanath.M
źródło

Odpowiedzi:

247

Co to są zrzuty i jakie są z tego korzyści

dumpsys to narzędzie systemu Android, które działa na urządzeniu i zrzuca interesujące informacje o stanie usług systemowych.

Oczywiste korzyści:

  1. Możliwość łatwego uzyskania informacji o systemie w postaci prostej reprezentacji ciągu.
  2. Możliwość wykorzystania zrzuconego procesora, pamięci RAM, baterii, statystyk przechowywania dla ładnych wykresów, które pozwolą Ci sprawdzić, jak Twoja aplikacja wpływa na całe urządzenie!

Jakie informacje możemy pobrać z polecenia powłoki dumpsys i jak możemy ich użyć

Jeśli uruchomisz zrzuty, zobaczysz mnóstwo informacji o systemie. Ale możesz używać tylko oddzielnych części tego dużego wysypiska.

aby zobaczyć wszystkie "podkomendy" programu dumpsys:

dumpsys | grep "DUMP OF SERVICE"

Wynik:

DUMP OF SERVICE SurfaceFlinger:
DUMP OF SERVICE accessibility:
DUMP OF SERVICE account:
DUMP OF SERVICE activity:
DUMP OF SERVICE alarm:
DUMP OF SERVICE appwidget:
DUMP OF SERVICE audio:
DUMP OF SERVICE backup:
DUMP OF SERVICE battery:
DUMP OF SERVICE batteryinfo:
DUMP OF SERVICE clipboard:
DUMP OF SERVICE connectivity:
DUMP OF SERVICE content:
DUMP OF SERVICE cpuinfo:
DUMP OF SERVICE device_policy:
DUMP OF SERVICE devicestoragemonitor:
DUMP OF SERVICE diskstats:
DUMP OF SERVICE dropbox:
DUMP OF SERVICE entropy:
DUMP OF SERVICE hardware:
DUMP OF SERVICE input_method:
DUMP OF SERVICE iphonesubinfo:
DUMP OF SERVICE isms:
DUMP OF SERVICE location:
DUMP OF SERVICE media.audio_flinger:
DUMP OF SERVICE media.audio_policy:
DUMP OF SERVICE media.player:
DUMP OF SERVICE meminfo:
DUMP OF SERVICE mount:
DUMP OF SERVICE netstat:
DUMP OF SERVICE network_management:
DUMP OF SERVICE notification:
DUMP OF SERVICE package:
DUMP OF SERVICE permission:
DUMP OF SERVICE phone:
DUMP OF SERVICE power:
DUMP OF SERVICE reboot:
DUMP OF SERVICE screenshot:
DUMP OF SERVICE search:
DUMP OF SERVICE sensor:
DUMP OF SERVICE simphonebook:
DUMP OF SERVICE statusbar:
DUMP OF SERVICE telephony.registry:
DUMP OF SERVICE throttle:
DUMP OF SERVICE usagestats:
DUMP OF SERVICE vibrator:
DUMP OF SERVICE wallpaper:
DUMP OF SERVICE wifi:
DUMP OF SERVICE window:

Kilka przykładów i wyników dumpingu

1) Uzyskanie wszystkich możliwych statystyk baterii:

$~ adb shell dumpsys battery

Otrzymasz wynik:

Current Battery Service state:
AC powered: false
AC capacity: 500000
USB powered: true
status: 5
health: 2
present: true
level: 100
scale: 100
voltage:4201
temperature: 271 <---------- Battery temperature! %)
technology: Li-poly <---------- Battery technology! %)

2) Pobieranie informacji o wifi

~$ adb shell dumpsys wifi

Wynik:

Wi-Fi is enabled
Stay-awake conditions: 3

Internal state:
interface tiwlan0 runState=Running
SSID: XXXXXXX BSSID: xx:xx:xx:xx:xx:xx, MAC: xx:xx:xx:xx:xx:xx, Supplicant state: COMPLETED, RSSI: -60, Link speed: 54, Net ID: 2, security: 0, idStr: null
ipaddr 192.168.1.xxx gateway 192.168.x.x netmask 255.255.255.0 dns1 192.168.x.x dns2 8.8.8.8 DHCP server 192.168.x.x lease 604800 seconds
haveIpAddress=true, obtainingIpAddress=false, scanModeActive=false
lastSignalLevel=2, explicitlyDisabled=false

Latest scan results:

Locks acquired: 28 full, 0 scan
Locks released: 28 full, 0 scan

Locks held:

3) Pobieranie informacji o procesorze

~$ adb shell dumpsys cpuinfo

Wynik:

Load: 0.08 / 0.4 / 0.64
CPU usage from 42816ms to 34683ms ago:
system_server: 1% = 1% user + 0% kernel / faults: 16 minor
kdebuglog.sh: 0% = 0% user + 0% kernel / faults: 160 minor
tiwlan_wq: 0% = 0% user + 0% kernel
usb_mass_storag: 0% = 0% user + 0% kernel
pvr_workqueue: 0% = 0% user + 0% kernel
+sleep: 0% = 0% user + 0% kernel
+sleep: 0% = 0% user + 0% kernel
TOTAL: 6% = 1% user + 3% kernel + 0% irq

4) Pobieranie informacji o wykorzystaniu pamięci

~$ adb shell dumpsys meminfo 'your apps package name'

Wynik:

** MEMINFO in pid 5527 [com.sec.android.widgetapp.weatherclock] **
                    native   dalvik    other    total
            size:     2868     5767      N/A     8635
       allocated:     2861     2891      N/A     5752
            free:        6     2876      N/A     2882
           (Pss):      532       80     2479     3091
  (shared dirty):      932     2004     6060     8996
    (priv dirty):      512       36     1872     2420

 Objects
           Views:        0        ViewRoots:        0
     AppContexts:        0       Activities:        0
          Assets:        3    AssetManagers:        3
   Local Binders:        2    Proxy Binders:        8
Death Recipients:        0
 OpenSSL Sockets:        0


 SQL
               heap:        0         MEMORY_USED:        0
 PAGECACHE_OVERFLOW:        0         MALLOC_SIZE:        0

Jeśli chcesz zobaczyć informacje o wszystkich procesach, użyj ~$ adb shell dumpsys meminfo

wprowadź opis obrazu tutaj

dumpsys jest ostatecznie elastycznym i użytecznym narzędziem!

Jeśli chcesz skorzystać z tego narzędzia, nie zapomnij o automatycznym dodaniu uprawnień do manifestu systemu Android android.permission.DUMP

Spróbuj przetestować wszystkie polecenia, aby dowiedzieć się więcej o zrzutach. Miłego zrzutu!

K_Anas
źródło
5
Czy to z jakiegoś dokumentu, czy tylko z twojego własnego eksperymentu?
brianestey
10
Również bardzo fajne jest: adb shell zrzuca transmisje aktywności, pokazuje wszystkie transmisje
joecks
poczynając od KitKat (tak mi się wydaje), "batteryinfo" zostało zastąpione przez "batterystats", a jego wyjście i użycie również wydaje się inne.
programista Androida
1
dumpsys jest niesamowicie potężny. Raportuje prywatne wartości podstawowych usług Androida, których normalnie nigdy nie byłbyś w stanie uzyskać.
Kevin Mark
1
niestety wymaga uprawnień roota lub poziomu systemu do używania w programie java.
umesh
60

Patrząc na kod źródłowy zrzutów i usług , możesz uzyskać listę dostępnych usług, wykonując następujące czynności:

adb shell service -l

Następnie możesz podać nazwę usługi, która Cię interesuje, do zrzutów, aby uzyskać szczegółowe informacje. Na przykład (pamiętaj, że nie wszystkie usługi zapewniają informacje o zrzutach):

adb shell dumpsys activity
adb shell dumpsys cpuinfo
adb shell dumpsys battery

Jak widać w kodzie (i w odpowiedzi K_Anas), jeśli wywołasz dumpsys bez nazwy usługi, zrzuci informacje o wszystkich usługach w jednym dużym zrzucie:

adb shell dumpsys

Niektóre usługi mogą otrzymywać dodatkowe argumenty dotyczące tego, co pokazać, co zwykle jest wyjaśnione, jeśli podałeś -hargument, na przykład:

adb shell dumpsys activity -h
adb shell dumpsys window -h
adb shell dumpsys meminfo -h
adb shell dumpsys package -h
adb shell dumpsys batteryinfo -h
Joe
źródło
13

Według oficjalnych informacji Androida o zrzutach :

Dumpsys narzędzie działa na urządzenia oraz dostarcza informacji o statusie usług systemowych.

Aby uzyskać listę dostępnych usług, użyj

adb shell dumpsys -l
lujop
źródło
1
Nie rozumiem, dlaczego ten głos został odrzucony - to przydatny link. Lista dostępnych usług -ldziała na moim Lollipopie, ale nie na moim Jelly Bean.
starfry
1
Ta odpowiedź zawiera rzeczywisty wskaźnik do faktycznej dokumentacji. Myślę, że właśnie tego szukał OP
Robert R Evans
Prawdopodobnie został odrzucony, ponieważ nie ma nowych informacji w porównaniu z odpowiedzią udzieloną trzy lata wcześniej.
topher217
0

Używam zrzutów, aby złapać, czy aplikacja uległa awarii, a proces jest nadal aktywny. Sytuacja, której użyłem, to stwierdzenie, że aplikacja zdalnego komputera jest zawieszona, czy nie.

dumpsys | grep myapp | grep "Application Error" 

lub

adb shell dumpsys | grep myapp | grep Error

lub cokolwiek, co pomaga ... itd

jeśli aplikacja nie jest uruchomiona, nic nie otrzymasz. Gdy aplikacja jest zatrzymana, na ekranie Android wyświetla się komunikat, proces jest nadal aktywny i jeśli sprawdzisz za pomocą polecenia „ ps ” lub czegokolwiek innego, zobaczysz, że stan procesu nie pokazuje żadnego błędu ani znaczenia awarii. Ale kiedy klikniesz przycisk, aby zamknąć wiadomość, proces aplikacji zostanie wyczyszczony z listy procesów. więc złapanie stanu awarii bez żadnego kodu w aplikacji jest trudne do znalezienia. ale dumpsys pomaga.

Engin OZTURK
źródło