it-swarm.com.de

Stoppen einer Android-App von der Konsole

Kann eine Android-App von der Konsole aus angehalten werden? So etwas wie:

adb stop com.my.app.package

Dies würde unseren Testprozess so sehr beschleunigen. Jetzt deinstallieren/installieren wir die App jedes Mal, um sicherzustellen, dass die manuellen Testfälle mit einem sauberen Status beginnen.

171
hpique

Edit: Lange nachdem ich diesen Beitrag geschrieben hatte und als Antwort angenommen wurde, wurde der am force-stop-Befehl vom Android-Team implementiert , wie in diese Antwort erwähnt.

Alternativ: Anstatt die App zu stoppen, können Sie adb Shell pm clear com.my.app.package verwenden, da Sie sagen, dass für jeden Testlauf ein "sauberer Plan" gewünscht wird. Dadurch wird der App-Prozess angehalten, und löscht alle gespeicherten Daten diese app.


Wenn Sie mit Linux arbeiten:
adb Shell ps | grep com.myapp | awk '{print $2}' | xargs adb Shell kill

Dies funktioniert nur für Geräte/Emulatoren, bei denen Sie root direkt nach dem Ausführen einer Shell haben. Das kann wahrscheinlich etwas verfeinert werden, um vorher su aufzurufen.

Andernfalls können Sie Folgendes tun (manuell oder vermutlich Skript):
pc $ adb -d Shell
Android $ su
Android # ps
Android # kill <process id from ps output>

127
Christopher Orr

Die saubere Art, die App zu stoppen, ist:

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

Auf diese Weise müssen Sie die Prozess-ID nicht ermitteln.

462
Enrico Ros

Legen Sie die App zunächst in den Hintergrund (drücken Sie die Home-Taste des Geräts).

Dann .... in einem Terminal ....

adb Shell am kill com.your.package
20
dell116

sie können von der Gerätekonsole aus Folgendes verwenden: pm disable com.my.app.package. Dadurch wird es beendet. Verwenden Sie dann pm enable com.my.app.package, damit Sie es erneut starten können.

14

Wenn Sie Zugriff auf das Anwendungspaket haben, können Sie die Installation mit der Option -r durchführen, und der Prozess wird abgebrochen, wenn er derzeit als Nebeneffekt ausgeführt wird. So was:

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

Die Option -r behält die aktuell mit der App verbundenen Daten bei. Wenn Sie jedoch eine saubere Tafel wünschen, wie Sie es bereits erwähnt haben, möchten Sie diese Option möglicherweise nicht verwenden.

9
ThomasW

Wenn Sie auf ein nicht gerootetes Gerät abzielen und/oder Dienste in Ihrer APK haben, die Sie ebenfalls nicht beenden möchten, funktionieren die anderen Lösungen nicht.

Um dieses Problem zu lösen, habe ich einen Broadcast-Nachrichtenempfänger verwendet, den ich zu meiner Aktivität hinzugefügt habe, um ihn zu stoppen.

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));
    }
}

Auf diese Weise können Sie diesen ADB-Befehl ausgeben, um Ihre Aktivität zu beenden:

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

Wenn Sie alles suchen, ist das Töten eines Pakets

pkill package_name 

sollte arbeiten

3
steve

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

laut MAC "obligatorische Zugriffskontrolle" haben Sie wahrscheinlich die Berechtigung, den Prozess zu beenden, der nicht von root gestartet wird 

habe Spaß!

0
sinan bilkay

Wechseln Sie in Eclipse zur DDMS-Perspektive, und klicken Sie auf der Registerkarte Geräte auf den Prozess, den Sie unter dem Gerät beenden möchten, auf dem Sie es beenden möchten. Sie müssen dann nur noch die Stopp-Taste drücken und der Prozess sollte abgebrochen werden.

Ich bin nicht sicher, wie Sie dies mit dem Befehlszeilentool tun würden, aber es muss einen Weg geben. Vielleicht machst du es durch die Adb-Shell ...

0
matto1990