본문 바로가기
IT/Android

System.err: android.content.pm.PackageManager$NameNotFoundException: com.example.app

by 큰공 2024. 1. 31.
728x90
반응형

NameNotFoundException

 android 개발하는 중에, System.err 로 위와 같이 Packagemanager 에서 이름을 찾을 수 없다는 Exception 에러가 발생할 경우, 이를 해결하는 방법에 대해서 알아보도록 하겠습니다.

 

에러 전문

01-15 16:38:23.011  1884  1884 W System.err: android.content.pm.PackageManager$NameNotFoundException: com.example.app
01-15 16:38:23.011  1884  1884 W System.err: 	at android.app.ApplicationPackageManager.getPackageInfoAsUser(ApplicationPackageManager.java:253)
01-15 16:38:23.011  1884  1884 W System.err: 	at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:213)
01-15 16:38:23.011  1884  1884 W System.err: 	at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:207)
01-15 16:38:23.011  1884  1884 W System.err: 	at com.mobis.car.apps.utils.PackageManagerUtils.isSystemApplication(PackageManagerUtils.java:13)
01-15 16:38:23.011  1884  1884 W System.err: 	at com.mobis.car.apps.AppItemViewHolder.bind(AppItemViewHolder.java:103)
01-15 16:38:23.011  1884  1884 W System.err: 	at com.mobis.car.apps.AppGridAdapter.onBindViewHolder(AppGridAdapter.java:214)
01-15 16:38:23.011  1884  1884 W System.err: 	at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7420)
01-15 16:38:23.011  1884  1884 W System.err: 	at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7503)
01-15 16:38:23.012  1884  1884 W System.err: 	at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6360)
01-15 16:38:23.012  1884  1884 W System.err: 	at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6626)
01-15 16:38:23.012  1884  1884 W System.err: 	at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6466)
01-15 16:38:23.012  1884  1884 W System.err: 	at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6462)
01-15 16:38:23.012  1884  1884 W System.err: 	at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2330)
01-15 16:38:23.012  1884  1884 W System.err: 	at androidx.recyclerview.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:572)
01-15 16:38:23.012  1884  1884 W System.err: 	at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1591)
01-15 16:38:23.012  1884  1884 W System.err: 	at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:668)
01-15 16:38:23.012  1884  1884 W System.err: 	at androidx.recyclerview.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:170)
01-15 16:38:23.012  1884  1884 W System.err: 	at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4464)
01-15 16:38:23.012  1884  1884 W System.err: 	at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:4167)
01-15 16:38:23.012  1884  1884 W System.err: 	at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4733)

 

01-15 16:38:23.019  1884  1884 W System.err: android.content.pm.PackageManager$NameNotFoundException: ComponentInfo{com.example.app/com.example.app.MainActivity}
01-15 16:38:23.019  1884  1884 W System.err: 	at android.app.ApplicationPackageManager.getActivityInfo(ApplicationPackageManager.java:567)
01-15 16:38:23.020  1884  1884 W System.err: 	at android.app.ApplicationPackageManager.getActivityInfo(ApplicationPackageManager.java:550)
01-15 16:38:23.020  1884  1884 W System.err: 	at com.android.systemui.car.displayarea.CarDisplayAreaController.getTopActivityInfo(CarDisplayAreaController.java:1052)
01-15 16:38:23.020  1884  1884 W System.err: 	at com.android.systemui.car.displayarea.CarDisplayAreaController.updateForegroundDaVisibility(CarDisplayAreaController.java:1168)
01-15 16:38:23.020  1884  1884 W System.err: 	at com.android.systemui.car.displayarea.CarDisplayAreaController.-$$Nest$mupdateForegroundDaVisibility(Unknown Source:0)
01-15 16:38:23.020  1884  1884 W System.err: 	at com.android.systemui.car.displayarea.CarDisplayAreaController$1.lambda$onTaskMovedToFront$1(CarDisplayAreaController.java:275)
01-15 16:38:23.020  1884  1884 W System.err: 	at com.android.systemui.car.displayarea.CarDisplayAreaController$1.$r8$lambda$w-jLx9kEBdlDCdTzk4ybnJPE230(Unknown Source:0)
01-15 16:38:23.020  1884  1884 W System.err: 	at com.android.systemui.car.displayarea.CarDisplayAreaController$1$$ExternalSyntheticLambda1.run(Unknown Source:4)
01-15 16:38:23.020  1884  1884 W System.err: 	at android.os.Handler.handleCallback(Handler.java:942)
01-15 16:38:23.020  1884  1884 W System.err: 	at android.os.Handler.dispatchMessage(Handler.java:99)
01-15 16:38:23.021  1884  1884 W System.err: 	at android.os.Looper.loopOnce(Looper.java:201)
01-15 16:38:23.021  1884  1884 W System.err: 	at android.os.Looper.loop(Looper.java:288)
01-15 16:38:23.021  1884  1884 W System.err: 	at android.app.ActivityThread.main(ActivityThread.java:7918)
01-15 16:38:23.021  1884  1884 W System.err: 	at java.lang.reflect.Method.invoke(Native Method)
01-15 16:38:23.021  1884  1884 W System.err: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
01-15 16:38:23.021  1884  1884 W System.err: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:946)

 

