Compose 업데이트 시 core-splashscreen 에러

강현석·2022년 11월 11일
1

troubleshooting

목록 보기
1/7

개발환경

디아2 룬워드앱의 컴포즈 버전을 업데이트를 하고 싶었으며 사용 버전은 1.1.1이다.
core-splashscreen을 사용하고 있으며, 1.1.0-beta02 버전을 쓰고 있다.
디아2 룬워드 앱 링크

단순히 버전만 업데이트하면 되겠지? ^^ ^^ (그게 됐으면 이 글을 안썼지)

문제가 발생했다

컴포즈 버전만 업데이트했는데, 아래와 같은 에러가 발생하면서 Crash가 났다.

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.beok.runewords/com.beok.runewords.home.HomeActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

당혹스럽다;;;;

해결해보자

첫 번째 시도

먼저 구글링을 해보았다.
Implementing Core Splashscreen API 아티클이 나온다.
(하지만 난 이 아티클을 참고해서 core-splashscreen을 적용했었다. ^^)
저 에러가 나타나는 이유는, setContentView()를 호출하기 전에 installSplashScreen() 을 호출하지 않아서 문제가 발생했다고 한다.
이 해결책은 도움이 안된다. (이미 이렇게 구현이 되어 있었고 잘 동작이 되고 있었기 때문)

두 번째 시도

나와 같은 이슈를 겪은 사람이 있는지 열심히 구글링을 해보았지만, 없다...

세 번째 시도

추측을 하기 시작했다.
기존에 잘 되다가 왜 AppCompat 테마가 필요하다고 했을까?

컴포즈 버전이 업데이트되면서 테마와 관련된 부분이 변경되었을까?

컴포즈 버전별 히스토리를 찾아보았지만, 실마리를 찾지 못했다.
Compose UI | Android Developers

마지막 시도

테마와 관련이 있다고 생각이 들어서, 문제가 발생한 Activity를 살펴보았다.

@AndroidEntryPoint
internal class HomeActivity : AppCompatActivity() {

AppCompatActivity의 구현부를 살펴보았더니, setTheme 함수가 있었다.
혹시 이 부분이 문제가 될까 의심을 했다.

setTheme 함수가 없는 Activity를 상속받게 하면 어떨까?

그래서 ComponentActivity 를 상속받도록 코드를 수정했다.

@AndroidEntryPoint
internal class HomeActivity : ComponentActivity() {

결과는 정상적으로 앱이 실행됐다!!!

마치며

AppCompatActivity와 ComponentActivity를 언제 사용하면 좋은지 알아보고, 글을 마무리합니다.

  • AppCompatActivity?
    • AppCompat API 사용
    • AppCompat 또는 MaterialComponent 테마와 함께 사용하는 AndroidView 사용
    • Fragments 사용
  • ComponentActivity?
    • 컴포즈 전용 앱 (컴포즈에 필요한 모든 것을 다 가지고 있음)
    • 실제로 Compose용 Activity를 만들면, ComponentActivity를 상속한 Activity가 만들어짐
profile
볼링을 좋아하는 안드로이드 개발자

0개의 댓글