Cómo detener una aplicación de Android desde la consola

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

adb stop com.my.app.package 

Esto aceleraría tanto nuestro proceso de pruebas. En este momento, desinstalar / instalar la aplicación cada vez para asegurarse de que los casos de prueba manuales comienzan con un estado limpio.

Editar: Mucho después de que escribí este post y fue aceptado como la respuesta, el comando am force-stop fue implementado por el equipo de Android, como se menciona en la respuesta a continuación .

Alternativamente: En lugar de simplemente detener la aplicación, ya que mencionas que deseas una "pizarra limpia" para cada prueba, puedes usar la adb shell pm clear com.my.app.package , que detendrá el proceso de la aplicación y borrará todos los adb shell pm clear com.my.app.package almacenados Datos para esa aplicación.


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

Eso sólo funcionará para los dispositivos / emuladores donde tiene raíz inmediatamente al ejecutar un shell. Eso probablemente puede refinarse ligeramente para llamar a su antemano.

De lo contrario, usted puede hacer (manualmente, o supongo script):
pc $ adb -d shell
android $ su
android # ps
android # kill <process id from ps output>

La forma limpia de detener la aplicación es:

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

De esta manera no tiene que averiguar el ID del proceso.

Primero, coloque la aplicación en segundo plano (presione el botón de inicio del dispositivo)

Entonces …. en una terminal ….

 adb shell am kill com.your.package 

Puede utilizar lo siguiente desde la consola del dispositivo: pm disable com.my.app.package que lo eliminará. A continuación, utilice pm enable com.my.app.package para pm enable com.my.app.package a iniciarlo.

Si tiene acceso al paquete de aplicación, puede instalarlo con la opción -r y eliminará el proceso si se está ejecutando como un efecto secundario. Me gusta esto:

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 actualmente asociados con la aplicación. Sin embargo, si quieres una pizarra limpia como mencionas, tal vez no quieras usar esa opción.

Si apunta a un dispositivo no arraigado y / o tiene servicios en el APK que no desea detener también, las otras soluciones no funcionarán.

Para solucionar este problema, he recurrido a un receptor de mensajes de difusión que he añadido a mi actividad para detenerla.

 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 esta manera, puede emitir este comando adb para detener su actividad:

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

Si todo lo que buscas es matar un paquete

 pkill package_name 

Deberia trabajar

En eclipse, vaya a la perspectiva de DDMS y, en la pestaña de dispositivos, haga clic en el proceso que desea matar bajo el dispositivo en el que desea eliminarlo. A continuación, sólo tiene que presionar el botón de detención y que debe 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 hagas a través de la shell adb …

 pkill NAMEofAPP 

Sin arraigó la marshmallow, termux y el emulador terminal.

  • Robolectric + rxJava + retrofit Segunda llamada lanza java.io.InterruptedIOException
  • Envío de mayúsculas a un TextEdit durante pruebas instrumentadas
  • ¿Cómo puedo ejecutar el código en el hilo de la interfaz de usuario en una prueba de Android JUnit sin una actividad?
  • Pruebas de facturación en la aplicación con cuentas de prueba
  • Java.lang.RuntimeException: ¡Stub! - ¿Cobertura de código de Android?
  • ProviderTestCase2.getProvider () es nulo
  • ¿Cómo puedo ejecutar una sola prueba con gradle android
  • ¿Cómo enviar eventos clave a un emulador sin cabeza en una prueba de instrumentación?
  • Saltar prueba para la variante de construcción específica en Android + Gradle?
  • Cómo detener y reiniciar una actividad en una prueba de instrumentación de Android?
  • ¿Cómo puedo obtener identificadores, nombres o rutas x para elementos ui utilizados en una aplicación para móviles (Android / iOS) para pruebas de automatización móvil?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.