Tentukan aplikasi mana yang menggambar di atas aplikasi lain?

21

Apakah ada cara untuk menentukan aplikasi mana yang menggambar di atas aplikasi lain?

Misalnya, aplikasi Facebook Messenger dapat menggambar gelembung obrolan di atas segalanya, tetapi bagaimana saya tahu aplikasi mana yang melakukan ini?

Masalahku:

Saya memiliki aplikasi yang menggambar iklan di atas segalanya dan saya ingin tahu aplikasi mana yang melakukan ini. Tidak hanya menghapus instalannya, tetapi untuk memperingatkan semua orang yang menggunakan aplikasi ini. (Saya tidak menginstal aplikasi apa pun baru-baru ini dan saya sudah memverifikasi pembaruan terbaru.)

Saya mencoba menggunakan Hirarki Dump View untuk UI Automator dari Android Studio, tetapi tampaknya aplikasi yang menggambar di atas tidak dapat dipilih dengan cara ini.

(Klik gambar untuk memperbesar)

Layar Android Studio

andreroggeri
sumber
Hanya untuk menambah masalah yang dicatat dalam jawaban di bawah ini (untuk membuatnya tetap lengkap). Di TouchWiz (Samsung Galaxy, milik saya adalah Note 4) mematikan panel tombol samping menyelesaikan masalah ini untuk saya.
0xc0de
Untuk yang bukan pengembang, cukup periksa di sini untuk daftar aplikasi: android.stackexchange.com/questions/154274/…
Jonathan

Jawaban:

24

catatan:

  • seharusnya sudah diatur di PC.
  • Untuk Android lebih awal dari versi 4.4.x, akses root mungkin diperlukan.
  • Beberapa perintah tidak akan berfungsi di Android lebih awal dari versi 5.1.
  • Lompat ke tajuk " Aplikasi untuk aplikasi " jika Anda tidak terbiasa atau tidak nyaman dengan baris perintah dan / atau baris perintah gagal menyelesaikan masalah Anda.

Sunting: potong pengejaran dalam solusi sebelumnya dan ikuti bagian yang diedit ini saja.

Setup dan jalankan perintah ini:

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

Anda akan mendapatkan output dari semua overlay aktif di layar. Contoh output dengan DU Screen Recorder, Tasker dan AZ Screen Recorder menampilkan overlay aktif di layar:

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

Teks yang disorot di sebelah package = dan sebelum appop adalah nama paket aplikasi yang saat ini menggambar overlay di layar. Dalam kasus Anda, output termasuk nama paket akan berbeda.

Catat nama paket (selanjutnya disebut PKG) dan jalankan perintah ini:

adb shell am force-stop PKG

Ganti PKG dengan nama paket yang Anda catat. Jika Anda memiliki beberapa nama paket, ulangi perintah dengan satu nama paket sekaligus.

Perintah akan secara paksa menghentikan aplikasi dan dengan demikian membuang overlay. Ini seharusnya bekerja. Sebagai alternatif, Anda dapat menghapus izin "Draw over other apps" (hamparan layar singkatnya) dari aplikasi menggunakan perintah ini:

adb shell appops set PKG SYSTEM_ALERT_WINDOW ignore

Sekali lagi, ganti PKG dengan nama paket seperlunya. Selanjutnya, Anda mungkin harus mengulangi perintah penghentian paksa untuk PKG. Jika Anda memutuskan untuk mengembalikan perubahan, ganti abaikan dengan izinkan dalam perintah di atas.

Anda dapat menggunakan App Ops untuk mengelola izin dari GUI.

Untuk mengetahui nama paket yang sesuai dengan aplikasi mana Anda bisa mencoba aplikasi sumber terbuka seperti Info Aplikasi . Cari berdasarkan nama paket dan Anda akan mendapatkan nama Aplikasi.

Edit selesai

Anda benar - benar tidak perlu membaca lagi sekarang . Saya meninggalkan solusi sebelumnya (yaitu bagian berikut) dengan utuh karena 21 orang yang memilihnya merasa terbantu dan saya tidak ingin mengacaukannya lagi.


Cara sederhana adalah mengetahui semua aplikasi yang memiliki izin "menarik aplikasi lain" dan kemudian memilihnya dari yang saat ini aktif di layar. Setelah itu, lakukan penghentian paksa aplikasi-aplikasi umum tersebut sampai Anda menunjukkan dengan tepat aplikasi yang bertanggung jawab atas overlay aktif.

Menghitung aplikasi yang memiliki izin untuk overlay

Izin yang diperlukan oleh aplikasi untuk membuat overlay adalah android.permission.SYSTEM_ALERT_WINDOW(menarik aplikasi lain).

