val mApp = pkgMgr.getPackageInfo("kr.or.nhic",0)
Util.Log("${mApp.versionName}")
안드로이드 외부 앱의 정보를 가져오던 중 빌드 오류가 떴다.
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at com.android.internal.os.RuntimeInitMethodAndArgsCaller.run(RuntimeInit.java:496)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
Caused by: android.content.pm.PackageManager$NameNotFoundException: kr.or.nhic
at android.app.ApplicationPackageManager.getPackageInfoAsUser(ApplicationPackageManager.java:275)
at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:244)
위의 코드는 안드로이드 10 버전까지는 문제 없이 잘 동작하지만 안드로이드 11(API 레벨 30) 버전부터는 앱의 패키지 공개 상태를 지정하지 않으면 접근할 수 없다고 한다.
영향 받는 함수들
PackageManager.getPackageInfo()
PackageManager.queryIntentActivities()
PackageManager.getInstalledPackages()
PackageManager.getInstalledApplications()
bindService()
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
... >
<!--안드로이드 11이상 패키지명으로 외부 앱 실행 시 추가-->
<queries>
<package android:name="kr.or.nhic" />
</queries>
...
</manifest>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
... >
...
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" />
</manifest>