web-dev-qa-db-ja.com

ADBを使用してすべてのアクティブなタスク/アプリを強制終了するにはどうすればよいですか?

ADBを使用してタスクマネージャーでアクティブなタスク/アプリを強制終了[〜#〜] all [〜#〜]できますか?これは タスクマネージャ を開き、各タスクを1つずつ強制終了するのと同じです...

次の adb Shell コマンドを使用してみましたが、すべてのタスクが強制終了されませんでした。

adb Shell am kill-all

adb Shell am force-stop <PACKAGE>コマンドは使用できません。実行中のパッケージ/アプリを知る必要があるためです。実行中のすべてのユーザーアプリタスクを強制終了したい。同様に、タスクマネージャを使用して、各タスクを1つずつ強制終了します。

コマンドの説明によると、kill-allはすべてのバックグラウンドプロセスを強制終了します。バックグラウンドプロセスは「サービス」に相当し、タスクは「アクティビティ」に相当しますか?

また、ユーザーデータを保持しながら、ADBを使用してアプリのキャッシュをクリアすることは可能ですか? adb Shell pm clearはすべてのユーザーデータを消去するようです。キャッシュのみをクリアしたい。

私が尋ねる理由は、いくつかのユーザーアプリでパフォーマンステストを行っているためです。各テストを有効にするために、ユーザーアプリのいずれにもタスク、アクティビティ、サービス、キャッシュがバックグラウンドにないことを確認します。

10
Zythyr

白紙の状態を開始する場合、つまりアプリを閉じてデータを消去する場合は、次の操作を実行できます

adb Shell pm clear com.yourapp.package
8
Nishant.

force-stopを使用できます。ルート権限は必要ありません。

adb Shell am force-stop <PACKAGE>

そして、あなたはトップランニングアクティビティ/アプリからパッケージ名を取得できます

adb Shell "dumpsys activity | grep top-activity"

その後、結果を少し再生して、パッケージを抽出する必要があります。ここで、my Javaそれを行うコード:

public void parseResult(String line){
        int i = line.indexOf(" 0 ");
        if(i == -1){
            return;
        }
        line = line.substring(i);
        i = line.indexOf(":");
        if(i == -1){
            return;
        }
        line = line.substring(i + 1);
        i = line.indexOf("/");
        return line.substring(0, i);
}
6
Ilya Gazman

ルート権限を取得されていないデバイスについては、Faisal Ameerのスクリプトを拡張しました

adb Shell ps | grep -v root | grep -v system | grep -v "Android.process." | grep -v radio | grep -v "com.google.process." | grep -v "com.lge." | grep -v Shell | grep -v NAME | awk '{print $NF}' | tr '\r' ' ' | xargs adb Shell am force-stop

adb Shell am force-stopはroot権限を必要としません。アプリケーションは引き続きアプリケーションドロワーを実行しているデバイスに表示されますが、パッケージプロセスがクリアされていることを確認しました。

adb Shell dumpsys meminfo relevant.package.names
1

実行中のアプリを見つけ、システムアプリなどを無視してkillすると、次のコマンドですべてが実行されます。

adb Shell ps|grep -v root|grep -v system|grep -v NAME|grep -v Shell|grep -v smartcard|grep -v androidshmservice|grep -v bluetooth|grep -v radio|grep -v nfc|grep -v "com.Android."|grep -v "Android.process."|grep -v "com.google.Android."|grep -v "com.sec.Android."|grep -v "com.google.process."|grep -v "com.samsung.Android."|grep -v "com.smlds" |awk '{print $2}'| xargs adb Shell kill

このような場合は、さらに例外を追加できます。 grep -v "例外"

1
Faisal Ameer