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 

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.

Editar: Mucho tiempo después de que escribí esta publicación y se aceptó como la respuesta, el comando android am force-stop fue implementado por el equipo de Android, como se menciona en esta respuesta .

Alternativamente: en lugar de simplemente detener la aplicación, ya que mencionaste querer un “borrón y cuenta nueva” para cada ejecución de prueba, puedes usar adb shell pm clear com.my.app.package , que detendrá el proceso de la aplicación y eliminará todo el almacenamiento almacenado. datos para esa aplicación.


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

Eso solo funcionará para dispositivos / emuladores en los que tenga root inmediatamente después de ejecutar un shell. Eso probablemente puede ser refinado ligeramente para llamar a su antemano.

De lo contrario, puede hacerlo (manualmente, o supongo que con guiones):
pc $ adb -d shell
android $ su
android # ps
android # kill

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

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

De esta forma, no tiene que descubrir la ID del proceso.

Primero, ponga 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 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 iniciarlo nuevamente.

Si tiene acceso al paquete de la aplicación, puede instalarlo con la opción -r y se cancelará el proceso si se está ejecutando actualmente 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 desea que se borre una lista como la que mencionó, es posible que no desee usar esa opción.

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

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

Si todo lo que estás buscando es matar un paquete

 pkill package_name 

Deberia trabajar

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

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

adb shell killall -9 com.your.package.name

de acuerdo con el “control de acceso obligatorio” de MAC, probablemente tenga el permiso para matar el proceso que no se inicia con la raíz

¡que te diviertas!

 pkill NAMEofAPP 

Malvavisco sin enraizar, termux y emulador de terminal.