Hangi uygulamanın diğer uygulamaların üstüne çizildiğini belirleme?


21

Hangi uygulamanın diğer uygulamaların üstüne çizildiğini belirlemenin bir yolu var mı?

Örneğin, Facebook Messenger uygulaması sohbet kabarcıklarını her şeyin üstüne çizebilir, ancak hangi uygulamanın bunu yaptığını nasıl bilebilirim?

Benim sorunum:

Her şeyin üstüne reklamlar çizen bir uygulamam var ve hangi uygulamanın bunu yaptığını bilmek istiyorum. Sadece kaldırmak için değil, bu uygulamayı kullanan herkesi uyarmak için. (Son zamanlarda hiçbir uygulama yüklemedim ve son güncellemeleri zaten doğruladım.)

Android Studio'dan UI Automator için Döküm Görünümü Hiyerarşisini kullanmaya çalıştım , ancak üstte çizim yapan uygulamalar bu şekilde seçilemiyor gibi görünüyor.

(Büyütmek için resme tıklayın)

Android Studio Ekranı


Aşağıdaki yanıtlarda belirtilen sorunlara eklemek için (tamamlamayı denemek için). TouchWiz'de (Samsung Galaxy, benimki Not 4) yan tuş panelini kapatmak benim için bu sorunu çözdü.
0xc0de

Geliştiriciler için, uygulamaların bir listesi için buraya bakın: android.stackexchange.com/questions/154274/…
Jonathan

Yanıtlar:


24

Not:

  • zaten PC'de kurulmuş olmalıdır.
  • 4.4.x sürümünden önceki Android için kök erişimi gerekli olabilir.
  • Bazı komutlar Android'de 5.1 sürümünden daha önce çalışmaz.
  • Komut satırını bilmiyorsanız veya rahatsızsanız ve / veya komut satırı sorununuzu çözemezse " Uygulamalar için uygulamalar " başlığına atlayın .

Düzenleme: takibi önceki çözümde kesin ve sadece bu düzenlenmiş bölümü takip edin.

Kur ve bu komutu çalıştırın:

adb shell "dumpsys window windows | toybox grep -i system_alert_window"

Ekrandaki tüm aktif katmanların çıktısını alırsınız . Ekranda etkin yer paylaşımları gösteren DU Screen Recorder, Tasker ve AZ Screen Recorder ile çıkış örneği:

bash-4.3 # adb shell "dumpsys pencere pencereleri | toybox grep -i system_alert_window"
    mOwnerUid = 10087 mShowToOwnerOnly = true package = net.dinglisch.android.tasker appop = SYSTEM_ALERT_WINDOW
    mOwnerUid = 10604 mShowToOwnerOnly = gerçek paket = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
    mOwnerUid = 10604 mShowToOwnerOnly = gerçek paket = 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 = gerçek paket = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
    mOwnerUid = 10604 mShowToOwnerOnly = gerçek paket = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
    mOwnerUid = 10638 mShowToOwnerOnly = gerçek paket = ninja.sesame.app.edge appop = SYSTEM_ALERT_WINDOW

Package = öğesinin yanındaki ve appop'tan önceki vurgulanan metin , o anda ekranda yer paylaşımlı uygulama çizen uygulamaların paket adlarıdır . Sizin durumunuzda, paket adlarını içeren çıktı farklı olacaktır.

Paket adlarını not edin (bundan böyle PKG kadar) ve bu komutu uygulayın:

adb shell am force-stop PKG

PKG'yi not ettiğiniz paket adıyla değiştirin . Birden fazla paket adınız varsa, komutu bir defada bir paket adıyla tekrarlayın.

Komut, uygulamayı zorla durdurur ve böylece yerleşimi atar. Bu çalışmalı. Alternatif olarak, bu komutu kullanarak uygulamalardan "Diğer uygulamalar üzerinde çizim" (kısaca ekran yer paylaşımı) iznini kaldırabilirsiniz:

adb shell appops set PKG SYSTEM_ALERT_WINDOW ignore

