2010-06-25 19 views
148

¿Es posible detener una aplicación de Android desde la consola? Algo como:Detener una aplicación de Android desde la consola

adb stop com.my.app.package 

Se aceleraría tanto nuestro proceso de prueba. En este momento, desinstalamos/instalamos la aplicación cada vez para asegurarnos de que los casos de prueba manual comiencen con un estado limpio.

Respuesta

107

Editar: largo después de escribir este post y fue aceptado como la respuesta, el comando am force-stop era implemented por el equipo de Android, como se menciona en this answer.

alternativa: En lugar de simplemente detener la aplicación, ya que usted menciona que desean un "borrón y cuenta nueva" para cada ejecución de prueba, puede utilizar adb shell pm clear com.my.app.package, que detendrá el proceso de aplicación y claras a cabo todos los datos almacenados para esa aplicación


Si estás en Linux:
adb shell ps | grep com.myapp | awk '{print $2}' | xargs adb shell kill

Esto sólo funcionará para dispositivos/emuladores donde tiene raíces inmediatamente después de ejecutar un intérprete. Probablemente se pueda refinar ligeramente para llamar al su de antemano.

De lo contrario, puede hacerlo (de forma manual, o supongo guión):
pc $ adb -d shell
android $ su
android # ps
android # kill <process id from ps output>

+6

No se pudo hacer funcionar (se denegaron permisos tanto para kill y su), pero +1 para mostrarme que puedo hacer mucho más de lo que pensaba con adb. – hpique

+9

Ah, parece que no tiene un dispositivo rooteado. Definitivamente funciona en el emulador al menos! :) –

+1

Tal vez tenga que volver a montar la partición de lectura-escritura y ejecutar adb como raíz: remo de adb; adb root # eso es solo una estúpida conjetura pensamiento – Rorist

0

En eclipse vaya a la perspectiva de DDMS y en la pestaña de dispositivos haga clic en el proceso que desea matar debajo del dispositivo que desea eliminar. Luego solo tiene que presionar el botón de detener y debería matar el proceso.

No estoy seguro de cómo haría esto desde la herramienta de línea de comandos, pero debe haber una manera. Tal vez lo hace a través de la adb shell ...

+0

He encontrado un [fragmento de código en GitHub] (https://gist.github.com/805605) sobre cómo hacer esto desde la línea de comandos sin ejecutar Eclipse y [lo extendí un poco] (https: // gist.github.com/3175409). – sschuberth

8

Si tiene acceso al paquete de aplicación, a continuación, que puede instalar con el - opción r y matará el proceso si se está ejecutando actualmente como un efecto secundario. De esta manera:

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

La opción -r conserva los datos que actualmente está asociada con la aplicación. Sin embargo, si desea que se borre una lista como la que mencionó, es posible que no desee usar esa opción.

+0

Buen truco. Funciona para dispositivos no rooteados! – hopia

10

puede usar lo siguiente desde la consola del dispositivo: pm disable com.my.app.package que lo matará. Luego use pm enable com.my.app.package para que pueda volver a iniciarlo.

+1

En un teléfono no rooteado esto parece no hacer nada. –

+0

Lo he comprobado en un teléfono no rooteado. Al principio hay algunos mensajes de permiso denegado y luego se canceló mi aplicación/servicio DalvicVM. Solo dale un segundo. – LikeYou

+1

en un dispositivo rooteado esto funciona, y tiene el beneficio adicional de poder mantener la aplicación/servicio fuera de servicio. Esto puede ser deseable para propósitos de prueba. – miki

394

La forma más limpia de detener la aplicación es:

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

De esta manera usted no tiene que averiguar el ID de proceso.

+4

Tenga en cuenta que esto no funciona para las aplicaciones del sistema. –

+17

'Error: comando desconocido: force-stop' - Android 2.3 –

+15

Esta debería ser la respuesta aceptada para este problema. La pregunta no incluye un dispositivo rooteado. – Dimitris

5

Si se dirige a un dispositivo no rooteado y/o tiene servicios en su APK que no desea detener también, las otras soluciones no funcionarán.

Para resolver este problema, he recurrido a un receptor de mensajes de difusión que he agregado a mi actividad para detenerlo.

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)); 
    } 
} 

De esa manera, puede emitir este comando adb para detener su actividad:

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

primer lugar, poner la aplicación en el fondo (pulse el botón de inicio del dispositivo)

Entonces .. ..en un terminal ....

adb shell am kill com.your.package 
+2

*** NOTA *** No creo que esto funcione más en niveles de API> 22. – dell116

+0

lo hace en mi Nexus 5 con Marshmallow – urSus

3

Si todo lo que buscas es matar a un paquete de

pkill package_name 

debería funcionar

+0

Nota: esto solo funciona en las versiones más nuevas de Android. pkill no está disponible en mi emulador 4.4, pero está disponible en el emulador de Android 6. –

-1
pkill NAMEofAPP 

no malvavisco arraigada, termux & emulador de terminal.

Cuestiones relacionadas