본문으로 건너뛰기

05.04 일지

SplashActivity >> MainActivity 넘어가지 않는 문제 디버깅


디버깅 툴

Flutter를 쓸 때완 다르게 디바이스 화면에서 에러를 확인할 수 없는 것 같다. - 이런 측면은 사용자 경험에 좋아보인다 대신 에러코드를 Android Studio logcat을 통해서 확인가능했다

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.inbody_clone, PID: 19211
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.inbody_clone/com.example.inbody_clone.MainActivity}: android.view.InflateException: Binary XML file line #23 in com.example.inbody_clone:layout/activity_main: Binary XML file line #18 in com.example.inbody_clone:layout/content_main: Error inflating class fragment
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3676)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3813)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2308)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7898)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
Caused by: android.view.InflateException: Binary XML file line #23 in com.example.inbody_clone:layout/activity_main: Binary XML file line #18 in com.example.inbody_clone:layout/content_main: Error inflating class fragment
Caused by: android.view.InflateException: Binary XML file line #18 in com.example.inbody_clone:layout/content_main: Error inflating class fragment
Caused by: java.lang.IllegalArgumentException: Binary XML file line #18: Duplicate id 0x7f080133, tag null, or parent id 0xffffffff with another fragment for androidx.navigation.fragment.NavHostFragment
at androidx.fragment.app.FragmentLayoutInflaterFactory.onCreateView(FragmentLayoutInflaterFactory.java:117)
at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:135)
at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:295)
at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:274)
at android.view.LayoutInflater.tryCreateView(LayoutInflater.java:1073)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1001)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:965)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1127)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088)
at android.view.LayoutInflater.parseInclude(LayoutInflater.java:1267)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088)
at android.view.LayoutInflater.inflate(LayoutInflater.java:686)
at android.view.LayoutInflater.inflate(LayoutInflater.java:538)
at android.view.LayoutInflater.inflate(LayoutInflater.java:485)
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:706)
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:195)
at com.example.inbody_clone.MainActivity.onCreate(MainActivity.kt:24)
at android.app.Activity.performCreate(Activity.java:8290)
at android.app.Activity.performCreate(Activity.java:8269)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1384)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3657)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3813)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
2023-05-04 20:57:01.833 19211-19211/? E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2308)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7898)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
2023-05-04 20:57:01.859 19211-19211/? I/Process: Sending signal. PID: 19211 SIG: 9

logcat 확인1

java.lang.RuntimeException: Unable to start activity ComponentInfo{.MainActivity} ⇒ MainActivity 클래스의 실행에 실패함


logcat 확인2

android.view.InflateException ⇒ Inflate과정에서 에러가 발생함을 확인


Inflate fragment란?

Inflate : XML 파일에 정의된 레이아웃을 인스턴스를 만들어서 띄어주는 과정 ⇒ XML 레이아웃 파일의 정의가 잘못되어 있어 XML 파일을 띄울 때 문제가 발생한 것 같음


logcat 확인3

Error inflating class fragment ⇒ 런타임에서 Fragment를 만들어낼 때 에러가 발생함


결론: XML파일이 제대로 쓰여졌는지 확인


XML파일 문제지점1

Caused by: android.view.InflateException: Binary XML file line #23 in com.example.inbody_clone:layout/activity_main: Binary XML file line #18 in com.example.inbody_clone:layout/content_main: Error inflating class fragment
Caused by: android.view.InflateException: Binary XML file line #18 in com.example.inbody_clone:layout/content_main: Error inflating class fragment
Caused by: java.lang.IllegalArgumentException: Binary XML file line #18: Duplicate id 0x7f080133, tag null, or parent id 0xffffffff with another fragment for androidx.navigation.fragment.NavHostFragment

위의 2개 문제들은 아래의 에러로부터 기인한 것으로 판단,

Binary XML file line #18: Duplicate id 0x7f080133, tag null, or parent id 0xffffffff with another fragment for androidx.navigation.fragment.NavHostFragment

⇒ 동일한 id를 가진 NavHostFragment가 인스턴스로 생성돼서 문제가 발생


XML파일 문제지점2

XML file line #18 = app:navGraph="@navigation/nav_graph" /> ⇒ 해당 코드 자체는 <fragment />에서 어떤 네비게이션 그래프를 사용할지 명시해주는 부분이라 문제가 발생할 여지가 없음 → nav_graph.xml 파일 쪽의 문제인가?

해당 부분을 삭제하고 실행해도 여전히 에러발생 ⇒ #18에서 문제가 생긴건 navGraph를 명시하는 과정이 아니라 <fragment /> 태그가 닫히는 부분이었기 때문에 #18로 명시되었음을 확인.


XML파일 문제지점3

그렇다면 with another fragment for androidx.navigation.fragment.NavHostFragment는 NavHost가 관리하는 Fragment 중 id가 중복이되는 Fragment가 존재한다는 의미로 이해할 수 있겠다.

그리고 중복되는 Fragment는 바로 현재 정의하고 있는 이 <fragment>겠지?


but.. ⇒ 찾아봐도 중복되는 부분이 안보임

우선 막힌 상태에서 마무리, 내일 다시...