개발/Android

컴포즈 내비게이션 CreationExtras must have a value by `SAVED_STATE_REGISTRY_OWNER_KEY` 오류

귀염둥이 팡무 2022. 12. 7. 21:48

Jetpack Compose Navigation Issue

오류 로그

java.lang.IllegalArgumentException: CreationExtras must have a value by `SAVED_STATE_REGISTRY_OWNER_KEY`

오류 시나리오

현재 GDSC TUK(Google Developer Student Clubs - TECH UNIVERSITY OF KOREA)에서 2022년 안드로이드 스터디 마무리 프로젝트로 스쿨메이트라는 서비스를 개발하고 있었다.

 

초기 프로젝트 셋업 시 Hilt, Ktor 등 필요한 라이브러리도 디펜던시 연결해둔 상태에서 시간이 흘러 내비게이션을 도입을 해야하는 상황까지 오게 되었다. 컴포즈 내비게이션은 회사에서 매 프로젝트마다 작업하던 것이기에 간단하게 생각하고 적용을 하였으나 런타임에서 위의 오류 로그를 만났다.

오류 분석

  • NavHost 안에서 composable 분기까지는 문제 없으나 Screen을 넣으면 죽으니 ViewModel의 문제일까?
    • ViewModel을 제거하여도 마찬가지로 런타임에서 오류가 발생한다.
  • 이전 잘못 빌드된 파일이 남아있는 것일까?
    • Clean Build를 하여도 동일하다.
  • 내비게이션에서 사용되는 KEY 값이 잘못된 것 일까?
    • 하나하나 체크하여도 잘못된 부분이 없다.

오류 원인

혹시나 하고 app단 build.gradle에 들어가 디펜던시를 확인해보니 androidx.hilt:hilt-navigation-compose만 연결되어 있었다. 그렇다. Hilt 내비게이션만 연결하고 정작 컴포즈 내비게이션 디펜던시는 연결하지 않았던 것이었다. (익숙함에 속아 기본을 놓치지 말자...)

오류 해결

가볍게 컴포즈 내비게이션만 추가해주면 문제를 해결할 수 있다.

implementation "androidx.navigation:navigation-compose:2.5.3"

TIP

블로그 포스팅을 위해 추가적인 정보를 찾다 보니 Fragment를 사용하고 있다면 위와 같은 오류가 발생할 수 있다는 스택오버플로우 글 을 확인하였다.


본인은 순수 Jetpack Compose만으로 구성되어있기에 생략하여도 문제없었으나, 혹시라도 위의 디펜던시를 추가하여도 문제가 발생하시는 분은 아래의 디펜던시를 추가하면 된다.

implementation "androidx.fragment:fragment-ktx:1.5.4"