Yine, PKG'yi gerektiği şekilde paket adıyla değiştirin. Ayrıca, PKG için zorla durdur komutunu tekrarlamanız gerekebilir. Değişiklikleri geri almaya karar verirseniz, yoksaymayı yukarıda belirtilen komutta allow ile değiştirin .

Alternatif olarak , GUI'nin izinlerini yönetmek için Uygulama Ops'u kullanabilirsiniz .

Hangi paket adının hangi uygulamaya karşılık geldiğini bilmek için Uygulamalar Bilgisi gibi açık kaynaklı bir uygulamayı deneyebilirsiniz . Paket adına göre arama yapın ve Uygulamanın adını alırsınız.

Düzenleme tamamlandı

Artık gerçekten okumaya gerek yok . Önceki çözümü (yani aşağıdaki bölümü) sağlam bırakıyorum çünkü oy veren 21 kişi bunu yararlı buldu ve artık berbat etmek istemiyorum.


Basit bir yol, "diğer uygulamaların üzerine çizim" iznine sahip tüm uygulamaları bulmak ve daha sonra şu anda ekranda aktif olanları bulmaktır. Daha sonra, etkin yer paylaşımından sorumlu uygulamayı belirleyene kadar bu yaygın uygulamaları zorla durdurmaya çalışın.

Yer paylaşımı izni olan uygulamaları numaralandırma

Bir uygulama için yer paylaşımı oluşturmak için gereken izin android.permission.SYSTEM_ALERT_WINDOW(diğer uygulamalar üzerinde çizim yapmak).

Bu izne sahip kurulu tüm uygulamaları bulmamız gerekiyor. Bunun için bir yöntem bulmak size kalmıştır. Buradaki cevabım size yardımcı olabilir.

Uygulamaların etiketlerine değil paket adlarına ihtiyacımız olduğunu unutmayın .

Aktif pencerelerden kiraz toplama

Komutu yürütün

adb shell dumpsys window windows 

Bu, ekranda neden olan bir uygulamanın bileşen adı da dahil olmak üzere ekranda bir şey görüntülenmesine neden olan ayrıntılar verir.

Adı nasıl çıkaracağınız size kalmış. Ancak bu komutu deneyebilirsiniz

adb shell 'dumpsys window windows | grep "Window #"'

Hatayı alırsanız: 'grep' dahili veya harici komut olarak tanınmazsa , Windows'ta şu alternatif komutu deneyin:

adb shell "dumpsys window windows | grep 'Window #'"

Demo çıktı

Pencere # 4 Pencere {42065d50 u0 com.android.phone/com.mediatek.phone.UssdAlertActivity}:
Pencere # 5 Pencere {42197468 u0 ginlemon.flowerpro / ginlemon.flower.HomeScreen}:
Pencere # 6 Pencere {420fdb58 u0 com.android.systemui.ImageWallpaper}:
Pencere # 7 Pencere {421e3b88 u0 com.android.contacts / com.android.contacts.activities.DialtactsAktivite}:

Yukarıdaki çıktıda, başarılı u0 ve önceki her şey /bir uygulamanın paket adıdır. Bir uygulama, ekranda bir şey görüntüleyen birden fazla bileşene sahip olabilir.

Bu paket adlarının bir listesini oluşturmanız gerekir. Eğer varsa BusyBox yüklü yapabileceğiniz

adb shell 'dumpsys window windows | grep "Window #" | sed -e "s/.*u0 //g" -e "s/\/.*//g" -e "s/}://g"'

Her neyse, şimdi iki listeniz olacaktı:

  • İlk liste izne sahip tüm uygulamaları içerir android.permission.SYSTEM_ALERT_WINDOW.
  • İkinci liste, ekranda aktif olarak bir şey görüntüleyen tüm uygulamaları içerir.

Bu iki listeyi karşılaştırın ve her iki listede de ortak olan tekil uygulamaları. Bu üçüncü liste, yer paylaşımı çizme iznine sahip olan ve şu anda ekranda etkin bir yer paylaşımı çizen uygulamalardan oluşacaktır.

