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.
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>
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.
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
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.
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.
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
Si tout ce que vous recherchez, c'est de tuer un colis
pkill package_name
devrait marcher
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!
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 ...