コンソールからAndroidアプリを停止することは可能ですか?何かのようなもの:
adb stop com.my.app.package
それは私たちのテストプロセスを非常にスピードアップするでしょう。現在、手動テストケースがクリーンな状態で開始されることを確認するために、毎回アプリをアンインストール/インストールしています。
アプリを停止するクリーンな方法は次のとおりです。
adb shell am force-stop com.my.app.id
このようにして、プロセスIDを把握する必要はありません。
編集:私がこの投稿を書き、それが答えとして受け入れられてからずっと後、この答え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>
まず、アプリをバックグラウンドに置きます(デバイスのホームボタンを押します)
次に....ターミナルで....
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
「stop」コマンドはforce-stop
;として実装されます。バックグラウンドアプリの実行を停止します。フォアグラウンドにある場合は、次のようにも停止します。
adb shell am force-stop com.android.providers.telephony
パッケージをクリアすると、データも削除されます。
adb shell pm clear com.android.providers.telephony
すべてのSMSを削除します
どちらを選択するかに注意してください。
あなたが探しているのがパッケージを殺すことだけなら
pkill package_name
動作するはずです
adb shell killall -9 com.your.package.name
MACの「強制アクセス制御」によると、rootによって開始されていないプロセスを強制終了する権限がある可能性があります
楽しんで!
Linuxですべての回答を試しましたが、ルート化されていないデバイスのAPIレベル23でのデバッグには何も機能しませんでした。そのため、[開発者向けオプション]->[アプリ]セクション->[アプリをバックグラウンドに置くときは常にアクティビティを保持しない]をオンにして、デバッグの代替手段を見つけました。殺される
PSは、デバッグが終了した後、チェックを外すことを忘れないでください
EclipseでDDMSパースペクティブに移動し、[デバイス]タブで、強制終了するデバイスの下で強制終了するプロセスをクリックします。次に、停止ボタンを押すだけで、プロセスが強制終了されます。
コマンドラインツールからこれをどのように行うかはわかりませんが、方法はあるはずです。多分あなたはadbシェルを通してそれをします...
pkill NAMEofAPP
ルート権限を取得していないマシュマロ、termux、ターミナルエミュレータ。