Замечания:
- adb уже должен быть настроен на ПК.
- Для Android более ранней, чем версия 4.4.x, может потребоваться доступ с правами root.
- Некоторые команды не будут работать на Android ранее, чем версия 5.1.
- Перейдите к заголовку « Приложения для приложений », если вы незнакомы или не знакомы с командной строкой, и / или командная строка не может решить вашу проблему.
Редактировать: сократить погоню в более раннем решении и следовать только этому отредактированному разделу.
Настройте 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 | toybox grep -i system_alert_window"
mOwnerUid = 10087 mShowToOwnerOnly = true пакет = net.dinglisch.android.tasker appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = true пакет = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = true пакет = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10649 mShowToOwnerOnly = true пакет = com.duapps.recorder appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10649 mShowToOwnerOnly = true пакет = com.duapps.recorder appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = true пакет = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = true пакет = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10638 mShowToOwnerOnly = true пакет = ninja.sesame.app.edge appop = SYSTEM_ALERT_WINDOW
Выделенный текст рядом с package = и перед appop - это название пакета (ов) приложений, которые в настоящее время рисуют наложение на экране. В вашем случае выходные данные, включая имена пакетов, будут отличаться.
Запишите имена пакетов (далее как PKG) и выполните эту команду:
adb shell am force-stop PKG
Замените PKG на имя пакета, которое вы записали. Если у вас было несколько имен пакетов, повторите команду с одним именем пакета за раз.
Команда принудительно остановит приложение и тем самым откажется от наложения. Это должно работать. В качестве альтернативы вы можете лишить приложения разрешения «Рисовать поверх других приложений» (кратко наложение экрана) с помощью этой команды:
adb shell appops set PKG SYSTEM_ALERT_WINDOW ignore
Снова замените PKG на имя пакета при необходимости. Кроме того, вам может потребоваться повторить команду принудительной остановки для PKG. Если вы решили отменить изменения, замените ignore на allow в указанной выше команде.
В качестве альтернативы вы можете использовать App Ops для управления разрешениями из графического интерфейса.
Чтобы узнать, какое имя пакета соответствует какому приложению, вы можете попробовать приложение с открытым исходным кодом, такое как « Информация о приложениях» . Поиск по имени пакета, и вы получите имя приложения.
Редактирование завершено
Вам действительно не нужно больше читать сейчас . Я оставляю предыдущее решение (т.е. следующий раздел) без изменений, потому что 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"'
Во всяком случае, теперь у вас будет два списка:
- Первый список содержит все приложения, имеющие разрешение
android.permission.SYSTEM_ALERT_WINDOW
.
- Второй список содержит все приложения, активно отображающие что-то на экране.
Сравните эти два списка и отдельные приложения, которые являются общими в обоих списках. Этот третий список будет состоять из приложений, имеющих разрешение на рисование наложения, и в настоящее время на экране отображает активное наложение.
Время убивать
Убейте каждое из приложений из третьего списка одно за другим и обратите внимание на состояние наложения. Вы можете использовать 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, этот ответ Эндрю Т. может быть использован.
Примечание . Вышеуказанная команда успешно протестирована на Android 5.1.1 и 6.0.1 (сборки CM). Также возможно, что команда работает на Android 5.0.x, но я не могу гарантировать . Выполнение этой команды в версии Android, выпущенной до Lollipop, может привести к сбою.
Поскольку наложение часто воспринимается, оно мгновенно исчезает в тот момент, когда приложение, вызывающее его уничтожение, следовательно, вы будете знать, какое приложение вызывало это наложение.
Приложения для приложений
Первоначально предложенный Izzy, вы можете использовать приложение, которое имеет функции перечисления разрешений, предоставленных установленным приложениям, чтобы выделить приложения, имеющие разрешение «рисовать поверх других приложений». Вы можете либо выполнить поиск такого приложения самостоятельно, либо воспользоваться списком проверки прав доступа, который ведет Иззи на своем веб-сайте.
Вам также понадобится менеджер процессов / приложений, чтобы принудительно остановить / убить некоторые процессы. Я рекомендую OS Monitor, но вы можете использовать любое компетентное приложение. См. Связанные приложения в разделе Информация о системе .
Только для демонстрационных целей
Я попробовал Advanced Permission Manager, чтобы вывести список приложений с разрешением «рисовать поверх других приложений». После этого я переключился на OS Monitor, чтобы увидеть приложения, работающие на переднем и заднем плане. Я сопоставил выходные данные обоих приложений и по отдельности принудительно остановил приложения, общие для обоих приложений. Вы можете убить процесс изнутри монитора ОС, поэтому не нужно переключаться в настройки приложения.
(Нажмите на изображение, чтобы увеличить)