[Android/Kotlin] 외부 앱 정보 가져오기 에러 - Caused by: android.content.pm.PackageManager$NameNotFoundException:

SoyoungLee·2022년 8월 2일
0
post-thumbnail

💌 [Android/Kotlin] 외부 앱 정보 가져오기 에러 - Caused by: android.content.pm.PackageManager$NameNotFoundException:

설치된 앱의 정보 가져오기 게시글 링크

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:506)atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)Causedby:java.lang.reflect.InvocationTargetExceptionatjava.lang.reflect.Method.invoke(NativeMethod)atcom.android.internal.os.RuntimeInitMethodAndArgsCaller.run(RuntimeInit.java:506) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) 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 에 추가

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

		... >
        
	<!--안드로이드 11이상 패키지명으로 외부 앱 실행 시 추가-->
    <queries>
        <package android:name="kr.or.nhic" />
    </queries>
    
    ...
    
</manifest>

< queries > 태그 사용 없이 모든 외부 앱의 정보 접근 가능

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
		... >

    ...
    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
        tools:ignore="QueryAllPackagesPermission" />
    
</manifest>

-> 되도록이면 < queries > 태그 사용 권장

profile
Android Developer..+ iOS 슬쩍 🌱 ✏️끄적끄적,,개인 기록용 👩🏻‍💻

0개의 댓글