Określić, która aplikacja korzysta z innych aplikacji?

21

Czy istnieje sposób na określenie, która aplikacja rysuje się na innych aplikacjach?

Na przykład aplikacja Facebook Messenger może narysować bąbelki czatu na wierzchu wszystkiego, ale skąd mam wiedzieć, która aplikacja to robi?

Mój problem:

Mam aplikację wyświetlającą reklamy i chcę wiedzieć, która aplikacja to robi. Nie tylko odinstalować, ale ostrzec wszystkich, którzy korzystają z tej aplikacji. (Ostatnio nie instalowałem żadnej aplikacji i sprawdziłem już najnowsze aktualizacje).

Próbowałem użyć Hierarchii widoku zrzutu dla Automatu interfejsu użytkownika z Android Studio, ale wygląda na to, że nie można w ten sposób wybrać aplikacji rysujących się na górze.

(Kliknij obraz, aby powiększyć)

Ekran Android Studio

andreroggeri
źródło
Aby dodać do problemów wymienionych w odpowiedziach poniżej (spróbuj je uzupełnić). W TouchWiz (Samsung Galaxy moja jest Note 4) wyłączenie bocznego panelu przycisków rozwiązało dla mnie ten problem.
0xc0de,
Jeśli nie jesteś programistą, po prostu sprawdź tutaj listę aplikacji: android.stackexchange.com/questions/154274/…
Jonathan

Odpowiedzi:

24

Uwaga:

  • 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 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 0dowolnej innej metody, która Ci odpowiada. PACKAGE_NAMEto 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ć)

IMG: IMG: IMG:

Firelord
źródło
1
Dziękuję bardzo Firelord. Wiele się nauczyłem z twojego postu!
andreroggeri
1
Dzięki, lista okien uratowała mi życie, kiedy próbowałem znaleźć aplikację adware, która zdawała się być w stanie narysować wszystko ... bez pozwolenia „rysuj inne aplikacje”.
Craig Ringer
3

Jeśli używasz Androida 6.0 Marshmallow, możesz użyć jego natywnego menedżera uprawnień.

Z artykułu na BGR ,

Android 6.0 Marshmallow ma wiele bardzo oczekiwanych nowych funkcji, a jedną z nich jest coś, co użytkownicy iPhone'a mieli od lat: szczegółowe uprawnienia do aplikacji. Phone Arena zainstalowała najnowszą wersję deweloperską Marshmallow i opublikowała kilka świetnych wskazówek, które pomogą użytkownikom Androida upewnić się, że udostępniają dane tylko aplikacjom, które chcą udostępnić.

Aby uzyskać dostęp do funkcji zarządzania uprawnieniami Marshmallow, musisz otworzyć menu Ustawienia, a następnie kliknąć sekcję Aplikacje. Następnie kliknij ikonę koła zębatego, która umożliwi przejście do menedżera uprawnień do aplikacji.

Aby wyświetlić listę aplikacji, które mogą rysować na innych aplikacjach, przejdź do Ustawienia - Aplikacje - Zaawansowane (menu z ikoną koła zębatego) - Rysuj na innych aplikacjach .

Możesz także włączyć / wyłączyć tę funkcję tymczasowo, dotykając aplikacji i przełączając opcję „Zezwalaj na rysowanie nad innymi aplikacjami”.

Menedżer uprawnień Android M.

Zdjęcie dzięki uprzejmości Sebastiano Gottardo na Medium

Andrew T.
źródło
1
Dla mnie brakowało menu Zaawansowane (menu z ikoną koła zębatego), ale zamiast tego znajduje się ono w górnej / prawej ikonie dotdotdot; konfiguracje aplikacji.
AnneTheAgile,
3

Wielkie dzięki @Firelord! W końcu znalazłem aplikację, która uniemożliwiała mi instalację apk i wykonywanie kopii zapasowych adb.

Dla mnie odkryłem, że była to aplikacja o nazwie Battery MixCzytaj dalej, aby zobaczyć, co zrobiłem i jak to zrobiłem.

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

Wiele osób miało problemy z instalacją aplikacji i nie było w stanie nacisnąć „Instaluj”. Wszystkie odpowiedzi, które mogłem znaleźć, dotyczyły głównie aplikacji do przyciemniania, przyciemniania i oszczędzania energii. Ponieważ nie korzystałem z żadnej aplikacji lub usunąłem wszystkie podobne aplikacje, starałem się znaleźć to, co się dzieje i która z nich była sprawcą. I w końcu! Po jednym prostym poleceniu i szybkim wyszukiwaniu zostało rozwiązane: D

Obraźliwa aplikacja Battery Mixto prosta aplikacja do monitorowania baterii, która miała funkcję, której użyłem do wyświetlenia cienkiej linii w górnej części ekranu, aby pokazać stan naładowania baterii (świetna mała aplikacja).

Aby zdiagnozować, użyłem polecenia z Firelord(powyżej), aby zrzucić plik tekstowy, a następnie wyszukać aplikację, która spowodowała, że ​​system Android nie pozwolił mi kliknąć tego przycisku instalacji.

Wykonaj polecenie z komputera

adb shell dumpsys window windows > dumpsys-windows.txt

Szukać

SYSTEM_ALERT_WINDOW

Aby znaleźć szkodliwe aplikacje, szukałem powyższego ciągu

Co dało mi linię:

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

(Zobacz przesyłanie obrazu do sekcji pliku tekstowego) wprowadź opis zdjęcia tutaj

natychmiast rozpoznałem, do której aplikacji się odnosi: jp.smapho. bateria_mix

Teraz wiem, jak zabić tę aplikację, ilekroć planuję sideload lub przed tworzeniem kopii zapasowych adb.

mitchbw
źródło
-1

W Androidzie Marshmallow i Oxygen 3.0.2, wyskakujące okno Wyłącz układ ekranu

Przejdź do Aplikacje i skonfiguruj Aplikacje i Wybierz Rysuj w stosunku do innych aplikacji.

Idź i wybierz aplikację, aby ją wyłączyć, aby aplikacja została odblokowana z poziomu układu ekranu. a aplikacja może bezpośrednio uzyskać uprawnienia

Przejdź do odpowiedniej aplikacji i uprawnień i włącz odpowiednie uprawnienia.

Cieszyć się

Raj

DILLIRAJ PD
źródło
2
Wszystkie te informacje są już w odpowiedzi Andrew T. Nie musisz publikować nowej odpowiedzi, aby powtórzyć te same instrukcje. Oszczędzaj wysiłek na pytania, na które jeszcze nie ma odpowiedzi :-)
Dan Hulme,