Versions Compared

Key

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

...

우선 프로젝트의 build.gradle 파일에 버즈캐시버튼을 위한 저장소를 추가해야 합니다.

Code Block
설명하다allprojectsallprojects {
    repositories {
        google()
        mavenCentral()
        maven { url "https://jitpack.io" }
        maven { url 'https://dl.buzzvil.com/public/maven' }
        maven { url 'https://artifact.bytedance.com/repository/pangle' }
        maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/' }
        maven { url 'https://raw.githubusercontent.com/coupang-ads-sdk/android/main' }
        maven {
          url "s3://repo.cauly.net/releases"
          credentials(AwsCredentials) {
            accessKey "AKIAWRZUK5MFKYVSUOLB"
            secretKey "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"
          }
        }
    }
}

...

다음으로, 앱 수준의 build.gradle 파일에 버즈캐시버튼 종속성을 추가합니다.

Code Block
설명하다dependenciesdependencies {
    // Buzzvil BOM
    api platform("com.buzzvil:buzzvil-bom:$buzzvilBomVersion")
    implementation "com.buzzvil:buzzscreen"
    implementation "com.buzzvil:buzz-cashbutton" // 버즈캐시버튼 종속성 추가
}

...

앱 수준의 build.gradle 파일에서 다음과 같이 특정 모듈의 종속성을 제외해주면 해결됩니다.

Code Block
설명하다dependenciesdependencies {
    ....
    implementation ("com.buzzvil:buzz-roulette") {
        exclude group: 'com.avatye.cashbutton.buzzvil', module:'archive-ads-mezzomedia'
    }
}

...

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
설명하다classclass SomeViewModelFactory(): ViewModelProvider.Factory {
    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
        ....
    }
}

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

Code Block
설명하다classclass 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
    설명하다androidandroid {
       ...
       kotlinOptions {
           ...
           freeCompilerArgs += [
                    "-Xjvm-default=all",
            ]
       }
    }
  2. 코틀린 버전을 1.6.20 버전 이상으로 올립니다.

관련 문서