Öldürme zamanı

Üçüncü listeden her bir uygulamayı tek tek öldürün ve yer paylaşımının durumunu görün. Size am force-stop PACKAGE_NAME --user 0uygun başka bir yöntem kullanabilirsiniz. PACKAGE_NAMEuygulamanın paket adıdır.

EDIT : Bir uygulamayı öldürmek gerekli değildir. Uygulamanın diğer uygulamalar üzerinde çizim yapma iznini reddetmeyi düşünebilirsiniz. Bu komutu kullanın:

adb shell 'appops set PACKAGE SYSTEM_ALERT_WINDOW deny'   # replace PACKAGE with package name of the app

Değişiklikleri geri almak için , söz konusu komutta reddet'i izin ver ile değiştirin ve yürütün.

Android Marshmallow kullanıyorsanız, Andrew T. tarafından verilen bu cevap kullanılabilir.

Not: Yukarıda belirtilen komut Android 5.1.1 ve 6.0.1'de (CM derlemeleri) başarıyla test edilmiştir. Komutun Android 5.0.x üzerinde çalışması da mümkündür ancak garanti edemem . Bu komutun Lollipop'tan önce yayınlanan Android sürümünde yürütülmesi başarısızlığa neden olur.

Yer paylaşımı genellikle algılanabilir olduğundan, uygulamaya neden olan uygulama öldürüldüğünde anında kaybolur, dolayısıyla hangi uygulamanın bu yer paylaşımına neden olduğunu bilirsiniz.

Uygulamalar için uygulamalar

Başlangıçta Izzy tarafından önerilen, yüklü uygulamalara verilen izinleri listeleme işlevine sahip bir uygulamayı, "diğer uygulamalar üzerinde çizim" iznine sahip uygulamaları tek tek kullanmak için kullanabilirsiniz. Böyle bir uygulamayı kendi başınıza arayabilir veya web sitesinde Izzy tarafından tutulan İzin İzleyicisi'ni kullanabilirsiniz .

Ayrıca, bazı işlemleri zorla durdurmak / öldürmek için bir işlem / uygulama yöneticisine ihtiyacınız olacaktır. OS Monitor'ü öneriyorum, ancak herhangi bir yetkili uygulamayı kullanma özgürlüğünüz var. Sistem Bilgisi altındaki ilgili uygulamalara bakın .

Sadece tanıtım amaçlı

Gelişmiş izin yöneticisi "diğer uygulamalar üzerinde çizim" izni ile uygulamaları listelemek için çalıştı . Daha sonra, ön planda ve arka planda çalışan uygulamaları görmek için OS Monitor'e geçtim. Her iki uygulamadaki çıktıyla eşleştim ve her ikisinde de ortak olan uygulamaları tek tek zorla durdurdum. OS Monitörü içinden bir işlemi öldürebilirsiniz, bu nedenle Uygulama ayarlarına geçmenize gerek yoktur.

(Büyütmek için resme tıklayın)

IMG: IMG: IMG:


1
Çok teşekkür ederim Firelord. Gönderinizle çok şey öğrendim!
andreroggeri

1
Teşekkürler, "diğer uygulamaları çizmek" izni olmadan ... her şeyi çizmek gibi görünüyordu bir adware uygulaması bulmaya çalışırken pencere listesi cankurtaran oldu.
Craig Ringer

3

Android 6.0 Marshmallow kullanıyorsanız, yerel izin yöneticisini kullanabilirsiniz.

Gönderen BGR bir makalede ,

Android 6.0 Marshmallow'un pek çok beklenen yeni özelliği var ve bunlardan biri iPhone kullanıcılarının yıllardır sahip olduğu bir şey: Granüler uygulama izinleri. Phone Arena, Marshmallow'un en son geliştirici önizlemesini yükledi ve Android kullanıcılarının yalnızca özel olarak paylaşmak istedikleri uygulamalarla veri paylaştıklarından emin olmalarına yardımcı olmak için bazı müthiş ipuçları yayınladı.

