Xác định ứng dụng nào được vẽ trên đầu các ứng dụng khác?


21

Có cách nào để xác định ứng dụng nào được vẽ trên đầu các ứng dụng khác không?

Ví dụ: ứng dụng Facebook Messenger có thể vẽ bong bóng trò chuyện lên trên tất cả mọi thứ, nhưng làm cách nào để biết ứng dụng nào đang làm điều này?

Vấn đề của tôi:

Tôi có một ứng dụng vẽ quảng cáo trên tất cả mọi thứ và tôi muốn biết ứng dụng nào đang làm điều này. Không chỉ để gỡ cài đặt nó, mà còn cảnh báo mọi người sử dụng ứng dụng này. (Tôi đã không cài đặt bất kỳ ứng dụng nào gần đây và tôi đã xác minh các bản cập nhật gần đây.)

Tôi đã cố gắng sử dụng Phân cấp chế độ xem kết xuất cho UI Automator từ Android Studio, nhưng có vẻ như các ứng dụng được vẽ ở trên không thể được chọn theo cách này.

(Bấm vào hình để phóng to)

Màn hình Android Studio


Chỉ cần thêm vào các vấn đề được lưu ý trong câu trả lời dưới đây (để cố gắng giữ cho nó hoàn chỉnh). Trong TouchWiz (Samsung Galaxy, của tôi là Note 4), việc tắt bảng điều khiển bên cạnh đã giải quyết vấn đề này cho tôi.
0xc0de

Đối với những người không phải là nhà phát triển, chỉ cần kiểm tra danh sách các ứng dụng tại đây: android.stackexchange.com/questions/154274/ Kẻ
Jonathan

Câu trả lời:


24

Chú thích:

  • nên được thiết lập trong PC.
  • Đối với Android sớm hơn phiên bản 4.4.x, có thể cần truy cập root.
  • Một số lệnh sẽ không hoạt động trên Android sớm hơn phiên bản 5.1.
  • Chuyển đến tiêu đề " Ứng dụng cho ứng dụng " nếu bạn không quen hoặc không thoải mái với dòng lệnh và / hoặc dòng lệnh không giải quyết được vấn đề của bạn.

Chỉnh sửa: cắt đuổi theo giải pháp trước đó và chỉ làm theo phần được chỉnh sửa này.

Thiết lập và chạy lệnh này:

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

Bạn sẽ nhận được đầu ra của tất cả các lớp phủ hoạt động trên màn hình. Ví dụ về đầu ra với Trình ghi màn hình DU, Trình quản lý tác vụ và Trình ghi màn hình AZ hiển thị lớp phủ hoạt động trên màn hình:

bash-4.3 # adb shell "dumpsys window windows | toybox grep -i system_alert_window"
    mOwnerUid = 10087 mShowToOwnerOnly = true gói = net.dinglisch.android.tasker appop = HỆ THỐNG_ALERT_WINDOW
    mOwnerUid = 10604 mShowToOwnerOnly = true gói = com.hecorat.screenrecorder.free appop = HỆ THỐNG_ALERT_WINDOW
    mOwnerUid = 10604 mShowToOwnerOnly = true gói = com.hecorat.screenrecorder.free appop = HỆ THỐNG_ALERT_WINDOW
    mOwnerUid = 10649 mShowToOwnerOnly = true gói = com.duapps.recorder appop = HỆ THỐNG_ALERT_WINDOW
    mOwnerUid = 10649 mShowToOwnerOnly = true gói = com.duapps.recorder appop = HỆ THỐNG_ALERT_WINDOW
    mOwnerUid = 10604 mShowToOwnerOnly = true gói = com.hecorat.screenrecorder.free appop = HỆ THỐNG_ALERT_WINDOW
    mOwnerUid = 10604 mShowToOwnerOnly = true gói = com.hecorat.screenrecorder.free appop = HỆ THỐNG_ALERT_WINDOW
    mOwnerUid = 10638 mShowToOwnerOnly = true gói = ninja.sesame.app.edge appop = HỆ THỐNG_ALERT_WINDOW

Văn bản được tô sáng bên cạnh gói = và trước khi xuất hiện là tên gói của (các) ứng dụng hiện đang vẽ lớp phủ trên màn hình. Trong trường hợp của bạn, đầu ra bao gồm (các) tên gói sẽ khác nhau.

Lưu ý (các) tên gói (từ đó là PKG) và thực hiện lệnh này:

