コンソールからAndroidアプリを停止することはできますか?何かのようなもの:
adb stop com.my.app.package
テストプロセスが大幅に高速化されます。現時点では、毎回アプリをアンインストール/インストールして、手動テストケースがクリーンな状態で開始されるようにします。
編集:この投稿を書いて回答として受け入れられてからずっと、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>
アプリを停止するクリーンな方法は次のとおりです。
adb Shell am force-stop com.my.app.package
この方法では、プロセスIDを把握する必要はありません。
最初に、アプリをバックグラウンドに置きます(デバイスのホームボタンを押します)
それから...端末で...
adb Shell am kill com.your.package
デバイスコンソールから次を使用できます:pm disable com.my.app.package
これはそれを殺します。次に、pm enable com.my.app.package
を使用して、再度起動できるようにします。
アプリケーションパッケージにアクセスできる場合は、-rオプションを使用してインストールでき、副作用として現在実行されているプロセスを強制終了します。このような:
adb -d install -r MyApp.apk ; adb -d Shell am start -a Android.intent.action.MAIN -n com.MyCompany.MyApp/.MyActivity
-rオプションは、アプリに現在関連付けられているデータを保持します。ただし、言及したようなクリーンな状態が必要な場合は、そのオプションを使用したくない場合があります。
ルート化されていないデバイスをターゲットにしたり、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
探しているのがパッケージを殺すことだけなら
pkill package_name
動作するはずです
adb Shell killall -9 com.your.package.name
mAC「強制アクセス制御」によると、おそらくルートによって開始されていないプロセスを強制終了する権限があります。
楽しむ!
EclipseでDDMSパースペクティブに移動し、デバイスタブで、強制終了するデバイスの下で強制終了するプロセスをクリックします。次に、停止ボタンを押すだけで、プロセスが強制終了されます。
コマンドラインツールからこれをどのように行うかはわかりませんが、方法が必要です。たぶん、あなたはadbシェルを通してそれをします...