ChatGPT

1) 패키지 이름 확인: 어떤 이유로 인해 "com.example.app" 패키지가 제대로 설치되지 않았거나 패키지 이름에 오타가 있는지 확인하세요.
2) 패키지 정보 확인: getPackageInfo 메서드를 사용하여 패키지 정보를 가져오는 코드를 검토하고, 패키지 이름이 올바르게 전달되었는지 확인하세요.
3) RecyclerView 및 어댑터 검토: RecyclerView와 어댑터 관련 코드를 검토하여 데이터가 제대로 처리되고 있는지 확인하세요. 특히, 어댑터에서 onBindViewHolder 메서드와 AppItemViewHolder 클래스의 bind 메서드에서 발생하는 문제를 식별하세요.
4) 시스템 애플리케이션 확인: PackageManagerUtils.java 파일의 13번째 라인에서 시스템 애플리케이션 여부를 확인하는 부분을 검토하고, 패키지 이름이 제대로 처리되고 있는지 확인하세요.

 

Ghat GPT 문의 결과, 패키지가 제대로 설치 되지 않았다는 의견을 주고 있습니다. 그치만 패키지를 어떻게 설치하는지에 대한 가이드는 주고 있지 않습니다.

 

Copilot Chat

이 에러는 PackageManager.getPackageInfo() 메소드가 특정 패키지 이름(com.example.app)에 대한 정보를 찾지 못했을 때 발생합니다.
이는 주로 해당 패키지 이름을 가진 앱이 설치되지 않았을 때 발생하는 문제입니다.
해결 방법은 다음과 같습니다: 앱이 실제로 설치되어 있는지 확인하세요.
패키지 이름이 올바른지, 오타가 없는지 확인하세요. PackageManager.getPackageInfo() 메소드를 호출하기 전에 PackageManager.getInstalledPackages()를 사용하여 설치된 패키지 목록을 가져와서 원하는 패키지가 실제로 설치되어 있는지 확인할 수 있습니다.
PackageManager.getPackageInfo() 메소드 호출을 try-catch 블록으로 감싸서 PackageManager.NameNotFoundException 예외를 처리할 수 있습니다. 이렇게 하면 앱이 설치되지 않았을 때 앱이 강제 종료되는 것을 방지할 수 있습니다.

 

이 또한, 패키지가 정상적으로 설치 되지 않았음을 시사 합니다. Run 을 해서 App 이 정상적으로 실행이 되는데, 왜 패키지가 설치되지 않았다고 하지?? 라고 의문을 가질 수 있습니다.

 

구글 가이드

https://developer.android.com/reference/android/content/pm/PackageManager.NameNotFoundException

 

PackageManager.NameNotFoundException  |  Android Developers

 

developer.android.com

구글 가이드에도 단순 패키지, 어플리케이션, 컴포넌트의 이름을 찾을 수 없을 때 발생하는 Exception 이라고 명시 되어 있습니다.

 

RUN 옵션

 문제는 Android Studio 에서 Run 옵션을 줄 때, 옵션 선택의 차이로 인하여 발생하는 현상이였습니다.

 메뉴 -> Run -> Edit Configuration -> Run/Debug Configurations 에 

 

 "Always install with package manager (disables deploy optimizations on Android11 and later)" 을 활성화 해줍니다.

 

 

 안드로이드 11 이상에서 최적화 옵션을 통해서 disables 할 수 있는것으로 보여지며, 비활성화 시, APK 가 package manger에 등록이 되지 않아, NameNotFoundException 가 발생하는 현상입니다.

 

요약

NameNotFoundException 발생 시, Run/Debug Configurations 에 Always install with package manager 항목을 활성화 시켜준다.

 

 

728x90
반응형

댓글