adb shell am force-stop PKG

Thay thế PKG bằng tên gói bạn ghi chú. Nếu bạn có nhiều tên gói, lặp lại lệnh với một tên gói một lần.

Lệnh sẽ dừng ứng dụng một cách mạnh mẽ và do đó loại bỏ lớp phủ. Điều này nên làm việc. Bạn cũng có thể tước quyền "Vẽ trên các ứng dụng khác" (viết tắt là lớp phủ màn hình) khỏi các ứng dụng bằng lệnh này:

adb shell appops set PKG SYSTEM_ALERT_WINDOW ignore

Một lần nữa, thay thế PKG bằng tên gói khi cần thiết. Hơn nữa, bạn có thể phải lặp lại lệnh dừng lực lượng cho PKG. Nếu bạn quyết định hoàn nguyên các thay đổi, thay thế bỏ qua bằng lệnh cho phép ở trên.

Bạn cũng có thể sử dụng Ops ứng dụng để quản lý các quyền từ GUI.

Để biết tên gói nào tương ứng với ứng dụng nào bạn có thể thử một ứng dụng nguồn mở như Thông tin ứng dụng . Tìm kiếm theo tên gói và bạn sẽ nhận được tên của Ứng dụng.

Chỉnh sửa xong

Bạn thực sự không cần phải đọc nữa . Tôi vẫn để nguyên giải pháp trước đó (tức là phần sau) vì 21 người đã bỏ phiếu đã thấy điều đó hữu ích và tôi không muốn gây rối nữa.


Một cách đơn giản là tìm ra tất cả các ứng dụng có quyền "rút ra các ứng dụng khác" và sau đó chọn chúng từ những ứng dụng hiện đang hoạt động trên màn hình. Sau đó, tham gia bắt buộc dừng các ứng dụng phổ biến đó cho đến khi bạn xác định chính xác ứng dụng chịu trách nhiệm cho lớp phủ hoạt động.

Liệt kê các ứng dụng có quyền cho lớp phủ

Sự cho phép được yêu cầu bởi một ứng dụng để tạo lớp phủ là android.permission.SYSTEM_ALERT_WINDOW(rút ra các ứng dụng khác).

Chúng tôi cần tìm ra tất cả các ứng dụng đã cài đặt có sự cho phép nói trên. Tùy thuộc vào bạn để tìm ra một phương pháp cho việc này. Câu trả lời của tôi ở đây có thể giúp bạn.

Lưu ý rằng chúng tôi cần tên gói của ứng dụng chứ không phải nhãn của chúng.

Cherry-pick từ các cửa sổ đang hoạt động

Thực hiện lệnh

adb shell dumpsys window windows 

Điều này sẽ cung cấp cho bạn thông tin chi tiết về bất cứ điều gì khiến thứ gì đó được hiển thị trên màn hình, bao gồm cả tên thành phần của ứng dụng gây ra nó.

Làm thế nào bạn sẽ trích xuất tên là tùy thuộc vào bạn. Bạn có thể thử lệnh này tuy nhiên

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

Nếu bạn nhận được lỗi: 'grep' không được nhận dạng là lệnh nội bộ hoặc bên ngoài , trên Windows hãy thử lệnh thay thế này:

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

Đầu ra demo

Cửa sổ số 4 Cửa sổ {42065d50 u0 com.android.phone/com. Liềnk.phone.UssdAlertActivity}:
Cửa sổ số 5 Cửa sổ {42197468 u0 ginlemon.flowerpro / ginlemon.flower.HomeScreen}:
Cửa sổ số 6 Cửa sổ {420fdb58 u0 com.android.systemui.ImageWallapers}:
Cửa sổ số 7 Cửa sổ {421e3b88 u0 com.android.contacts / com.android.contacts.activities.DialtactsActivity}:

Trong đầu ra trên, bất cứ điều gì thành công u0 và trước đó /là tên gói của một ứng dụng. Một ứng dụng có thể có nhiều thành phần hiển thị một cái gì đó trên màn hình.

Bạn đã tạo một danh sách các tên gói đó. Nếu bạn đã cài đặt BusyBox , bạn có thể làm

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

Dù sao đi nữa, bây giờ bạn sẽ có hai danh sách:

  • Danh sách đầu tiên chứa tất cả các ứng dụng có sự cho phép android.permission.SYSTEM_ALERT_WINDOW.
  • Danh sách thứ hai chứa tất cả các ứng dụng tích cực hiển thị một cái gì đó trên màn hình.

