다른 앱 위에 어떤 앱이 그려져 있는지 확인 하시겠습니까?


21

어떤 응용 프로그램이 다른 응용 프로그램 위에 그려 지는지 확인할 수있는 방법이 있습니까?

예를 들어 Facebook Messenger 앱은 무엇보다 채팅 거품을 그릴 수 있지만 어떤 앱이이 작업을 수행하는지 어떻게 알 수 있습니까?

내 문제:

나는 무엇보다 광고를 그리는 앱을 가지고 있으며 어떤 앱이 이것을하고 있는지 알고 싶습니다. 제거뿐만 아니라이 앱을 사용하는 모든 사람에게 경고합니다. (최근에 응용 프로그램을 설치하지 않았으며 최근 업데이트를 이미 확인했습니다.)

Android Studio에서 UI Automator에 Dump View Hierarchy for UI Automator 를 사용하려고 시도했지만 맨 위에 그리는 응용 프로그램을 이러한 방식으로 선택할 수없는 것 같습니다.

(이미지를 클릭하면 확대됩니다)

안드로이드 스튜디오 화면


아래 답변에 언급 된 문제에 추가하기 만하면됩니다 (완전하게 유지하십시오). TouchWiz (Samsung Galaxy의 경우 광산은 참고 4)에서 측면 키 패널을 끄면이 문제가 해결되었습니다.
0xc0de

개발자가 아닌 경우 여기에서 app. android.stackexchange.com/questions/154274/…
Jonathan

답변:


24

노트 :

  • 는 이미 PC에 설정되어 있어야합니다.
  • 4.4.x 이전의 Android의 경우 루트 액세스가 필요할 수 있습니다.
  • 일부 명령은 5.1 이전 버전의 Android에서는 작동하지 않습니다.
  • 명령 줄에 익숙하지 않거나 불편한 경우 또는 명령 줄로 문제를 해결하지 못하면 " 앱용 앱 "으로 이동 하십시오.

편집 : 이전 솔루션에서 추적을 자르고이 편집 된 섹션 만 따르십시오.

설정 하고 다음 명령을 실행하십시오.

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

화면에서 모든 활성 오버레이 의 출력을 얻을 수 있습니다. DU Screen Recorder, Tasker 및 AZ Screen Recorder를 사용하여 화면에 활성 오버레이를 표시하는 출력의 예 :

bash-4.3 # adb shell "dumpsys 창 windows | toybox grep -i system_alert_window"
    mOwnerUid = 10087 mShowToOwnerOnly = true 패키지 = 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 패키지 = ninja.sesame.app.edge appop = SYSTEM_ALERT_WINDOW

package = 옆 과 appop 앞에 강조 표시된 텍스트 는 현재 화면에 오버레이 로 표시 되는 앱의 패키지 이름 입니다. 귀하의 경우 패키지 이름을 포함한 출력이 다를 수 있습니다.

패키지 이름 (이후 PKG)을 기록하고 다음 명령을 실행하십시오.

adb shell am force-stop PKG

적어 패키지 이름으로 PKG 를 교체하십시오 . 패키지 이름이 여러 개인 경우 한 번에 하나의 패키지 이름으로 명령을 반복하십시오.

이 명령은 앱을 강제로 중지하여 오버레이를 삭제합니다. 이 작동합니다. 이 명령을 사용하여 앱에서 "다른 앱 위에 그리기"(화면 오버레이가 짧게) 권한을 제거 할 수도 있습니다.

adb shell appops set PKG SYSTEM_ALERT_WINDOW ignore

필요에 따라 PKG를 패키지 이름으로 바꾸십시오. 또한 PKG에 대해 강제 정지 명령을 반복해야 할 수도 있습니다. 변경 사항을 복귀하기로 결정하는 경우, 대체 무시수 있도록 상기 명령.

또는 App Ops 를 사용하여 GUI의 권한을 관리 할 수 ​​있습니다.

어떤 패키지 이름이 어떤 앱에 해당하는지 알기 위해 Applications Info 와 같은 오픈 소스 앱을 사용해 볼 수 있습니다. 패키지 이름으로 검색하면 앱 이름이 표시됩니다.

편집 완료

이제 더 이상 읽을 필요가 없습니다 . 투표에 참여한 21 명이 도움이되고 더 이상 엉망으로 만들고 싶지 않기 때문에 이전 솔루션 (즉, 다음 섹션)을 그대로 둡니다.


간단한 방법은 "다른 앱 위로 끌어 오기"권한이있는 모든 앱을 찾은 다음 현재 화면에서 활성화 된 앱에서 해당 앱을 찾아내는 것입니다. 그런 다음 활성 오버레이를 담당하는 앱을 정확히 지적 할 때까지 해당 공통 앱을 강제 중지하십시오.

