231

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

adb stop com.my.app.package

それは私たちのテストプロセスを非常にスピードアップするでしょう。現在、手動テストケースがクリーンな状態で開始されることを確認するために、毎回アプリをアンインストール/インストールしています。

4

12 に答える 12

686

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

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

このようにして、プロセスIDを把握する必要はありません。

于 2012-09-05T03:45:25.700 に答える
161

編集:私がこの投稿を書き、それが答えとして受け入れられてからずっと後、この答え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>

于 2010-06-25T10:38:49.663 に答える
40

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

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

adb shell am kill com.your.package
于 2015-11-15T03:21:23.820 に答える
18

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

于 2011-12-30T22:31:11.270 に答える
10

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

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

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

于 2011-11-09T10:32:07.250 に答える
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
于 2013-07-17T08:14:12.240 に答える
3

「stop」コマンドはforce-stop;として実装されます。バックグラウンドアプリの実行を停止します。フォアグラウンドにある場合は、次のようにも停止します。

adb shell am force-stop com.android.providers.telephony

パッケージをクリアすると、データも削除されます。

adb shell pm clear com.android.providers.telephony

すべてのSMSを削除します

どちらを選択するかに注意してください。

于 2021-07-25T20:56:46.303 に答える
2

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

pkill package_name 

動作するはずです

于 2016-03-14T10:32:26.917 に答える
2

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

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

楽しんで!

于 2018-09-04T21:16:38.277 に答える
1

Linuxですべての回答を試しましたが、ルート化されていないデバイスのAPIレベル23でのデバッグには何も機能しませんでした。そのため、[開発者向けオプション]->[アプリ]セクション->[アプリをバックグラウンドに置くときは常にアクティビティを保持しない]をオンにして、デバッグの代替手段を見つけました。殺される

PSは、デバッグが終了した後、チェックを外すことを忘れないでください

于 2020-08-18T20:52:29.500 に答える
0

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

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

于 2010-06-25T10:07:29.283 に答える
-2
pkill NAMEofAPP

ルート権限を取得していないマシュマロ、termux、ターミナルエミュレータ。

于 2016-12-18T05:14:57.707 に答える