ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Package] 안드로이드 11 Package Visibility
    Android/Package 2021. 10. 20. 18:38

    Android Storage 변경사항을 공부하다가 권한 사용법을 까먹어서 공부하다가 권한 사용법을 공부하다가 잠깐 PackageManager를 이용하는 법을 공부하다가 안드로이드 11 변경사항까지 와버렸다...

    간단하게 이런 내용이다라는 정도로만 글을 남긴다

    ( 나중에 사용하는 경우에 공부해야지 현재 쓰지도 않는데 건드려봤자 또 까먹기...)

     

    PackageManager를 통해 다른 앱의 정보를 이용하는 경우가 있다고 한다.

    안드로이드 11부터는 Package Visibility가 도입되어 패키지 공개 상태 변경사항이 적용된다고 한다.

     

    안드로이드 11에서 돌아가는 앱에서는 디바이스에 설치된 다른 앱 목록을 알수없고

    미리 매니페스트 파일에 쿼리할 패키지 이름 또는 인텐트 필터 서명을 <queries>로 지정하여야 한다.

     

    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            val packageManager = packageManager
    
            try {
                //디바이스에 설치된 다른 앱 - com.source.packages.queryallpackagestestapplication
                //다른 앱의 패키지 정보를 확인
                val packageInfo = packageManager
                    .getPackageInfo("com.source.packages.queryallpackagestestapplication", 0)
                log("다른 앱의 패키지 정보확인: $packageInfo")
    
                //안드로이드 10이하 
                //확인하고 싶은 앱이 디바이스에 설치되어있고 
                //정보를 가져오려하면 예외 발생하지 않음
                
            } catch (e: Exception) {
                //안드로이드 11
                //확인하고 싶은 앱이 깔려있고 
                //정보를 가져오려하면 package visibility 로 인해 예외 발생
                    
                log("패키지를 가져올 수 없습니다")
                if (e is PackageManager.NameNotFoundException) {
                    log("PackageManager.NameNotFoundException")
                }
            }
    
        }
    
        private fun log(str: String) {
            Log.d("GET_PACKAGE_INFO_TEST", str)
        }
    
    }

    API 29 (Android10)

     

    API 30 (Android 11) 

     

    매니페스트에 패키지명에 해당하는 <queries> 태그 추가후

    API 30 디바이스 확인

     

    <queries>태그를 적절하게 사용할 수 없는 앱, 모든 패키지의 정보를 알아야하는 구글 서비스, 구글 플레이 같은 앱은 이러한 방법을 사용할 수 없다.

    QUERY_ALL_PACKAGES 권한을 선언하는 경우 <queries>태그를 설정하지 않아도 되지만 정책을 적절하게 따르지 않는 경우에는 앱이 올라가지 않을 수도있다.

    에러가 나지만 빌드와 앱 실행은 제대로 된다.... 쓸데없이 사용할 필요가 없다는 뜻으로 에러를 내는 것 같다...

    댓글

Designed by Tistory.