無効にしたアプリがまだ実行されているのはなぜですか?


8

標準のAndroid(KitKat)アプリマネージャーを使用して無効にされたアプリ(Google Contacts Syncなど)が、プロセスオブザーバーツールを使用すると実行中として表示されることに気づきました。これは、デバイスが再起動された後でも当てはまります。

無効にしたアプリがまだ実行されているのはなぜですか?それらを実際に無効にする効果的な(そして安全な)方法はありますか?

root権限を必要とするソリューションは受け入れられます。

(上記の特定の例では、Androidに連絡先を同期しないように指示することはできますが、それでもGoogle連絡先同期プロセスは実行されます。しかし、その例にこだわらないでください...これは単なる例です。)


「無効」ボタンのすぐ隣には「強制停止」ボタンがあります。それを押すと、プロセスが終了し、開始されなくなります。
GiantTree、2015年

@GiantTreeありがとう。再起動後、再び起動しませんか?
RockPaperLizard 2015年

4
あなたのケースでは、システムアプリがそのパッケージのエクスポートされたサービスを明示的に呼び出しており、そのプロセス(およびその他)を確実に強制終了する唯一の方法は、Greenify、Amplify(Xposedが必要)または同様のアプリを使用して積極的に強制終了することです。注:PackageManagerには無効化されたアプリの実行を許可しないタスクがあるため、これは発生しないはずであり、バグと見なされるべきです。
GiantTree、2015年

1
その点では、すべてのサービス、レシーバー、アクティビティ、コンテンツプロバイダーを無効にし、SystemUIアプリも無効にしました。デバイスを再起動し、アプリがメモリにまだロードされているものを推測します(pmの場合はそうblock/hideではありません)。これにより、アプリが現在ロードされている原因は何なのかと思います。それがメモリにロードされている間、背景、テーマ、ステータスバーなどの欠如によって表面的な不在を観察できることは別の問題です。おそらく、これから新しい質問を偽造することができます。
ファイアロード

1
@Firelordそれは私が上で指摘したことだと思います:アプリを無効にすると、それは「無効とマークされた」だけです(ランチャーなどには表示されません)–それでもシステム(パッケージマネージャー)に登録されているため、他のアプリがそれを見つけて、その意図を呼び出します。非表示/ブロックは「アンインストールの残し.apkとデータの背後」に相当するようです–そのため、アプリは「完全に登録解除され、ファイルマネージャー以外のすべてからは見えなくなります」ので、他のアプリはインテントを呼び出すことができなくなりますそれらを見つけることができません。
イジー

回答:


7

バージョン4.4.x以降を使用している場合、Androidは、アプリを本当に無効にするためにrootアクセス権を持つ必要はありません。あなたに必要なのはPCでのセットアップと、ルート化されていないデバイスで有効になっているUSBデバッグ、またはルート化されたデバイスのターミナルエミュレーターアプリ(adbも使用できます)。

Package Mangerの(pm)の使用法を確認すると、

pmブロック[--user USER_ID] PACKAGE_OR_COMPONENT ")
午後ブロック解除[--user USER_ID] PACKAGE_OR_COMPONENT ")

ロリポップの場合、

pm非表示[--user USER_ID] PACKAGE_OR_COMPONENT ")
pm unhide [--user USER_ID] PACKAGE_OR_COMPONENT ")

パッケージをブロックまたは非表示にする(安全)には、次のようにします。

pm block PACKAGE # for KitKat
pm hide PACKAGE  # for Lollipop

パッケージのブロックを解除または再表示するには、次のようにします。

pm unblock PACKAGE #for KitKat 
pm unhide PACKAGE  # for Lollipop

PACKAGE→アプリのパッケージ名。アプリのパッケージ名を知るには:

adb shell非常にコマンドの前に追加して、PCから実行します。

hideの背後にある関数には、ソースコード内に次のコメントがあります。

パッケージを非インストール状態と同じように隠し状態にし、パッケージを使用不可にしますが、データや実際のパッケージファイルは削除されません。非表示状態をリセットするか、インストールすることにより、アプリケーションを再表示できます

同様のコメントがここのブロック に対して行われ ます

主張を検証するために、dumpsysツールなどのシステムサービスを使用したりmeminfoprocstatsactivity使用してすべてのプロセスを一覧表示したりできます。ブロックされた/非表示のアプリのアクティブな存在を見つけることはできません。ps

同じことは、GUIを使用して無効にしたり、アプリのシステムの多くのために行くpm disableすべてのアプリケーションのためにではなく、でも無効アプリが受け取ることができるので、放送、それがメモリにロードされている場合にのみ行うことができ、それがために登録した、1。それにもかかわらず、無効化されたアプリはそれ自体では動作できず、他のアプリによって実行することもできません。

私は私の質問pm hide VS pm disable-アイデンティティの危機について、非表示 / ブロック無効化の違いのいくつかを主張しました 。この回答に対する補足情報のみを提供しているので、スキップしてもかまいません。

編集:

このテクニックは、Android KitKatのすべてのアプリで機能するとは限りません。その場合は、アプリのAPKから読み取り権限を取り消すか、アプリのファイル名から拡張子.APKを削除し(Jaskaranbirが一度提案した後半)、その後ソフト/フル再起動します。これは、システムからアプリを削除するのと同じですが、すべてのファイルが元の場所に残る点が異なります。

どちらの手順も、ルートファイルマネージャーアプリを使用して実行できます。コマンドラインの方法は次のとおりです。

adb shell su -c 'chmod 000 /data/app/PACKAGE*'             # 000 means no read-write-executable permission to user,group and others. 
adb shell su -c 'mv /data/app/PACKAGE* /data/app/PACKAGE'  # doing renaming by moving the file
adb reboot

1:事実を裏付ける技術的証拠がない


正解です。ありがとうございました!最初に標準のAndroidアプリマネージャーを使用してアプリを無効にするのが最善ですか、それとも無効になっていないことを確認するのが最善ですか?
RockPaperLizard 2015年

選択する場合はアプリを無効にする必要はないので、pm block/hideそのままにしておきます。
ファイアロード

既に無効になっている場合、再度有効にするのが最善ですか?
RockPaperLizard 2015年

1
これは奇妙です。私はキットカットでブロッキングsystemuiをテストしましたが、驚いたことに、ブロックは無効化と同じように機能し、このアプリはメモリに残ります。SystemUIプロセスを強制終了しても、forkされました。バグまたは望ましい動作であることはわかりませんが、いずれにしても、答えに記載されている私のLollipop関連の結果とは対照的です。答えは今ではほとんど役に立たないと思います。
ファイアロード

1
@RockPaperLizard、私はあなたに非常に単純なトリックを教えるのを忘れていました。パッケージファイル(またはLollipopの場合はベースディレクトリ)の読み取りアクセス許可を取り消し、再起動して完全に実行します。たとえば、root権限を使用すると、この方法でSystemUIを停止できますadb shell su -c "chmod 111 /system/app/SystemUI.apk"。111は、所有者、グループ、およびその他のユーザーに対して実行可能権限のみを設定することを意味します。再起動すると、アプリがシステムに表示されなくなります。に設定することもでき000ます。
ファイアロード
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.