Визначте, який додаток малюється поверх інших додатків?


21

Чи є спосіб визначити, яка програма звертається до інших програм?

Наприклад, програма Facebook Messenger може малювати бульбашки чату поверх усіх, але як я можу знати, який додаток робить це?

Моя проблема:

У мене є додаток, який малює рекламу понад усе, і я хочу знати, який додаток це робить. Не просто видалити його, а попередити всіх, хто користується цим додатком. (Я недавно не встановлював жодну програму, і я вже перевірив останні оновлення.)

Я спробував використати ієрархію перегляду дампа для інтерфейсу автоматичного інтерфейсу від Android Studio, але, схоже, програми, які звертаються зверху, неможливо обрати таким чином.

(Клацніть зображення, щоб збільшити)

Екран Android Studio


Просто додайте до питань, зазначених у відповідях нижче (щоб спробувати зберегти його). У TouchWiz (Samsung Galaxy, моя примітка 4) відключення панелі бічних клавіш вирішило цю проблему для мене.
0xc0de

Для не розробників просто перегляньте тут список програм: android.stackexchange.com/questions/154274/…
Джонатан

Відповіді:


24

Примітка:

  • вже має бути налаштований на ПК.
  • Для Android раніше версії 4.4.x може знадобитися кореневий доступ.
  • Деякі команди не працюватимуть на Android раніше, ніж версія 5.1.
  • Перейдіть до заголовка " Програми для додатків ", якщо вам незнайомий або незручний командний рядок та / або командний рядок не вирішує проблему.

Редагувати: виріжте погоню в попередньому рішенні та дотримуйтесь лише цього відредагованого розділу.

Налаштуйте та запустіть цю команду:

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, ви можете використовувати додаток, який має функціонал перелічення дозволів, встановлених встановленим додаткам, для виділення програм, що мають дозвіл "звертатись до інших програм". Ви можете самостійно шукати таку програму або скористатися списком перевірки дозволів, який підтримує Іззі на своєму веб-сайті.

Вам також знадобиться менеджер процесів / додатків, щоб примусити зупинити / вбити деякі процеси. Я рекомендую монітор ОС, але ви можете вільно користуватися будь-яким компетентним додатком. Дивіться пов’язані програми в розділі Інформація про систему .

Тільки для демонстрації

Я спробував розширений диспетчер дозволів перелічити програми з дозволом на "залучення інших програм". Згодом я перейшов на "Монітор ОС", щоб побачити програми, що працюють на передньому плані та на задньому плані. Я відповідав результатам як із додатків, так і індивідуально зупиняв додатки, поширені в обох. Ви можете вбити процес зсередини монітора ОС, тому не потрібно переходити до налаштувань програми.

(Клацніть зображення, щоб збільшити)

IMG: IMG: IMG:


1
Дуже дякую, Firelord. Я багато чого дізнався з вашої публікації!
andreroggeri

1
Дякую, список вікон був рятівним рятувальником, коли я намагався знайти рекламний додаток, який, здавалося б, міг перетягнути все ... не маючи дозволу "намалювати інші програми".
Крейг Рінгер

3

Якщо ви використовуєте Android 6.0 Marshmallow, ви можете використовувати його вбудований менеджер дозволів.

З статті про BGR ,

Android 6.0 Marshmallow має багато очікуваних нових функцій, і одна з них - це те, що користувачі iPhone роками мали: Гранульовані дозволи на програми. Телефон Arena встановив останню версію розробника Marshmallow і опублікував кілька приголомшливих порад, щоб допомогти користувачам Android переконатися, що вони обмінюються даними лише з додатками, якими вони спеціально хочуть ділитися.

Щоб отримати доступ до функції управління дозволами Marshmallow, вам потрібно відкрити меню Налаштування, а потім натиснути на розділ Програми. Звідти натисніть на значок Gear, який надасть вам можливість перейти до менеджера дозволів додатків.

Щоб перелічити додатки, які можуть перетягувати інші програми, перейдіть у Налаштування - Додатки - Додатково (меню зі значком шестірні) - Перетягніть інші програми .

Ви також можете увімкнути / вимкнути функцію тимчасово, натиснувши додаток та переключивши "Дозволити малювання над іншими програмами".

Менеджер дозволів Android M

Зображення надано Себастьяно Готдардо на Середній


1
Для мене відсутнє меню Advanced (меню зі значком шестірні), але замість цього воно знаходиться у верхній / правій піктограмі dotdotdot; конфігурації додатків
AnneTheAgile

3

Дякую купу @Firelord! Нарешті я знайшов додаток, який заважає мені встановлювати apk та виконувати резервні копії adb.

Для мене я виявив, що це додаток під назвою " Battery MixПрочитати далі", щоб побачити, що я робив і як це робив.

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

У багатьох людей виникли проблеми із встановленням apk та не вдалося натиснути «Встановити». Усі відповіді, які я міг знайти, в основному полягали в тому, щоб відображати програми затемнення, тонування, енергозберігаючі програми. Оскільки я не використовував жодного або видаляв усі подібні програми, я намагався знайти, що відбувається і який саме винуватець. І, нарешті! Після однієї простої команди та швидкого пошуку це було вирішено: D

Додаток, який ображає, Battery Mix- це простий додаток для моніторингу акумулятора, який мав функцію, яку я використовував для відображення тонкої лінії вгорі екрана, щоб показати стан рівня акумулятора (чудовий маленький додаток).

Тому для діагностики я використав команду Firelord(зверху), щоб скинути текстовий файл, а потім шукати додаток, який спричинив андроїд-систему, щоб запобігти мені натиснути цю кнопку Встановити.

Виконати команду з ПК

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. батарея_mix

Тож тепер я знаю, що вбивати цю програму щоразу, коли я планую завантажувати або створювати резервні копії adb.


-1

Для Android Marshmallow та Oxygen 3.0.2 вимкнення спливаючого екрана

Перейдіть до Прикладних програм та налаштуйте програми та виберіть «Намалювати» над іншими програмами.

Перейдіть та виберіть додаток, щоб відключити його, щоб розблокувати додаток із оформленням макета екрана. і додаток може безпосередньо отримувати дозволи

Зайдіть у відповідну програму та дозволи та ввімкніть потрібні дозволи.

Насолоджуйтесь

Радж


2
Вся ця інформація вже є у відповіді Ендрю Т. Вам не потрібно публікувати нову відповідь, щоб повторити ті самі інструкції. Збережіть свої зусилля для запитань, на які поки не відповіли :-)
Dan Hulme
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.