디아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를 언제 사용하면 좋은지 알아보고, 글을 마무리합니다.