Примітка:
- adb вже має бути налаштований на ПК.
- Для Android раніше версії 4.4.x може знадобитися кореневий доступ.
- Деякі команди не працюватимуть на 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 "windows dumpsys | windows box" grep -i system_alert_window "
mOwnerUid = 10087 mShowToOwnerOnly = вірно пакет = net.dinglisch.android.tasker appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = вірно пакет = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = вірно пакет = 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 = вірно пакет = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = вірно пакет = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10638 mShowToOwnerOnly = вірно пакет = ninja.sesame.app.edge appop = SYSTEM_ALERT_WINDOW
Виділений текст поруч із пакетом = і перед appop - це назва пакета додатка (програм), який наразі малює накладку на екрані. У вашому випадку вихід, включаючи назви (-и) пакета, відрізнявся б.
Запишіть назви пакетів (відтепер PKG) та виконайте цю команду:
adb shell am force-stop PKG
Замініть PKG на назву пакета, яку ви записали. Якщо у вас було кілька імен пакунків, повторіть команду з одним іменем пакета одночасно.
Команда примусово зупинить додаток і тим самим відкине накладення. Це має спрацювати. Ви також можете позбавити дозвіл "Накреслити над іншими програмами" (накладення екрана коротко) з програм за допомогою цієї команди:
adb shell appops set PKG SYSTEM_ALERT_WINDOW ignore
Знову замініть PKG на ім'я пакета, якщо потрібно. Крім того, можливо, вам доведеться повторити команду зупинки для PKG. Якщо ви вирішили відновити зміни, замініть ігнорування на дозволену у вищезазначеній команді.
Ви також можете використовувати додатки для управління дозволами 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"'
Як би там не було, зараз у вас буде два списки:
- Перший список містить усі програми, які мають дозвіл
android.permission.SYSTEM_ALERT_WINDOW
.
- Другий список містить усі програми, які активно відображають щось на екрані.
Порівняйте ці два списки та виділіть додатки, які є загальними в обох списках. Цей третій список буде складатися з додатків, які мають дозвіл на малювання накладок і наразі малюють активне накладання на екрані.
Час вбити
Вбийте кожну з програм із третього списку по черзі та помітьте стан накладання. Ви можете використовувати am force-stop PACKAGE_NAME --user 0
будь-який інший метод, який вам підходить. PACKAGE_NAME
- назва пакету програми.
EDIT : Не потрібно вбивати додаток. Ви можете відмовити програмі в дозволі на доступ до інших програм. Використовуйте цю команду:
adb shell 'appops set PACKAGE SYSTEM_ALERT_WINDOW deny' # replace PACKAGE with package name of the app
Щоб відновити зміни, замініть заперечення на дозвіл у зазначеній команді та виконайте його.
Якщо ви використовуєте Android Marshmallow, цю відповідь Ендрю Т. можна використовувати.
Примітка . Вищевказана команда успішно тестується на Android 5.1.1 та 6.0.1 (збірки CM). Можливо також, що команда працює на Android 5.0.x, але я не можу гарантувати . Виконання цієї команди у версії Android, випущеній до Lollipop , спричинить збій.
Оскільки часто накладення помітне, воно миттєво зникає в той момент, коли додаток, що викликає його вбивство, значить, ви знаєте, яке додаток спричиняло цю накладку.
Програми для додатків
Спочатку запропонований Izzy, ви можете використовувати додаток, який має функціонал перелічення дозволів, встановлених встановленим додаткам, для виділення програм, що мають дозвіл "звертатись до інших програм". Ви можете самостійно шукати таку програму або скористатися списком перевірки дозволів, який підтримує Іззі на своєму веб-сайті.
Вам також знадобиться менеджер процесів / додатків, щоб примусити зупинити / вбити деякі процеси. Я рекомендую монітор ОС, але ви можете вільно користуватися будь-яким компетентним додатком. Дивіться пов’язані програми в розділі Інформація про систему .
Тільки для демонстрації
Я спробував розширений диспетчер дозволів перелічити програми з дозволом на "залучення інших програм". Згодом я перейшов на "Монітор ОС", щоб побачити програми, що працюють на передньому плані та на задньому плані. Я відповідав результатам як із додатків, так і індивідуально зупиняв додатки, поширені в обох. Ви можете вбити процес зсередини монітора ОС, тому не потрібно переходити до налаштувань програми.
(Клацніть зображення, щоб збільшити)