他のアプリの上に描画しているアプリを特定しますか?


21

どのアプリケーションが他のアプリケーションの上に描画されているかを判断する方法はありますか?

たとえば、Facebook Messengerアプリはすべての上にチャットバブルを描くことができますが、どのアプリがこれを行っているかをどのように知ることができますか?

私の問題:

私はすべての上に広告を描いているアプリを持っています、そして、どのアプリがこれをしているのか知りたいです。アンインストールするだけでなく、このアプリを使用するすべての人に警告することもできます。(最近アプリケーションをインストールしたことはなく、すでに最新のアップデートを確認済みです。)

Android StudioからUI AutomatorのDump View Hierarchyを使用しようとしましたが、上に描画するアプリケーションをこの方法で選択できないようです。

(画像をクリックすると拡大します)

Android Studio画面


以下の回答に記載されている問題に追加するだけです(完全な状態を維持するため)。TouchWiz(Samsung Galaxy、私の場合はNote 4)で、サイドキーパネルをオフにすると、この問題が解決しました。
0xc0de

開発者以外の場合は、アプリのリストをこちらで確認してください:android.stackexchange.com/questions/154274/…-
ジョナサン

回答:


24

注意:

  • は既にPCにセットアップされているはずです。
  • バージョン4.4.xより前のAndroidの場合、ルートアクセスが必要になる場合があります。
  • 一部のコマンドは、バージョン5.1より前のAndroidでは機能しませんでした。
  • コマンドラインに慣れていない、または不快な場合、またはコマンドラインで問題を解決できない場合はアプリのアプリ」の見出しにジャンプします。

編集:以前のソリューションでチェイスを切り取り、この編集されたセクションのみに従います。

をセットアップして、次のコマンドを実行します。

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の強制停止コマンドを繰り返す必要がある場合があります。変更を元に戻す場合は、前述のコマンドでignoreallowに置き換えます。

または、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

変更を元に戻すには、上記のコマンドでdenyallowに置き換えて実行します。

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モニター内からプロセスを強制終了できるため、アプリの設定に切り替える必要はありません。

(画像をクリックすると拡大します)

IMG: IMG: IMG:


1
消防隊に感謝します。あなたの投稿で多くのことを学びました!
アンドレログジェリ

1
おかげで、「他のアプリを描画する」権限がなくても、すべてを描画できるように見えるアドウェアアプリを見つけようとしていたとき、ウィンドウリストは命の恩人でした。
クレイグリンガー

3

Android 6.0 Marshmallowを使用している場合は、そのネイティブのアクセス許可マネージャーを使用できます。

BGRに関する記事から、

Android 6.0 Marshmallowには非常に多くの新機能が期待されており、その1つにiPhoneユーザーが長年持ってきたものがあります。それは、アプリの詳細な許可です。Phone Arenaは、Marshmallowの最新の開発者プレビューをインストールし、Androidユーザーが特に共有したいアプリとのみデータを共有していることを確認するための素晴らしいヒントを投稿しました。

Marshmallowの権限管理機能にアクセスするには、[設定]メニューを開き、[アプリ]セクションをクリックします。そこから、歯車アイコンをクリックして、アプリのアクセス許可マネージャーに移動するオプションを提供します。

他のアプリの上に描画できるアプリをリストするには、[設定]-[アプリ]-[詳細](歯車アイコンのメニュー)-他のアプリの上に描画に移動します

また、アプリをタップして一時的に機能を有効/無効にし、「他のアプリへの描画を許可」を切り替えることもできます。

Android M許可マネージャー

ミディアムセバスティアーノ・ゴッタルドの画像提供


1
私にとっては、[詳細設定](歯車アイコンのメニュー)がありませんでしたが、代わりに上部/右側のドットドットドットアイコンにあります。アプリの構成。
-AnneTheAgile

3

たくさんの@Firelordに感謝します!私はついに、apkのインストールとadbバックアップの実行を妨げているアプリを見つけました。

私にとっては、これがBattery MixRead on というアプリであり、自分が何をしたか、どのようにしたかを見ることができました。

https://play.google.com/store/apps/details?id=jp.smapho.battery_mix

多くの人がapkのインストールに問題があり、「インストール」を押すことができません。私が見つけたすべての答えは、主に調光、色合い、省電力のアプリを表示することでした。私は何も使用しなかったか、同様のアプリをすべて削除したので、何が起こっていて、どのアプリが犯人であるかを見つけるのに苦労していました。そして最後に!1つの簡単なコマンドとクイック検索の後、それは解決されました:D

問題のあるアプリBattery Mixは、バッテリーレベルの状態を示すために画面の上部に細い線を表示するために使用した機能を備えたシンプルなバッテリー監視アプリです(素晴らしい小さなアプリ)。

そのため、診断するためにFirelord(上記)からのコマンドを使用してテキストファイルをダンプし、Androidシステムが原因でインストールボタンをクリックするのを妨げるアプリを検索しました。

PCからコマンドを実行する

adb shell dumpsys window windows > dumpsys-windows.txt

検索する

SYSTEM_ALERT_WINDOW

問題のあるアプリケーションを見つけるには、上記の文字列を検索しました

それは私にラインを与えました:

mOwnerUid=10129 mShowToOwnerOnly=true package=jp.smapho.battery_mix appop=SYSTEM_ALERT_WINDOW

(テキストファイルのセクションについては、画像のアップロードをご覧ください) ここに画像の説明を入力してください

すぐに、参照しているアプリjp.smaphoを認識できました。battery_mix

だから今、私はサイドロードするかadbバックアップの前にいつでもそのアプリを殺すことを知っています。


-1

Android Marshmallow、およびOxygen 3.0.2の場合、画面レイアウトを無効にするポップアップ

[アプリ]に移動し、アプリを構成して、[他のアプリの上に描画]を選択します。

移動してアプリを選択して無効にし、画面レイアウトの許可からアプリがブロックされないようにします。アプリは直接許可を取得できます

それぞれのアプリとアクセス許可に移動し、必要なアクセス許可を有効にします。

楽しい

ラージ


2
これらの情報はすべてAndrew Tの回答にすでに含まれています。同じ手順を繰り返すために新しい回答を投稿する必要はありません。まだ答えられていない質問のためにあなたの努力を節約してください:-)
ダンハルム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.