web-dev-qa-db-fra.com

Arrêter une application Android depuis la console

Est-il possible d'arrêter une application Android à partir de la console? Quelque chose comme:

adb stop com.my.app.package

Cela accélèrerait tellement notre processus de test. À l'heure actuelle, nous désinstallons/installons l'application à chaque fois pour nous assurer que les cas de test manuels commencent par un état de nettoyage.

171
hpique

Edit: Longtemps après avoir écrit ce message et que ma réponse a été acceptée, la commande am force-stop était implémentée par l'équipe Android, comme indiqué dans cette réponse .

Alternativement: Plutôt que d'arrêter simplement l'application, puisque vous indiquez vouloir une "table rase" pour chaque test, vous pouvez utiliser adb Shell pm clear com.my.app.package, ce qui arrêtera le processus d'application et efface toutes les données stockées. données pour cette application.


Si vous êtes sur Linux:
adb Shell ps | grep com.myapp | awk '{print $2}' | xargs adb Shell kill

Cela ne fonctionnera que pour les périphériques/émulateurs sur lesquels vous avez la racine immédiatement après l’exécution d’un shell. Cela peut probablement être légèrement affiné pour appeler su à l’avance.

Sinon, vous pouvez faire (manuellement, ou je suppose scripté):
pc $ adb -d Shell
Android $ su
Android # ps
Android # kill <process id from ps output>

127
Christopher Orr

La façon propre d'arrêter l'application est:

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

De cette façon, vous n'avez pas à déterminer l'identifiant du processus.

462
Enrico Ros

Tout d'abord, mettez l'application en arrière-plan (appuyez sur le bouton d'accueil de l'appareil)

Alors .... dans un terminal ....

adb Shell am kill com.your.package
20
dell116

vous pouvez utiliser les éléments suivants à partir de la console du périphérique: pm disable com.my.app.package qui le tuera Utilisez ensuite pm enable com.my.app.package pour pouvoir le relancer.

14
Someone Somewhere

Si vous avez accès au package d'application, vous pouvez alors l'installer avec l'option -r. Le processus sera arrêté s'il est actuellement exécuté en tant qu'effet secondaire. Comme ça:

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

L'option -r préserve les données actuellement associées à l'application. Cependant, si vous voulez une table rase comme vous l'avez mentionné, vous ne voudrez peut-être pas utiliser cette option.

9
ThomasW

Si vous ciblez un appareil non root et/ou avez des services en vous que vous ne voulez pas arrêter, les autres solutions ne fonctionneront pas.

Pour résoudre ce problème, j'ai eu recours à un récepteur de messages de diffusion que j'ai ajouté à mon activité afin de l'arrêter.

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 cette façon, vous pouvez émettre cette commande adb pour arrêter votre activité:

adb Shell am broadcast -a com.example.TestActivity.STOP
6
Patrick Valsecchi

Si tout ce que vous recherchez, c'est de tuer un colis

pkill package_name 

devrait marcher

3
steve

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

selon MAC "contrôle d'accès obligatoire" vous avez probablement l'autorisation de tuer le processus qui n'est pas démarré par root 

s'amuser!

0
sinan bilkay

Dans Eclipse, accédez à la perspective DDMS et, dans l'onglet Périphériques, cliquez sur le processus que vous souhaitez supprimer sous le périphérique sur lequel vous souhaitez le supprimer. Il vous suffit ensuite d'appuyer sur le bouton d'arrêt, ce qui devrait interrompre le processus.

Je ne sais pas comment vous feriez cela à partir de l'outil en ligne de commande, mais il doit y avoir un moyen. Peut-être que vous le faites à travers l'adb Shell ...

0
matto1990