注意:
- adbは既にPCにセットアップされているはずです。
- バージョン4.4.xより前のAndroidの場合、ルートアクセスが必要になる場合があります。
- 一部のコマンドは、バージョン5.1より前のAndroidでは機能しませんでした。
- コマンドラインに慣れていない、または不快な場合、またはコマンドラインで問題を解決できない場合は、「アプリのアプリ」の見出しにジャンプします。
編集:以前のソリューションでチェイスを切り取り、この編集されたセクションのみに従います。
adbをセットアップして、次のコマンドを実行します。
adb shell "dumpsys window windows | toybox grep -i system_alert_window"
画面上のすべてのアクティブなオーバーレイの出力を取得します。画面上にアクティブなオーバーレイを表示するDU Screen Recorder、TaskerおよびAZ Screen Recorderを使用した出力の例:
bash-4.3#adb shell "dumpsys window windows | toybox grep -i system_alert_window"
mOwnerUid = 10087 mShowToOwnerOnly = true package = net.dinglisch.android.tasker appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = true package = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = true package = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10649 mShowToOwnerOnly = true package = com.duapps.recorder appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10649 mShowToOwnerOnly = true package = com.duapps.recorder appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = true package = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = true package = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10638 mShowToOwnerOnly = true package = ninja.sesame.app.edge appop = SYSTEM_ALERT_WINDOW
package =の隣でappopの前に強調表示されているテキストは、現在画面にオーバーレイを描画しているアプリのパッケージ名です。あなたの場合、パッケージ名を含む出力は異なります。
パッケージ名を書き留め(以下PKGとして)、次のコマンドを実行します。
adb shell am force-stop PKG
PKGを書き留めたパッケージ名に置き換えます。複数のパッケージ名がある場合は、一度に1つのパッケージ名でコマンドを繰り返します。
このコマンドはアプリを強制的に停止し、オーバーレイを破棄します。これは動作するはずです。または、次のコマンドを使用して、アプリから「他のアプリの上に描画」(略してスクリーンオーバーレイ)の許可を取り除いてもかまいません。
adb shell appops set PKG SYSTEM_ALERT_WINDOW ignore
この場合も、必要に応じてPKGをパッケージ名に置き換えます。さらに、PKGの強制停止コマンドを繰り返す必要がある場合があります。変更を元に戻す場合は、前述のコマンドでignoreをallowに置き換えます。
または、App Opsを使用して、GUIから権限を管理することもできます。
どのパッケージ名がどのアプリに対応するかを知るには、アプリケーション情報のようなオープンソースのアプリを試してみてください。パッケージ名で検索すると、アプリの名前が表示されます。
編集終了
あなたは本当に今はもう読んでする必要はありません。以前のソリューション(つまり、次のセクション)はそのままにしておきます。21人の投票者がそれを助けてくれて、もう混乱することはないからです。
簡単な方法は、「他のアプリを描画する」権限を持つすべてのアプリを見つけて、画面で現在アクティブなアプリからそれらを選択することです。その後、アクティブなオーバーレイを担当するアプリを特定するまで、これらの一般的なアプリを強制停止します。
オーバーレイの許可を持つアプリを列挙する
アプリがオーバーレイを作成するために必要な権限はandroid.permission.SYSTEM_ALERT_WINDOW
(他のアプリの上に描画)です。
上記の許可を持つすべてのインストール済みアプリを見つける必要があります。この方法を見つけるのはあなた次第です。ここでの私の答えはあなたを助けるかもしれません。
ラベルではなくアプリのパッケージ名が必要なことに注意してください。
アクティブなウィンドウからチェリーピック
コマンドを実行する
adb shell dumpsys window windows
これにより、画面上に何かが表示される原因の詳細が表示され、アプリのコンポーネント名などが表示されます。
名前をどのように抽出するかはあなた次第です。ただし、このコマンドを試すことができます
adb shell 'dumpsys window windows | grep "Window #"'
エラー:「grep」が内部コマンドまたは外部コマンドとして認識されない場合は、Windowsで次の代替コマンドを試してください。
adb shell "dumpsys window windows | grep 'Window #'"
デモ出力
ウィンドウ#4ウィンドウ{42065d50 u0 com.android.phone/com.mediatek.phone.UssdAlertActivity}:
ウィンドウ#5ウィンドウ{42197468 u0 ginlemon.flowerpro / ginlemon.flower.HomeScreen}:
ウィンドウ#6ウィンドウ{420fdb58 u0 com.android.systemui.ImageWallpaper}:
ウィンドウ#7ウィンドウ{421e3b88 u0 com.android.contacts / com.android.contacts.activities.DialtactsActivity}:
上記の出力では、後続u0
および先行するもの/
はすべて アプリのパッケージ名です。アプリには、画面に何かを表示する複数のコンポーネントを含めることができます。
これらのパッケージ名のリストを作成する必要があります。BusyBoxがインストールされている場合は、次のことができます
adb shell 'dumpsys window windows | grep "Window #" | sed -e "s/.*u0 //g" -e "s/\/.*//g" -e "s/}://g"'
とにかく、今、あなたは2つのリストを持っているでしょう:
- 最初のリストには、権限を持つすべてのアプリが含まれています
android.permission.SYSTEM_ALERT_WINDOW
。
- 2番目のリストには、画面に何かをアクティブに表示しているすべてのアプリが含まれています。
これら2つのリストを比較し、両方のリストに共通するアプリを選び出します。この3番目のリストは、オーバーレイを描画する権限を持つアプリで構成され、現在アクティブなオーバーレイを画面に描画しています。
殺す時
3番目のリストの各アプリを1つずつ強制終了し、オーバーレイの状態を確認します。使用するam force-stop PACKAGE_NAME --user 0
か、自分に適した他の方法を使用できます。PACKAGE_NAME
アプリのパッケージ名です。
編集:アプリを殺す必要はありません。他のアプリを描画する許可をアプリに拒否することを検討できます。次のコマンドを使用します。
adb shell 'appops set PACKAGE SYSTEM_ALERT_WINDOW deny' # replace PACKAGE with package name of the app
変更を元に戻すには、上記のコマンドでdenyをallowに置き換えて実行します。
Android Marshmallowを実行している場合は、Andrew T.によるこの回答を使用できます。
注:前述のコマンドは、Android 5.1.1および6.0.1(CMビルド)で正常にテストされています。コマンドがAndroid 5.0.xで動作する可能性もありますが、保証はできません。Lollipopより前にリリースされたAndroidバージョンでそのコマンドを実行すると、エラーが発生します。
多くの場合、オーバーレイは知覚可能であるため、それを引き起こしたアプリが強制終了されるとすぐに消えます。したがって、どのアプリがそのオーバーレイを引き起こしていたかがわかります。
アプリ向けアプリ
Izzyが最初に提案した、インストール済みのアプリに付与された許可をリストする機能を備えたアプリを使用して、「他のアプリを描画する」許可を持つアプリを選択できます。このようなアプリを自分で検索するか、IzzyのWebサイトで管理されているアクセス許可チェッカーのリストを使用できます。
一部のプロセスを強制停止/強制終了するには、プロセス/アプリマネージャーも必要です。OS Monitorをお勧めしますが、あなたは有能なアプリを自由に使用できます。[ システム情報]の下の関連アプリを参照してください。
デモ目的のみ
Advanced Permission Managerを試して、「他のアプリを描画する」権限を持つアプリを一覧表示しました。その後、OSモニターに切り替えて、フォアグラウンドとバックグラウンドで実行されているアプリを確認しました。両方のアプリからの出力を一致させ、両方に共通するアプリを個別に強制停止しました。OSモニター内からプロセスを強制終了できるため、アプリの設定に切り替える必要はありません。
(画像をクリックすると拡大します)