コンソールからのAndroidアプリの停止


205

コンソールからAndroidアプリを停止することはできますか?何かのようなもの:

adb stop com.my.app.package

テストプロセスが大幅にスピードアップします。現在、毎回アプリをアンインストール/インストールして、手動テストケースがクリーンな状態で開始することを確認しています。

回答:


146

編集:私がこの投稿を書いて、それが回答として受け入れられたずっと前に、この回答で述べたように、am force-stopコマンドはAndroidチームによって実装されました。

また:むしろあなたは、あなたが使用することができ、各テスト実行のための「白紙の状態」を望む言及以来ちょうど、アプリを停止するよりもadb shell pm clear com.my.app.package、アプリケーション・プロセスを停止する、そのアプリのために保存されているすべてのデータをクリア。


Linuxを使用している場合:
adb shell ps | grep com.myapp | awk '{print $2}' | xargs adb shell kill

これは、シェルを実行するとすぐにルートを持つデバイス/エミュレータでのみ機能します。それはおそらく、su事前に呼び出すように少し調整することができます。

それ以外の場合は、(手動で、または私はスクリプトで記述したと思います)次のことができます。
pc $ adb -d shell
android $ su
android # ps
android # kill <process id from ps output>


6
それを機能させることはできませんでした(killとsuの両方のアクセス許可が拒否されました)。
hpique

9
ああ、ルート化されたデバイスを持っていないようです。少なくともエミュレータで確実に動作します!:)
Christopher Orr

1
パーティションを読み書き可能で再マウントして、ルートとしてadbを実行する必要があるかもしれません:adb remount; adb root#これは愚かな推測だ
Rorist

570

アプリを停止するクリーンな方法は次のとおりです。

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

この方法では、プロセスIDを把握する必要はありません。


28
これは、この問題の受け入れられる答えになるはずです。質問には、ルート権限を取得したデバイスは含まれていません。
Dimitris 2013年

10
@Dimitris force-stopコマンドが存在する前に、上記の回答を書いた。私はこれを指すように私の答えを更新しました。
Christopher Orr 2013年

2
また、テストを実行するための「白紙の状態」を実際に提供する良い方法を使用して、回答を更新しました。
Christopher Orr 2013年

この後にBroadcastReceiverは(次のアプリまで営業)動作しないことが重要ポイントcommonsware.com/blog/2011/07/13/...
CAMOBAP

でテストしましたが、アプリに関してが見つかった場合でも、アプリAndroid 9.0 API Level 28は[ 最近のアプリ]に引き続き表示されPIDます。バックグラウンドアプリからでもアプリを完全に停止する方法を知っていますか?
talha06

32

まず、アプリをバックグラウンドに配置します(デバイスのホームボタンを押します)

次に....ターミナルで...

adb shell am kill com.your.package

11
NOTE私は、これはAPIのレベルではもう働きを信じていない> 22.
dell116

マシュマロを搭載したNexus 5で動作します
urSus

これは機能します。ただし、アプリは必ず最初にバックグラウンドに置いてください。
PhillyTheThrilly

17

デバイスコンソールから次のコマンドを使用できますpm disable com.my.app.package。これにより強制終了されます。次に、pm enable com.my.app.packageそれを再起動できるように使用します。


1
根ざしていない電話では、これは何もしないようです。
Robert Muil

ルート権限を取得していないスマートフォンで確認しました。最初はいくつかの許可拒否メッセージがあり、それが私のDalvicVMアプリ/サービスを殺しました。ちょっと待ってください。
LikeYou 2013年

1
根ざしたデバイスではこれは機能し、アプリ/サービスを停止したままにできるという追加の利点があります。これは、テストの目的で望ましい場合があります。
miki 2013

2
注:adb shellを実行してから、su最初に実行する必要があります。
kakyo

警告:これにより、再度有効にした後でも、そのパッケージのランチャーアイコンショートカットが表示されなくなります。
Elad Nava

10

アプリケーションパッケージにアクセスできる場合は、-rオプションを使用してインストールできます。現在、副作用として実行されている場合は、プロセスが強制終了されます。このような:

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

-rオプションは、現在アプリに関連付けられているデータを保持します。ただし、あなたが言及したような白紙の状態が必要な場合は、そのオプションを使用したくない場合があります。


7

ルート権限を取得されていないデバイスをターゲットにしている場合や、APKに停止したくないサービスがある場合、他のソリューションは機能しません。

この問題を解決するために、アクティビティに追加したブロードキャストメッセージレシーバーを使用してそれを停止しました。

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

そうすれば、次のadbコマンドを発行してアクティビティを停止できます。

adb shell am broadcast -a com.example.TestActivity.STOP

2

あなたが探しているすべてがパッケージを殺すことであるなら

pkill package_name 

うまくいくはず


注:これは新しいAndroidバージョンでのみ機能します。pkillは4.4エミュレータでは使用できませんが、Android 6エミュレータでは使用できます。
Simon Warta 2017年

1

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

MACの「強制アクセス制御」によると、おそらくrootによって開始されていないプロセスを強制終了する権限があります

楽しんで!


このコマンドの実行に対する応答で「操作は許可されていません」
Abdul Rahman Shamair

0

日食でDDMSパースペクティブに移動し、デバイスタブで、強制終了するデバイスの下で強制終了するプロセスをクリックします。次に、停止ボタンを押すだけで、プロセスが強制終了されます。

コマンドラインツールからこれをどのように実行するかはわかりませんが、方法があるはずです。多分あなたはadbシェルを通してそれをします...


Eclipseを実行せずにコマンドラインからこれを実行する方法について、GitHubコードスニペットを見つけて少し拡張しました
sschuberth

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.