Marshmallow'un izin yönetimi özelliğine erişmek için Ayarlar menünüzü açıp Uygulamalar bölümünü tıklamanız gerekir. Buradan, size uygulama izinleri yöneticisine gitme seçeneği sunacak olan Dişli çark simgesini tıklayın.

Diğer uygulamaların üzerine çizim yapabilen uygulamaları listelemek için Ayarlar - Uygulamalar - Gelişmiş (dişli simgesine sahip menü) - Diğer uygulamaların üzerine çizim yapın .

Ayrıca, uygulamaya dokunarak özelliği geçici olarak etkinleştirebilir / devre dışı bırakabilir ve "Diğer uygulamalar üzerinde çizime izin ver" arasında geçiş yapabilirsiniz.

Android M izin yöneticisi

Resim, Sebastiano Gottardo'nun Medium'da izniyle


1
Benim için Gelişmiş (dişli simgesine sahip menü) eksikti, ancak bunun yerine üst / sağ dotdotdot simgesinde, o zaman; uygulama yapılandırmaları.
AnneTheAgile

3

@Firelord'a bir demet teşekkürler! Sonunda bana apk yüklemek ve adb yedeklemeleri gerçekleştirmesini engelleyen uygulamayı bulduk.

Benim Battery Mixiçin ne yaptığımı ve nasıl yaptığımı görmek için Read on adlı bir uygulama olduğunu gördüm.

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

Birçok kişi Apk'i yükleme ve 'Install' a basamama ile ilgili sorunlar yaşadı. Bulabildiğim tüm cevaplar, karartma, renklendirme, güç tasarrufu uygulamalarını görüntülemek için aşağıdaydı. Hiçbirini kullanmadığım veya benzer uygulamaları kaldırdığımdan, neler olduğunu ve hangi uygulamanın suçlu olduğunu bulmak için uğraşıyordum. Ve sonunda! Basit bir komut ve hızlı bir aramadan sonra çözüldü: D

Rahatsız edici uygulama Battery Mix, pil seviyesinin durumunu (harika bir küçük uygulama) göstermek için ekranın üstünde ince bir çizgi görüntülemek için kullandığım basit bir pil izleme uygulamasıdır.

Bu yüzden teşhis etmek için, Firelordbir metin dosyasını dökmek ve sonra Android sistemini bu Yükle düğmesini tıklatmamı engellemesine neden olan uygulamayı aramak için (yukarıda) bir komut kullandım .

Bilgisayardan komut yürütme

adb shell dumpsys window windows > dumpsys-windows.txt

Aramak

SYSTEM_ALERT_WINDOW

Rahatsız edici uygulamaları bulmak için yukarıdaki dizeyi aradım

Bu bana çizgiyi verdi:

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

(Metin dosyasının bölümü için resim yüklemeye bakın) resim açıklamasını buraya girin

hemen hangi uygulamaya atıfta bulunduğunu anlayabiliyordum: jp.smapho. battery_mix

Bu yüzden şimdi yan yüklemeyi veya adb yedeklemelerini planladığımda bu uygulamayı öldürmeyi biliyorum.


-1

Android Marshmallow ve Oxygen 3.0.2 için, Ekran Düzeni açılır penceresini devre dışı bırakma

Uygulamalar'a gidin ve Uygulamaları yapılandırın ve Diğer uygulamaların üzerine çiz'i seçin.

Uygulamanın ekran düzeni kalıcılığı engellemesini kaldırmak için uygulamayı devre dışı bırakmak üzere gidin ve seçin. ve uygulama doğrudan izinleri alabilir

İlgili uygulamaya ve İzinler'e gidin ve istediğiniz izinleri etkinleştirin.

Zevk almak

hakimiyet


2
Tüm bu bilgiler zaten Andrew T'nin cevabında. Aynı talimatları tekrarlamak için yeni bir yanıt göndermenize gerek yoktur. Henüz cevaplanmayan sorular için çabalarınızı kaydedin :-)
Dan Hulme
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.