Kita perlu mengetahui semua aplikasi yang terinstal memiliki izin tersebut. Terserah Anda untuk mengetahui metode untuk ini. Jawaban saya di sini dapat membantu Anda.

Perhatikan bahwa kita membutuhkan nama paket aplikasi dan bukan labelnya.

Pilih dari jendela aktif

Jalankan perintah

adb shell dumpsys window windows 

Ini akan memberi Anda detail tentang apa pun yang menyebabkan sesuatu ditampilkan di layar, termasuk nama komponen aplikasi yang menyebabkannya.

Bagaimana Anda mengekstrak nama itu terserah Anda. Anda dapat mencoba perintah ini

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

Jika Anda menerima kesalahan: 'grep' tidak dikenali sebagai perintah internal atau eksternal , pada Windows coba perintah alternatif ini:

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

Output demo

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

Dalam output di atas, apa pun yang berhasil u0 dan sebelumnya /adalah nama paket aplikasi. Aplikasi dapat memiliki beberapa komponen yang menampilkan sesuatu di layar.

Anda harus membuat daftar nama paket tersebut. Jika Anda telah menginstal BusyBox , Anda dapat melakukannya

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

Bagaimanapun, sekarang Anda akan memiliki dua daftar:

  • Daftar pertama berisi semua aplikasi yang memiliki izin android.permission.SYSTEM_ALERT_WINDOW.
  • Daftar kedua berisi semua aplikasi yang secara aktif menampilkan sesuatu di layar.

Bandingkan kedua daftar ini dan pilih satu aplikasi yang umum di kedua daftar. Daftar ketiga ini merupakan aplikasi yang memiliki izin untuk menggambar overlay dan saat ini menggambar overlay aktif di layar.

Waktunya membunuh

Bunuh masing-masing aplikasi dari daftar ketiga satu per satu dan perhatikan status overlay. Anda dapat menggunakan am force-stop PACKAGE_NAME --user 0atau metode lain yang cocok untuk Anda. PACKAGE_NAMEadalah nama paket aplikasi.

EDIT : Tidak perlu mematikan aplikasi. Anda dapat mempertimbangkan untuk menolak aplikasi untuk mengambil alih aplikasi lain. Gunakan perintah ini:

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

Untuk mengembalikan perubahan, ganti tolak dengan izinkan dalam perintah tersebut dan jalankan.

Jika Anda menjalankan Android Marshmallow, jawaban ini oleh Andrew T. dapat digunakan.

Catatan: Perintah di atas berhasil diuji pada Android 5.1.1 dan 6.0.1 (build CM). Mungkin juga perintah itu bekerja di Android 5.0.x tapi saya tidak bisa menjamin . Eksekusi perintah itu pada versi Android yang dirilis sebelum Lollipop akan menyebabkan kegagalan.

Karena sering overlay dapat dilihat, maka akan langsung menghilang begitu aplikasi menyebabkannya terbunuh, karenanya, Anda akan tahu aplikasi mana yang menyebabkan overlay itu.

Aplikasi untuk aplikasi

Awalnya disarankan oleh Izzy, Anda dapat menggunakan aplikasi yang memiliki fungsionalitas izin daftar yang diberikan untuk aplikasi yang diinstal, untuk memilih aplikasi yang memiliki izin "menarik dari aplikasi lain". Anda dapat mencari aplikasi seperti itu sendiri atau menggunakan daftar Pemeriksa izin yang dikelola oleh Izzy di situs webnya.

Anda juga membutuhkan manajer proses / aplikasi untuk menghentikan / membunuh beberapa proses secara paksa. Saya merekomendasikan OS Monitor tetapi Anda bebas untuk menggunakan aplikasi apa pun yang kompeten. Lihat aplikasi terkait di bawah Info Sistem .

Untuk tujuan demonstrasi saja

Saya mencoba Advanced Permission Manager untuk mendaftar aplikasi dengan izin untuk "menarik aplikasi lain". Setelah itu, saya beralih ke OS Monitor untuk melihat aplikasi yang berjalan di latar depan dan belakang. Saya mencocokkan output dari kedua aplikasi dan secara individual menghentikan aplikasi yang umum di keduanya. Anda dapat mematikan proses dari dalam Monitor OS, jadi tidak perlu beralih ke pengaturan Aplikasi.

(Klik gambar untuk memperbesar)

IMG: IMG: IMG:

Firelord
sumber
1
Terima kasih banyak, Firelord. Saya telah belajar banyak dengan posting Anda!
andreroggeri
1
Terima kasih, daftar jendela adalah penyelamat ketika saya mencoba untuk menemukan aplikasi adware yang tampaknya dapat mengambil alih segalanya ... tanpa memiliki izin "menggambar aplikasi lain lainnya".
Craig Ringer
3