오버레이 권한이있는 앱 열거

앱이 오버레이를 생성하는 데 필요한 권한은 android.permission.SYSTEM_ALERT_WINDOW(다른 앱을 통해 인출)입니다.

해당 권한이있는 설치된 모든 앱을 찾아야합니다. 이에 대한 방법을 찾는 것은 당신에게 달려 있습니다. 여기에 내 대답 이 도움이 될 수 있습니다.

우리는 애플 리케이션 '필요 패키지 이름 이 아닌 자신의 레이블을.

활성 창에서 체리 픽

명령을 실행

adb shell dumpsys window windows 

그러면 앱을 일으키는 앱의 구성 요소 이름을 포함하여 화면에 표시되는 원인에 대한 세부 정보가 제공됩니다.

이름을 추출하는 방법은 당신에게 달려 있습니다. 그러나이 명령을 시도 할 수 있습니다

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

당신이 오류가 발생하는 경우 : 내부 또는 외부 명령으로 인식되지 않는 '그렙' Windows에서이 대안 명령을 시도 :

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

데모 출력

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

위 출력에서 ​​성공 u0 및 선행 /은 앱의 패키지 이름입니다. 앱에는 화면에 무언가를 표시하는 여러 구성 요소가있을 수 있습니다.

해당 패키지 이름 목록을 작성해야합니다. 당신이 경우 비지 박스가 설치되어 , 당신은 할 수있다

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

어쨌든, 이제 두 가지 목록이 생깁니다.

  • 첫 번째 목록에는 권한이있는 모든 앱이 포함됩니다 android.permission.SYSTEM_ALERT_WINDOW.
  • 두 번째 목록에는 화면에 무언가를 실제로 표시하는 모든 앱이 포함됩니다.

이 두 목록과 두 목록에서 공통적 인 단일 앱을 비교하십시오. 이 세 번째 목록은 오버레이 그리기 권한이 있으며 현재 화면에 활성 오버레이를 그리는 앱으로 구성됩니다.

죽일 시간

세 번째 목록에서 각 앱을 하나씩 종료하고 오버레이 상태를 확인하십시오. 귀하 am force-stop PACKAGE_NAME --user 0에게 적합한 다른 방법을 사용할 수 있습니다 . PACKAGE_NAME앱의 패키지 이름입니다.

편집 : 앱을 죽일 필요는 없습니다. 앱에 다른 앱을 그릴 수있는 권한을 거부 할 수 있습니다. 이 명령을 사용하십시오 :

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

변경 사항을 되돌리려면 해당 명령에서 denyallow 로 바꾸고 실행하십시오.

Android Marshmallow를 실행중인 경우 Andrew T. 의이 답변 을 사용할 수 있습니다.

참고 : 위에 언급 된 명령은 Android 5.1.1 및 6.0.1 (CM 빌드)에서 성공적으로 테스트되었습니다. 명령이 Android 5.0.x에서 작동 할 수도 있지만 보장 할 수는 없습니다 . Lollipop 이전에 출시 된 Android 버전에서 해당 명령을 실행 하면 오류가 발생합니다.

오버레이는 종종 인식 가능하기 때문에 앱을 중단시키는 순간 앱이 즉시 사라 지므로 어떤 앱이 해당 오버레이를 유발했는지 알 수 있습니다.

앱용 앱

원래 Izzy에서 제안한대로 설치된 앱에 부여 된 권한을 나열하는 기능이있는 앱을 사용하여 "다른 앱을 넘길 수있는"권한이있는 앱을 선택할 수 있습니다. 이러한 앱을 직접 검색하거나 웹 사이트에서 Izzy가 유지 관리하는 권한 검사기 목록을 사용할 수 있습니다.

또한 일부 프로세스를 강제 중지 / 종료하려면 프로세스 / 앱 관리자가 필요합니다. OS Monitor를 권장 하지만 유능한 앱을 자유롭게 사용할 수 있습니다. 시스템 정보 에서 관련 앱을 참조 하십시오 .

데모 목적으로 만

"다른 앱을 넘길 수있는"권한이있는 앱을 나열하기 위해 고급 권한 관리자 를 시도했습니다 . 그런 다음 OS 모니터로 전환하여 포 그라운드 및 백그라운드에서 실행되는 앱을 확인했습니다. 두 앱의 출력을 일치시키고 두 앱에서 공통으로 사용되는 앱을 개별적으로 강제 중지했습니다. OS 모니터 내부에서 프로세스를 종료 할 수 있으므로 앱 설정으로 전환 할 필요가 없습니다.

(이미지를 클릭하면 확대됩니다)

