안드로이드 모바일 앱을 운영하다 보면 QUERY_ALL_PACKAGES 권한으로 인해 앱이 게시중지 될 수 있다는 메시지를 받을때가 있습니다.
해당 권한을 간단히 설명하면, 스마트폰에 설치된 모든 앱의 패키지명을 쿼리(질의요청)한다는 의미이다.
리턴은 스마트폰에 설치된 패키지명 리스트를 알 수 있다. But!!! 구글은 스마트폰에 설치된 모바일 앱의 패키지명 또한 민감정보로 분류함에 따라 꼭 필요한 경우가 아니면 본 권한을 제한하도록 정책을 변경하였다.
또한 QUERY_ALL_PACKAGES 권한은 Android 11 부터 적용되며, SDK는 30 이상을 타겟팅 해야 사용할 수 있다.
본 권한이 허용되는 용도는 다음과 같다.
| 구분 | 설명 |
| 허용 | 기기 검색, 바이러스 백신 앱, 파일 관리자, 브라우저 등 |
| 비허용 | 허용과 예외에서 설명하는 것 외의 모든 목적인 경우, 특히 판매를 위한 데이터 수집, 광고 목적 등 |
| 예외 | 금융 거래 기능(예: 전용 은행, 전용 디지털 지갑)과 관련된 보안 관련 목적으로 사용되는 경우 |
최근 내가 운영하는 앱도 QUERY_ALL_PACKAGES 권한이 포함되어 있어서 해당 권한을 삭제하지 않으면 앱이 내려간다는 무시무시한 메시지를 받아 부랴부랴 처리를 하였다.

음.. 경고를 해결하지 않으면 큰일난다는 메시지 ㄷㄷㄷㄷㄷㄷ;;;;
해결 방법
1. 앱의 Manifest에 아래의 코드가 포함되어 있는지 확인하고, 별도로 사용되는 곳이 없다면 아래 코드만 삭제 후 재심사 진행.
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" />
2. 아래 예시처럼 QUERY_ALL_PACKAGES 를 실제로 사용하는 경우
허용 범위라면 구글에 의견서를 제출하도록 하고, 아니라면 다음과 같이 수정
<!-- 아래와 같이 queries 로 실제로 사용하는 경우라면 수정 필요 -->
<manifest package="com.example.game">
<queries>
<package android:name="com.example.store" />
<package android:name="com.example.services" />
</queries>
</manifest>
Manifest 에서 queries 부분을 삭제하고 코드로 명시적인 패키지명을 호출하도록 변경해야 한다.
// Manifest 에서 queries 부분을 모두 삭제 후 아래와 같이 명시적인 패키지명 호출로 변경
val intent = mContext.packageManager.getLaunchIntentForPackage("com.example.store")
startActivity(intent)
물론 본인이 개발/운영하는 앱이 허용 범주라면 구글에 잘 소명하면 되겠고, 아니라면 본 글에서 설명한 것과 같이 무조건 수정이 필요하다.
출처.
폭넓은 패키지(앱) 가시성(QUERY_ALL_PACKAGES) 권한 사용 - Play Console 고객센터
도움이 되었나요? 어떻게 하면 개선할 수 있을까요? 예아니요
support.google.com
패키지 공개 상태 요구사항 선언 | Android 개발자 | Android Developers
패키지 공개 상태 요구사항 선언 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 앱을 만들 때는 앱이 상호작용해야 하는 기기의 다른 앱을 고려하는 것이
developer.android.com