Jika Anda menggunakan Android 6.0 Marshmallow, Anda dapat menggunakan pengelola izin asalnya.

Dari sebuah artikel di BGR ,

Android 6.0 Marshmallow memiliki banyak fitur baru yang sangat dinanti dan salah satunya adalah sesuatu yang telah dimiliki pengguna iPhone selama bertahun-tahun: izin aplikasi granular. Phone Arena menginstal pratinjau pengembang terbaru tentang Marshmallow dan memposting beberapa tips hebat untuk membantu pengguna Android memastikan mereka hanya berbagi data dengan aplikasi yang ingin mereka bagikan secara khusus.

Untuk mengakses fitur manajemen izin Marshmallow, Anda ingin membuka menu Pengaturan dan kemudian klik pada bagian Aplikasi. Dari sana, klik ikon Roda Gigi yang kemudian akan memberi Anda opsi untuk pergi ke pengelola izin aplikasi.

Untuk membuat daftar aplikasi yang dapat menggambar di atas aplikasi lain, buka Pengaturan - Aplikasi - Lanjutan (menu dengan ikon roda gigi) - Geser ke aplikasi lain .

Anda juga dapat mengaktifkan / menonaktifkan fitur sementara dengan mengetuk aplikasi, dan mengaktifkan "Izin menggambar di atas aplikasi lain".

Manajer izin Android M.

Gambar milik Sebastiano Gottardo di Medium

Andrew T.
sumber
1
Bagi saya, Advanced (menu dengan ikon gir) tidak ada, tetapi sebaliknya ada di ikon dotdotdot atas / kanan, lalu; konfigurasi aplikasi.
AnneTheAgile
3

Terima kasih banyak @Firelord! Saya akhirnya menemukan aplikasi yang mencegah saya menginstal apk dan melakukan backup adb.

Bagi saya, saya menemukan itu adalah aplikasi bernama Battery MixBaca terus untuk melihat apa yang saya lakukan dan bagaimana saya melakukannya.

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

Banyak orang memiliki masalah dengan Menginstal apk dan tidak dapat menekan 'Instal'. Semua jawaban yang saya dapat temukan terutama untuk menampilkan aplikasi peredupan, pewarnaan, dan penghemat daya. Karena saya tidak menggunakan atau menghapus semua aplikasi yang sama, saya telah berjuang untuk menemukan apa yang sedang terjadi dan aplikasi mana yang menjadi penyebabnya. Dan akhirnya! Setelah satu perintah sederhana dan pencarian cepat, telah diselesaikan: D

Aplikasi menyinggung Battery Mixadalah aplikasi pemantauan baterai sederhana yang memiliki fungsi yang saya gunakan untuk menampilkan garis tipis di bagian atas layar untuk menunjukkan keadaan tingkat baterai (aplikasi kecil yang hebat).

Jadi untuk mendiagnosis, saya menggunakan perintah dari Firelord(di atas) untuk membuang file teks dan kemudian untuk mencari aplikasi yang menyebabkan sistem android mencegah saya dari mengklik tombol Install.

Jalankan perintah dari PC

adb shell dumpsys window windows > dumpsys-windows.txt

Pencarian untuk

SYSTEM_ALERT_WINDOW

Untuk menemukan aplikasi yang menyinggung saya mencari string di atas

Yang memberi saya garis:

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

(Lihat unggahan gambar untuk bagian file teks) masukkan deskripsi gambar di sini

segera saya bisa mengenali aplikasi mana yang dimaksud: jp.smapho. battery_mix

Jadi sekarang saya tahu untuk mematikan aplikasi itu setiap kali saya berencana untuk melakukan sideload atau sebelum backup adb.

mitchbw
sumber
-1

Untuk Android Marshmallow, dan Oxygen 3.0.2, Menonaktifkan popup Tata Letak Layar

Buka Aplikasi dan konfigurasikan Aplikasi dan Pilih Draw di atas aplikasi lain.

Pergi dan pilih aplikasi untuk menonaktifkannya sehingga aplikasi tidak terblokir dari pengajuan tata letak layar. dan aplikasi dapat langsung mendapatkan izin

Buka aplikasi dan Izin masing-masing dan aktifkan izin yang Anda inginkan.

Nikmati

Raj

DILLIRAJ PD
sumber
2
Semua informasi ini sudah ada dalam jawaban Andrew T. Anda tidak perlu memposting jawaban baru untuk mengulangi instruksi yang sama. Simpan usaha Anda untuk pertanyaan yang belum dijawab :-)
Dan Hulme