IMG : IMG : IMG :


1
매우 감사합니다. 나는 당신의 게시물과 함께 많은 것을 배웠습니다!
andreroggeri

1
고맙게도 창 목록은 "다른 응용 프로그램 그리기"권한없이 모든 것을 그릴 수있는 애드웨어 응용 프로그램을 찾으려고 할 때 생명의 은인이었습니다.
Craig Ringer

3

Android 6.0 Marshmallow를 사용하는 경우 기본 권한 관리자를 사용할 수 있습니다.

에서 BGR에 대한 기사 ,

Android 6.0 Marshmallow에는 매우 기대되는 새로운 기능이 많이 있으며 그중 하나는 iPhone 사용자가 수년간 가지고 있었던 것입니다 : 세분화 된 앱 권한. Phone Arena는 Marshmallow의 최신 개발자 미리보기를 설치하고 Android 사용자가 특별히 공유하려는 앱과 만 데이터를 공유 할 수 있도록 유용한 팁을 게시했습니다.

Marshmallow의 권한 관리 기능에 액세스하려면 설정 메뉴를 연 다음 앱 섹션을 클릭하십시오. 거기에서 톱니 바퀴 아이콘을 클릭하면 앱 권한 관리자로 이동하는 옵션이 제공됩니다.

다른 앱 위에 그릴 수있는 앱을 나열하려면 설정-앱-고급 (톱니 바퀴 아이콘이있는 메뉴)-다른 앱 위에 그리기로 이동하십시오 .

앱을 눌러 기능을 일시적으로 활성화 / 비활성화하고 "다른 앱 위에 드로잉 허용"을 토글 할 수도 있습니다.

Android M 권한 관리자

매체Sebastiano Gottardo가 제공 한 이미지


1
나를 위해, 고급 (톱니 바퀴 아이콘이있는 메뉴)이 누락되었지만 대신 상단 / 오른쪽 점 도트 아이콘에 있습니다. 앱 구성.
AnneTheAgile

3

@Firelord 무리 감사합니다! 마침내 APK를 설치하고 adb 백업을 수행하지 못하게하는 앱을 찾았습니다.

나에게 그것은 내가 한 Battery Mix일과 내가 한 일을보기 위해 Read 라는 앱이라는 것을 알았습니다.

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

많은 사람들이 APK 설치에 문제가있어서 '설치'를 누를 수 없습니다. 내가 찾을 수있는 모든 대답은 주로 흐리게, 색조, 절전 앱을 표시하기 위해 다운되었습니다. 내가 사용하지 않았거나 모든 유사한 응용 프로그램을 제거했을 때 나는 무슨 일이 일어나고 있고 어떤 응용 프로그램이 범인인지 찾기 위해 고심하고있었습니다. 그리고 마지막으로! 하나의 간단한 명령과 빠른 검색 후 해결되었습니다. : D

문제 Battery Mix가 되는 앱 은 간단한 배터리 모니터링 앱으로 화면 상단에 얇은 선을 표시하여 배터리 잔량 상태를 보여줍니다 (작은 작은 앱).

그래서 진단을 위해 Firelord위 의 명령을 사용하여 텍스트 파일을 덤프 한 다음 설치 버튼을 클릭하지 못하게하는 안드로이드 시스템을 일으킨 앱을 검색했습니다.

PC에서 명령 실행

adb shell dumpsys window windows > dumpsys-windows.txt

검색

SYSTEM_ALERT_WINDOW

위의 문자열을 검색하여 문제가되는 응용 프로그램을 찾으려면

나에게 줄을 주었다.

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

(텍스트 파일 섹션은 이미지 업로드 참조) 여기에 이미지 설명을 입력하십시오

jp.smapho : 참조하는 앱을 즉시 알 수 있습니다. battery_mix

따라서 이제는 adb 백업을 사이드로드하거나 제공 할 때마다 해당 앱을 종료하는 것을 알고 있습니다.


-1

Android Marshmallow 및 Oxygen 3.0.2의 경우 화면 레이아웃 팝업 사용 안함

앱으로 이동하여 앱을 구성하고 다른 앱보다 그리기를 선택하십시오.

화면 레이아웃 권한에서 앱이 차단되지 않도록 앱을 선택하여 비활성화합니다. 앱이 직접 권한을 얻을 수 있습니다

해당 앱과 권한으로 이동하여 원하는 권한을 활성화하십시오.

즐겨

주권


2
이 모든 정보는 이미 Andrew T의 답변에 있습니다. 동일한 지침을 반복하기 위해 새 답변을 게시하지 않아도됩니다. 아직 답변되지 않은 질문에 대한 노력을 절약하십시오 :-)
Dan Hulme
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.