Uwaga:
- adb powinien być już skonfigurowany na PC.
- W przypadku systemu Android wcześniejszego niż wersja 4.4.x może być wymagany dostęp do konta root.
- Niektóre polecenia nie działały na Androidzie wcześniej niż w wersji 5.1.
- Przejdź do nagłówka „ Aplikacje dla aplikacji ”, jeśli nie znasz lub nie czujesz się dobrze z wierszem poleceń i / lub wiersz polecenia nie rozwiązuje problemu.
Edycja: wytnij łańcuch we wcześniejszym rozwiązaniu i postępuj tylko według tej edytowanej sekcji.
Skonfiguruj adb i uruchom następujące polecenie:
adb shell "dumpsys window windows | toybox grep -i system_alert_window"
Otrzymasz wynik wszystkich aktywnych nakładek na ekranie. Przykład wyjścia z DU Screen Recorder, Tasker i AZ Screen Recorder pokazującymi aktywne nakładki na ekranie:
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 pakiet = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = true pakiet = 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 pakiet = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = true pakiet = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10638 mShowToOwnerOnly = true pakiet = ninja.sesame.app.edge appop = SYSTEM_ALERT_WINDOW
Podświetlony tekst obok paczki = i przed aplikacją to nazwy pakietów aplikacji rysujących obecnie nakładkę na ekranie. W twoim przypadku dane wyjściowe zawierające nazwy pakietów będą się różnić.
Zanotuj nazwy pakietów (dalej jako PKG) i wykonaj następujące polecenie:
adb shell am force-stop PKG
Zamień PKG na zanotowaną nazwę pakietu. Jeśli masz wiele nazw pakietów, powtórz polecenie z jedną nazwą pakietu na raz.
Polecenie wymusiłoby zatrzymanie aplikacji, a tym samym odrzuciło nakładkę. To powinno działać. Alternatywnie możesz usunąć uprawnienia „Rysuj nad innymi aplikacjami” (w skrócie nakładka ekranu) z aplikacji za pomocą tego polecenia:
adb shell appops set PKG SYSTEM_ALERT_WINDOW ignore
Ponownie, w razie potrzeby zastąp PKG nazwą pakietu. Ponadto może być konieczne powtórzenie polecenia zatrzymania siły dla PKG. Jeśli zdecydujesz się cofnąć zmiany, wymień ignorować z zezwolić na wspomnianej komendy.
Alternatywnie możesz używać aplikacji do zarządzania uprawnieniami z GUI.
Aby wiedzieć, która nazwa pakietu odpowiada aplikacji, możesz wypróbować aplikację typu open source, np. Applications Info . Wyszukaj według nazwy pakietu, a otrzymasz nazwę aplikacji.
Edycja zakończona
Naprawdę nie musisz już więcej czytać . Wcześniejsze rozwiązanie (tj. Następną sekcję) pozostawiam nietknięte, ponieważ 21 osób, które głosowały, uznało to za pomocne i nie chcę już więcej zepsuć.
Prostym sposobem byłoby znalezienie wszystkich aplikacji posiadających uprawnienie „rysuj nad innymi aplikacjami”, a następnie wyróżnienie ich spośród aktualnie aktywnych na ekranie. Następnie zaangażuj się w zatrzymywanie tych popularnych aplikacji, dopóki nie wskażesz aplikacji odpowiedzialnej za aktywną nakładkę.
Wymień aplikacje mające uprawnienia do nakładki
Zezwolenie wymagane przez aplikację do utworzenia nakładki to android.permission.SYSTEM_ALERT_WINDOW
(rysowanie nad innymi aplikacjami).
Musimy znaleźć wszystkie zainstalowane aplikacje posiadające wspomniane pozwolenie. Od ciebie zależy znalezienie metody na to. Moja odpowiedź tutaj może ci pomóc.
Pamiętaj , że potrzebujemy nazw pakietów aplikacji, a nie ich etykiet.
Wybierz z aktywnych okien
Wykonaj polecenie
adb shell dumpsys window windows
Dałoby to szczegółowe informacje o tym, co powoduje wyświetlanie czegoś na ekranie, w tym nazwę komponentu powodującej to aplikacji.
Sposób wyodrębnienia nazwy zależy od ciebie. Możesz jednak wypróbować to polecenie
adb shell 'dumpsys window windows | grep "Window #"'
Jeśli pojawi się błąd: „grep” nie jest rozpoznawany jako polecenie wewnętrzne lub zewnętrzne , w systemie Windows spróbuj wykonać to alternatywne polecenie:
adb shell "dumpsys window windows | grep 'Window #'"
Wyjście demo
Okno nr 4 Okno {42065d50 u0 com.android.phone/com.mediatek.phone.UssdAlertActivity}:
Okno nr 5 Okno {42197468 u0 ginlemon.flowerpro / ginlemon.flower.HomeScreen}:
Okno nr 6 Okno {420fdb58 u0 com.android.systemui.ImageWallpaper}:
Okno nr 7 Okno {421e3b88 u0 com.android.contacts / com.android.contacts.activities.DialtactsActivity}:
W powyższym wyniku wszystko, co się powiedzie u0
i co poprzedza, /
to nazwa pakietu aplikacji. Aplikacja może mieć wiele komponentów wyświetlających coś na ekranie.
Musisz utworzyć listę tych nazw pakietów. Jeśli masz zainstalowany BusyBox , możesz to zrobić
adb shell 'dumpsys window windows | grep "Window #" | sed -e "s/.*u0 //g" -e "s/\/.*//g" -e "s/}://g"'
Tak czy inaczej, teraz będziesz mieć dwie listy:
- Pierwsza lista zawiera wszystkie aplikacje posiadające zezwolenie
android.permission.SYSTEM_ALERT_WINDOW
.
- Druga lista zawiera wszystkie aplikacje aktywnie wyświetlające coś na ekranie.
Porównaj te dwie listy i wyodrębnij aplikacje, które są wspólne na obu listach. Ta trzecia lista składałaby się z aplikacji, które mają uprawnienia do rysowania nakładki i obecnie rysują aktywną nakładkę na ekranie.
Czas zabijać
Zabijaj wszystkie aplikacje z trzeciej listy jeden po drugim i zauważ stan nakładki. Możesz użyć am force-stop PACKAGE_NAME --user 0
dowolnej innej metody, która Ci odpowiada. PACKAGE_NAME
to nazwa pakietu aplikacji.
EDYCJA : Zabicie aplikacji nie jest konieczne. Możesz rozważyć odmowę aplikacji zezwolenia na rysowanie w innych aplikacjach. Użyj tego polecenia:
adb shell 'appops set PACKAGE SYSTEM_ALERT_WINDOW deny' # replace PACKAGE with package name of the app
Aby cofnąć zmiany, wymień zaprzeczyć ze pozwalają w tej komendzie i uruchom go.
Jeśli używasz Androida Marshmallow, możesz użyć tej odpowiedzi Andrew T.
Uwaga: wyżej wymienione polecenie zostało pomyślnie przetestowane na Androidzie 5.1.1 i 6.0.1 (kompilacje CM). Możliwe jest również, że polecenie działa na Androidzie 5.0.x, ale nie mogę tego zagwarantować . Wykonanie tego polecenia w wersji Androida wydanej przed Lollipopem spowodowałoby błąd.
Ponieważ często nakładka jest widoczna, natychmiast znika z chwilą śmierci aplikacji, która ją spowodowała, dlatego wiesz, która aplikacja spowodowała tę nakładkę.
Aplikacje na aplikacje
Pierwotnie sugerowany przez Izzy'ego, możesz użyć aplikacji, która ma funkcję wyświetlania uprawnień przyznanych zainstalowanym aplikacjom, aby wyróżnić aplikacje posiadające uprawnienie „rysuj nad innymi aplikacjami”. Możesz przeszukać taką aplikację samodzielnie lub skorzystać z listy Sprawdzanie uprawnień prowadzonej przez Izzy'ego na jego stronie internetowej.
Potrzebujesz także menedżera procesów / aplikacji, aby wymusić zatrzymanie / zabicie niektórych procesów. Polecam OS Monitor, ale możesz swobodnie korzystać z dowolnej kompetentnej aplikacji. Zobacz powiązane aplikacje w obszarze Informacje o systemie .
Tylko w celach demonstracyjnych
Próbowałem Advanced Permission Manager, aby wyświetlić listę aplikacji z uprawnieniami do „rysowania nad innymi aplikacjami”. Następnie przełączyłem się na OS Monitor, aby zobaczyć aplikacje działające na pierwszym planie i w tle. Dopasowałem dane wyjściowe z obu aplikacji i indywidualnie wymusiłem zatrzymanie aplikacji wspólnych w obu. Możesz zabić proces z poziomu Monitora systemu operacyjnego, więc nie musisz przełączać się do ustawień aplikacji.
(Kliknij obraz, aby powiększyć)