So sánh hai danh sách này và các ứng dụng duy nhất phổ biến trong cả hai danh sách. Danh sách thứ ba này sẽ tạo thành các ứng dụng có quyền vẽ lớp phủ và hiện đang vẽ một lớp phủ hoạt động trên màn hình.

Thời gian để giết

Giết từng ứng dụng từ danh sách thứ ba từng cái một và chú ý trạng thái lớp phủ. Bạn có thể sử dụng am force-stop PACKAGE_NAME --user 0hoặc bất kỳ phương pháp nào phù hợp với bạn. PACKAGE_NAMElà tên gói của ứng dụng.

EDIT : Không cần thiết phải giết một ứng dụng. Bạn có thể xem xét từ chối ứng dụng cho phép vẽ trên các ứng dụng khác. Sử dụng lệnh này:

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

Để hoàn nguyên các thay đổi, thay thế từ chối bằng cho phép trong lệnh đã nói và thực hiện nó.

Nếu bạn đang chạy Android Marshmallow, câu trả lời này của Andrew T. có thể được sử dụng.

Lưu ý: Lệnh nói trên được thử nghiệm thành công trên Android 5.1.1 và 6.0.1 (bản dựng CM). Cũng có thể lệnh này hoạt động trên Android 5.0.x nhưng tôi không thể đảm bảo . Việc thực thi lệnh đó trên phiên bản Android được phát hành trước Lollipop sẽ gây ra lỗi.

Vì thường lớp phủ có thể nhận thấy được, nó sẽ biến mất ngay lập tức khoảnh khắc ứng dụng gây ra nó bị giết, do đó, bạn sẽ biết ứng dụng nào gây ra lớp phủ đó.

Ứng dụng cho ứng dụng

Được đề xuất ban đầu bởi Izzy, bạn có thể sử dụng một ứng dụng có chức năng cho phép liệt kê được cấp cho các ứng dụng đã cài đặt, để loại bỏ các ứng dụng có quyền "rút ra các ứng dụng khác". Bạn có thể tự mình tìm kiếm một ứng dụng như vậy hoặc sử dụng trình kiểm tra Quyền cho phép được duy trì bởi Izzy trên trang web của anh ấy.

Bạn cũng sẽ cần một trình quản lý quy trình / ứng dụng để buộc dừng / hủy một số quy trình. Tôi khuyên dùng OS Monitor nhưng bạn có quyền tự do sử dụng bất kỳ ứng dụng có thẩm quyền nào. Xem các ứng dụng liên quan dưới Thông tin hệ thống .

Chỉ dành cho mục đích trình diễn

Tôi đã thử Trình quản lý cấp phép nâng cao để liệt kê các ứng dụng có quyền "thu hút các ứng dụng khác". Sau đó, tôi chuyển sang OS Monitor để xem các ứng dụng đang chạy ở nền trước và nền. Tôi đã khớp với đầu ra từ cả hai ứng dụng và cá nhân dừng các ứng dụng phổ biến trong cả hai ứng dụng. Bạn có thể giết một quá trình từ bên trong Màn hình hệ điều hành, do đó không cần phải chuyển sang cài đặt Ứng dụng.

(Bấm vào hình để phóng to)

IMG: IMG: IMG:


1
Cảm ơn bạn rất nhiều Firelord. Tôi đã học được rất nhiều với bài viết của bạn!
andreroggeri

1
Cảm ơn, danh sách cửa sổ là cứu cánh khi tôi đang cố gắng tìm một ứng dụng phần mềm quảng cáo dường như có thể vẽ mọi thứ ... mà không có sự cho phép "vẽ các ứng dụng khác".
Craig Ringer

3

Nếu bạn đang sử dụng Android 6.0 Marshmallow, bạn có thể sử dụng trình quản lý quyền gốc của nó.

Từ một bài viết trên BGR ,

Android 6.0 Marshmallow có rất nhiều tính năng mới rất được mong đợi và một trong số đó là thứ mà người dùng iPhone đã có trong nhiều năm: Quyền ứng dụng dạng hạt. Phone Arena đã cài đặt bản xem trước dành cho nhà phát triển mới nhất của Marshmallow và đăng một số mẹo tuyệt vời để giúp người dùng Android đảm bảo họ chỉ chia sẻ dữ liệu với các ứng dụng mà họ đặc biệt muốn chia sẻ.

