web-dev-qa-db-ja.com

コンソールからAndroidアプリを停止する

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

adb stop com.my.app.package

テストプロセスが大幅に高速化されます。現時点では、毎回アプリをアンインストール/インストールして、手動テストケースがクリーンな状態で開始されるようにします。

181
hpique

編集:この投稿を書いて回答として受け入れられてからずっと、am force-stopコマンドは implemented by this answer で説明されているAndroidチーム。

アプリを単に停止するのではなく、テストの実行ごとに「クリーンな状態」が必要だと言うので、adb Shell pm clear com.my.app.packageを使用して、アプリプロセスandは、そのアプリのすべての保存データを消去します。


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>

132
Christopher Orr

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

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

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

491
Enrico Ros

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

それから...端末で...

adb Shell am kill com.your.package
21
dell116

デバイスコンソールから次を使用できます:pm disable com.my.app.packageこれはそれを殺します。次に、pm enable com.my.app.packageを使用して、再度起動できるようにします。

14

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

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

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

9
ThomasW

ルート化されていないデバイスをターゲットにしたり、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
7

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

pkill package_name 

動作するはずです

2
steve

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

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

楽しむ!

0
sinan bilkay

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

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

0
matto1990