Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Expand
title문제 해결하기

'create' overrides nothing

문제 상황

버즈캐시버튼의 종속성을 추가한 상태에서 빌드할 때, 다음과 같은 에러 메시지가 발생하면서 빌드에 실패할 수 있습니다.

'create' overrides nothing

조금 더 구체적으로는 다음과 같은 메시지를 받을 수 있습니다.

Class 'ViewModelFactory' is not abstract and does not implement abstract member public abstract fun <T : ViewModel> create(modelClass: Class<T>): T defined in androidx.lifecycle.ViewModelProvider.Factory

문제 설명

기존에 androidx.lifecycle 모듈을 2.2.0 이하 버전을 사용하면서 코틀린으로 ViewModelProvider.Factory 를 상속한 객체를 구현하고 있었던 경우, 버즈캐시버튼을 연동하면서 버전이 2.4.0 이후 버전으로 올라갔기 때문에 발생합니다.

androidx.lifecycle 모듈은 2.4.0에서 다음과 같은 하위호환성이 깨지는 변화가 있었습니다.

하위호환성이 깨지는 변화: ViewModelProvider 가 코틀린으로 재작성되었습니다.

ViewModelProvider.Factory.create 함수는 더 이상 nullable 제네릭을 허용하지 않습니다.

해결 방법

코드에 다음과 같이 nullable한 타입으로 ViewModelProvider.Factory.create 함수를 사용하는 경우를 찾습니다.

Code Block
class SomeViewModelFactory(): ViewModelProvider.Factory {
    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
        ....
    }
}

다음과 같이 create 함수가 nullable한 제네릭을 사용하지 않도록 변경합니다. (? 가 제거되었습니다.)

Code Block
class SomeViewModelFactory(): ViewModelProvider.Factory {
    override fun <T : ViewModel> create(modelClass: Class<T>): T {
        ....
    }
}

관련 문서

Inheritance from an interface with '@JvmDefault' members is only allowed with -Xjvm-default option

문제 상황

버즈캐시버튼의 종속성을 추가한 상태에서 빌드할 때, 다음과 같은 에러 메시지가 발생하면서 빌드에 실패할 수 있습니다.

Inheritance from an interface with '@JvmDefault' members is only allowed with -Xjvm-default option

문제 설명

기존에 androidx.lifecycle 모듈을 2.5.0 미만의 버전을 사용하면서 코틀린으로 ViewModelProvider.Factory 를 상속한 객체를 구현하고 있었던 경우, 버즈캐시버튼을 연동하면서 버전이 2.5.0 이후 버전으로 올라갔기 때문에 발생합니다.

androidx.lifecycle 모듈은 2.5.0-alpha01 에서 하위호환성이 깨지는 변화가 있었고, 이로 인해 이 문제가 발생한다고 합니다.

해결 방법

다음 두 가지 해결 방법 중 적절한 방법을 골라서 적용합니다.

  1. 앱 수준의 build.gradle 파일에 다음을 추가합니다.

    Code Block
    android {
       ...
       kotlinOptions {
           ...
           freeCompilerArgs += [
                    "-Xjvm-default=all",
            ]
       }
    }
  2. 코틀린 버전을 1.6.20 버전 이상으로 올립니다.

관련 문서

이어서 보기

Child pages (Children Display)
allChildrentrue