Để truy cập tính năng quản lý quyền của Marshmallow, bạn sẽ muốn mở menu Cài đặt và sau đó nhấp vào phần Ứng dụng. Từ đó, nhấp vào biểu tượng Bánh răng sau đó sẽ cung cấp cho bạn tùy chọn để đi đến trình quản lý quyền ứng dụng.

Để liệt kê các ứng dụng có thể thu hút các ứng dụng khác, hãy đi tới Cài đặt - Ứng dụng - Nâng cao (menu có biểu tượng bánh răng) - Vẽ qua các ứng dụng khác .

Bạn cũng có thể tạm thời bật / tắt tính năng này bằng cách nhấn vào ứng dụng và chuyển đổi "Cho phép vẽ trên các ứng dụng khác".

Trình quản lý cấp phép Android M

Hình ảnh lịch sự của Sebastiano Gottardo trên Medium


1
Đối với tôi, Advanced (menu có biểu tượng bánh răng) đã bị thiếu, nhưng thay vào đó, nó nằm ở biểu tượng dotdotdot trên cùng / bên phải, sau đó; cấu hình ứng dụng.
AnneTheAgile

3

Cảm ơn rất nhiều @Firelord! Cuối cùng tôi đã tìm thấy ứng dụng ngăn tôi cài đặt apk và thực hiện sao lưu adb.

Đối với tôi, tôi thấy đó là một ứng dụng có tên Battery MixĐọc trên để xem những gì tôi đã làm và cách tôi đã làm nó.

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

Nhiều người đã gặp sự cố với Cài đặt apk và không thể nhấn 'Cài đặt'. Tất cả các câu trả lời tôi có thể tìm thấy chủ yếu là hiển thị các ứng dụng làm mờ, nhuốm màu, tiết kiệm năng lượng. Vì tôi không sử dụng bất kỳ hoặc đã xóa tất cả các ứng dụng tương tự, tôi đã phải vật lộn để tìm ra những gì đang xảy ra và ứng dụng nào là thủ phạm. Và cuối cùng! Sau một lệnh đơn giản và tìm kiếm nhanh, nó đã được giải quyết: D

Ứng dụng vi phạm Battery Mixlà một ứng dụng theo dõi pin đơn giản có chức năng tôi đã sử dụng để hiển thị một đường mỏng trên đỉnh màn hình để hiển thị trạng thái của mức pin (một ứng dụng nhỏ tuyệt vời).

Vì vậy, để chẩn đoán, tôi đã sử dụng một lệnh từ Firelord(ở trên) để kết xuất một tệp văn bản và sau đó để tìm kiếm ứng dụng khiến hệ thống Android ngăn tôi bấm vào nút Cài đặt đó.

Thực thi lệnh từ PC

adb shell dumpsys window windows > dumpsys-windows.txt

Tìm kiếm

SYSTEM_ALERT_WINDOW

Để tìm bất kỳ ứng dụng vi phạm nào, tôi đã tìm kiếm chuỗi trên

Mà đã cho tôi dòng:

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

(Xem hình ảnh tải lên cho phần của tệp văn bản) nhập mô tả hình ảnh ở đây

ngay lập tức tôi có thể nhận ra ứng dụng nào được đề cập đến: jp.smapho. pin_mix

Vì vậy, bây giờ tôi biết để giết ứng dụng đó bất cứ khi nào tôi có kế hoạch tải hoặc sao lưu dự phòng adb.


-1

Đối với Android Marshmallow và Oxygen 3.0.2, vô hiệu hóa cửa sổ bật lên Bố cục màn hình

Truy cập Ứng dụng và định cấu hình Ứng dụng và Chọn Vẽ trên các ứng dụng khác.

Đi và chọn ứng dụng để vô hiệu hóa nó để ứng dụng được bỏ chặn khỏi phần trình bày bố cục màn hình. và ứng dụng có thể trực tiếp có được quyền

Truy cập ứng dụng và Quyền tương ứng và kích hoạt các quyền bạn muốn.

Thưởng thức

Raj


2
Tất cả thông tin này đã có trong câu trả lời của Andrew T. Bạn không cần phải đăng câu trả lời mới để lặp lại các hướng dẫn tương tự. Hãy tiết kiệm công sức của bạn cho những câu hỏi chưa được trả lời :-)
Dan Hulme
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.