Detener una aplicación de Android desde la consola


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

adb stop com.my.app.package

Aceleraría mucho nuestro proceso de pruebas. Ahora mismo desinstalamos / instalamos la aplicación cada vez para asegurarnos de que los casos de prueba manuales comiencen con un estado limpio.

Author: hpique, 2010-06-25

10 answers

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 esta respuesta.

Alternativamente: En lugar de simplemente detener la aplicación, ya que menciona que desea una "pizarra limpia" para cada ejecución de prueba, puede usar adb shell pm clear com.my.app.package, que detendrá el proceso de la aplicación y borrará 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

Eso solo funcionará para dispositivos/emuladores donde tenga root inmediatamente después de ejecutar un shell. Eso probablemente se puede refinar un poco para llamar su de antemano.

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

 117
Author: Christopher Orr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-06 16:13:29

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.

 440
Author: Enrico Ros,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-05 03:45:25

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

Then....in una terminal....

adb shell am kill com.your.package
 17
Author: dell116,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-14 05:26:07

Puede usar lo siguiente desde la consola del dispositivo: pm disable com.my.app.package que lo matará. A continuación, utilice pm enable com.my.app.package para que pueda lanzarlo de nuevo.

 13
Author: Someone Somewhere,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-30 22:31:11

Si tiene acceso al paquete de la aplicación, puede instalarlo con la opción-r y matará el proceso si se está ejecutando actualmente como un efecto secundario. Así:

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 un borrón y cuenta nueva como mencionaste, es posible que no quieras usar esa opción.

 9
Author: ThomasW,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-09 10:32:07

Si te diriges a un dispositivo no rooteado y/o tienes servicios en tu APK que no quieres 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 añadido a mi actividad con el fin de 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
 6
Author: Patrick Valsecchi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-17 08:14:12

Si todo lo que buscas es matar un paquete

pkill package_name 

Debería funcionar

 3
Author: steve,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-15 08:40:01

En eclipse vaya a la perspectiva DDMS y en la pestaña dispositivos haga clic en el proceso que desea matar bajo el dispositivo en el que desea matarlo. A continuación, solo tiene que pulsar el botón de parada y 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 del caparazón de adb...

 0
Author: matto1990,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-25 10:07:29

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

Según MAC " control de acceso obligatorio" probablemente tengas el proceso de permiso para matar que no se inicia por root

Diviértete!

 0
Author: sinan bilkay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-04 21:16:38
pkill NAMEofAPP

No rooteado marshmallow, termux & emulador de terminal.

 -1
Author: William A. Krithinithis Kripto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-18 06:37:24