Ho un dispositivo Android con sistema operativo Jelly Bean.Come rilevare l'applicazione in esecuzione usando il comando ADB
C'è un modo per rilevare il processo è in esecuzione o non utilizzare il comando ADB
se so il nome del pacchetto ?
Ho un dispositivo Android con sistema operativo Jelly Bean.Come rilevare l'applicazione in esecuzione usando il comando ADB
C'è un modo per rilevare il processo è in esecuzione o non utilizzare il comando ADB
se so il nome del pacchetto ?
Non è necessario utilizzare grep. ps
in Android può filtrare per COMM
valore (ultimi 15 caratteri del nome del pacchetto in caso di java app)
Diciamo che vogliamo controllare se com.android.phone
è in esecuzione:
adb shell ps m.android.phone
USER PID PPID VSIZE RSS WCHAN PC NAME
radio 1389 277 515960 33964 ffffffff 4024c270 S com.android.phone
Filtraggio per COMM
value option has been removed da ps
in Android 7.0. Per verificare la presenza di un processo in esecuzione in base al nome in Android 7.0 è possibile utilizzare pidof
comando:
adb shell pidof com.android.phone
Esso restituisce il PID, se è stato trovato tale processo o una stringa vuota altrimenti.
Nota che questo non funzionerà se gli ultimi 15 caratteri del nome di un pacchetto iniziano con un numero. (Esempio: com.number13.example.debug, dove gli ultimi 15 caratteri sono "3.example.debug"). Motivo? Il comando filtra per pid invece del nome del processo se il primo carattere è una cifra: https://github.com/android/platform_system_core/blob/master/toolbox/ps.c#L295 –
Una nota per 'pidof': I ' m a volte ricevendo processi "cancellati" quando ho 'readlink/proc/$ PID/exe'. – jozxyqk
Ottimo! Grazie! ha funzionato su Android 7.0 (Galaxy S8 +) e 8.0 (emulatore) – hungtdo
È possibile utilizzare
adb shell ps | grep apps | awk '{print $9}'
per produrre un output come:
com.google.process.gapps
com.google.android.apps.uploader
com.google.android.apps.plus
com.google.android.apps.maps
com.google.android.apps.maps:GoogleLocationService
com.google.android.apps.maps:FriendService
com.google.android.apps.maps:LocationFriendService
adb shell ps restituisce un elenco di tutti i processi in esecuzione sul dispositivo Android, grep applicazioni ricerca per ogni fila con contiene "app", come puoi vedere sopra sono tutte com.google.android.APPS. o GAPPS, awk estrae la nona colonna che in questo caso è il nome del pacchetto.
Per cercare un particolare pacchetto usare
adb shell ps | grep PACKAGE.NAME.HERE | awk '{print $9}'
cioè adb shell ps | grep com.we7.player | awk '{print $9}'
Se è in esecuzione verrà visualizzato il nome, se non ci sarà alcun risultato restituito.
Grazie per la risposta, voglio solo la lista dei processi come mostra gli strumenti DDMS sotto il dispositivo in Eclipse. –
quindi dovrei eseguire i processi di attività di dumpys della shell adb | app di grep | awk '{print $ 9}' ??? –
No, scusate, ho cambiato la mia risposta, utilizzare ciò che è mostrato sopra, adb shell ps | app di grep | awk '{print $ 9}' – o0rebelious0o
In alternativa, è possibile utilizzare pgrep
o Process Grep. (È necessario Busybox)
Si potrebbe fare un adb shell pgrep com.example.app
e verrà visualizzato solo l'ID di processo.
Come suggerimento, dal momento che Android è Linux, è possibile utilizzare la maggior parte dei comandi di base di Linux con adb shell
per navigare/controllare. : D
Ho appena notato che superiore è disponibile in adb, in modo da poter fare le cose come
adb shell
top -m5
di monitorare i primi cinque processi CPU monopolizzavano.
O
adb shell top -m5 -s cpu -n 20|tee top.log
per registrare questo per un minuto e raccogliere l'output in un file sul computer.
apprezzo la tua risposta , ma questo non è quello che stavo cercando !! –
Se si desidera ottenere direttamente il nome del pacchetto dell'app corrente a fuoco, utilizzare questo comando adb -
adb shell dumpsys window windows | grep -E 'mFocusedApp'| cut -d/-f 1 | cut -d " " -f 7
Ulteriori informazioni dal risultato del comando adb viene rimosso utilizzando il comando di taglio. Soluzione originale da here.
Amo questo, anche se ho dovuto usare -f 6 Produce sempre la stessa uscita? –
@ArnaldoCapo Per me non funziona con -f 6. Senza comando di taglio, questo è l'output completo che ottengo: mFocusedApp = AppWindowToken {eb42ebb token = Token {f96bf4a ActivityRecord {d040cb5 u0 com.package/.MainNavBarActivity t8679}}} Quindi, -f 6 produce "u0". non ho controllato, ma spero che produca lo stesso output in modo coerente tra i dispositivi e le versioni di Android. Potresti incollare l'intero output senza tagliare? – abhiank
Prova:
adb shell pidof <myPackageName>
output standard sarà vuota se l'applicazione non è in esecuzione. Altrimenti, emetterà il PID.
Possibile duplicato di [Trova l'ID del processo in esecuzione in base al nome del pacchetto] (http://stackoverflow.com/questions/15608876/find-out-the-running-process-id-by-package-name) –