2010-06-25 19 views
148

È possibile interrompere un'app Android dalla console? Qualcosa del tipo:Arresto di un'app Android dalla console

adb stop com.my.app.package 

Sarebbe molto più rapido il nostro processo di test. Al momento, disinstalliamo/installiamo l'app ogni volta per assicurarci che i casi di test manuali inizino con uno stato pulito.

risposta

107

Edit: Molto tempo dopo ho scritto questo post e 'stato accettato come la risposta, il comando am force-stop era implemented dal team di Android, come accennato in this answer.

alternativa: Piuttosto che una semplice pausa l'applicazione, dal momento che parlare di volere una "tabula rasa" per ogni prova, è possibile utilizzare adb shell pm clear com.my.app.package, che si fermerà il processo di applicazione e cancellare tutti i dati memorizzati per quell'app.


Se siete su Linux:
adb shell ps | grep com.myapp | awk '{print $2}' | xargs adb shell kill

che funzionerà solo per i dispositivi/emulatori in cui si dispone immediatamente radice su cui gira una shell. Questo può probabilmente essere leggermente raffinato per chiamare in anticipo lo su.

In caso contrario, si può fare (manualmente o suppongo script):
pc $ adb -d shell
android $ su
android # ps
android # kill <process id from ps output>

+6

Impossibile farlo funzionare (permesso negato sia per kill che su), ma +1 per avermi mostrato posso fare molto più di quanto pensassi con adb. – hpique

+9

Ah, sembra che tu non abbia un dispositivo rooted. Almeno funziona all'emulatore! :) –

+1

Forse devi rimontare la partizione di lettura-scrittura ed eseguire adb come root: adb remount; adb root # è solo una stupida ipotesi. – Rorist

0

In eclissi andare in prospettiva DDMS e nella scheda dispositivi fare clic sul processo che si desidera uccidere sotto il dispositivo su cui si desidera ucciderlo. Devi solo premere il pulsante stop e questo dovrebbe uccidere il processo.

Non sono sicuro di come lo faresti dallo strumento della riga di comando, ma ci deve essere un modo. Forse lo si fa attraverso il adb shell ...

+0

Ho trovato uno [snippet di codice su GitHub] (https://gist.github.com/805605) su come eseguire questa operazione dalla riga di comando senza eseguire Eclipse e [esteso leggermente] (https: // gist.github.com/3175409). – sschuberth

8

Se si ha accesso al pacchetto di applicazioni, è possibile installare con il - r opzione e ucciderà il processo se è attualmente in esecuzione come un effetto collaterale. Come questo:

adb -d install -r MyApp.apk ; adb -d shell am start -a android.intent.action.MAIN -n com.MyCompany.MyApp/.MyActivity

L'opzione -r conserva i dati attualmente associati con l'applicazione. Tuttavia, se vuoi una lavagna pulita come dici tu potresti non voler usare quell'opzione.

+0

Buon trucco. Funziona con dispositivi non rooted! – hopia

10

è possibile utilizzare quanto segue dalla console del dispositivo: pm disable com.my.app.package che lo ucciderà. Quindi utilizzare pm enable com.my.app.package in modo da poterlo avviare di nuovo.

+1

Su un telefono non rootato sembra non fare nulla. –

+0

L'ho rilevato su un telefono non rootato. All'inizio ci sono alcuni messaggi di autorizzazione negati e poi ha ucciso la mia app/servizio DalvicVM. Dagli solo un secondo. – LikeYou

+1

su un dispositivo rooted funziona e ha il vantaggio di essere in grado di mantenere l'app/servizio inattivo. Questo può essere desiderabile a scopo di test. – miki

394

Il modo pulito di fermare l'applicazione è:

adb shell am force-stop com.my.app.package 

In questo modo non c'è bisogno di capire l'ID del processo.

+4

Nota che questo non funziona per le app di sistema. –

+17

'Errore: comando sconosciuto: force-stop' - Android 2.3 –

+15

Questa dovrebbe essere la risposta accettata per questo problema. La domanda non include un dispositivo rooted. – Dimitris

5

Se si targetizza un dispositivo non root e/o si dispone di servizi nell'APK che non si desidera arrestare, le altre soluzioni non funzioneranno.

Per risolvere questo problema, ho fatto ricorso a un ricevitore di messaggi broadcast che ho aggiunto alla mia attività per fermarlo.

public class TestActivity extends Activity { 
    private static final String STOP_COMMAND = "com.example.TestActivity.STOP"; 

    private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      TestActivity.this.finish(); 
     } 
    }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     //other stuff... 

     registerReceiver(broadcastReceiver, new IntentFilter(STOP_COMMAND)); 
    } 
} 

In questo modo, è possibile emettere questo comando adb per arrestare la vostra attività:

adb shell am broadcast -a com.example.TestActivity.STOP 
13

primo luogo, mettere l'applicazione in background (premere il pulsante di avvio del dispositivo)

poi .. ..in un terminale ....

adb shell am kill com.your.package 
+2

*** NOTA *** Non credo che funzioni più nei livelli API> 22. – dell116

+0

sul mio Nexus 5 con Marshmallow – urSus

3

Se tutto quello che state cercando è l'uccisione di un pacchetto di

pkill package_name 

dovrebbe funzionare

+0

Nota: questo funziona solo sulle versioni Android più recenti. pkill non è disponibile sul mio emulatore 4.4 ma è disponibile sull'emulatore Android 6. –

-1
pkill NAMEofAPP 

non marshmallow radicata, termux & emulatore di terminale.

Problemi correlati