231 votes

Arrêter une application Android depuis la console

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

 adb stop com.my.app.package
 

Cela accélèrerait tellement notre processus de test. En ce moment, nous désinstallons / installons l'application à chaque fois pour nous assurer que les tests manuels commencent par un état propre.

687voto

Enrico Ros Points 1316

La façon propre d’arrêter l’application est la suivante:

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

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

161voto

Christopher Orr Points 58514

Edit: Longtemps après, j'ai écrit ce post, et il a été accepté comme réponse, l' am force-stop de commande a été mis en œuvre par l'Android de l'équipe, comme mentionné dans la réponse ci-dessous.

Sinon: Plutôt que de simplement l'arrêt de l'application, puisque vous parlez de vouloir une "table rase" pour chaque test, vous pouvez utiliser adb shell pm clear com.my.app.package, ce qui permettra d'arrêter l'application de processus et d' effacer toutes les données stockées pour cette application.


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

Qui ne fonctionne que pour les dispositifs/les émulateurs où vous avez racine immédiatement après l'exécution d'un shell. Qui peut probablement être perfectionnée, pour appeler su à l'avance.

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

18voto

Someone Somewhere Points 8361

Vous pouvez utiliser les éléments suivants depuis 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 lancer à nouveau.

10voto

ThomasW Points 8078

Si vous avez accès au package d'application, vous pouvez l'installer avec l'option -r et le processus sera supprimé s'il est en cours d'exécution 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 conserve les données actuellement associées à l'application. Toutefois, si vous voulez une liste claire comme vous le mentionnez, vous ne voudrez peut-être pas utiliser cette option.

7voto

Si vous ciblez un périphérique non root et / ou que vous avez des services APK que vous ne souhaitez 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
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X