안드로이드 모바일 앱을 운영하다 보면 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)
물론 본인이 개발/운영하는 앱이 허용 범주라면 구글에 잘 소명하면 되겠고, 아니라면 본 글에서 설명한 것과 같이 무조건 수정이 필요하다.
출처.