Soy nuevo en el desarrollo de Android y actualmente estoy creando mi primera aplicación real. Estoy tratando de implementar una arquitectura MVVM y por eso tengo un modelo de vista para cada fragmento y cada modelo de vista tiene una fábrica de modelos de vista. Al menos, así es como entendí que tiene que ser.
Uso el código repetitivo que todos parecen usar para la fábrica:
class ExampleViewModelFactory(private val exampleDao: ExampleDao) : ViewModelProvider.Factory { override fun <T : ViewModel> create(modelClass: Class<T>): T { if (modelClass.isAssignableFrom(exampleViewModel::class.java)) { @Suppress("UNCHECKED_CAST") return ExampleViewModel(exampleDao) as T } throw IllegalArgumentException("Unknown ViewModel class") } }Ahora el problema es que el compilador me está dando el siguiente error:
e: C:\Users\ ...\ExampleViewModel.kt: (64, 7): la herencia de una interfaz con miembros '@JvmDefault' solo se permite con la opción -Xjvm-default
Y este error lo produce la clase viewModelFactory que he implementado en el viewModel. Realmente no puedo decir qué significa esto y no puedo encontrar nada útil o incluso relacionado con mi problema específico. Básicamente seguí algunos tutoriales básicos sobre cómo crear tu primera aplicación, pero sigo encontrándome con errores como este. En la mayoría de los casos, pude solucionar el problema por mí mismo, pero esta vez es diferente.
Sé que muchos de ustedes tienen mucha experiencia y conocimiento, así que espero que algunos de ustedes encuentren el tiempo para ayudarme y darme una pista de lo que puedo hacer para solucionar esto.
Parece que depende directa o indirectamente (a través de alguna otra biblioteca) de Lifecycle 2.5.0-alpha01 .
Según este problema :
Debe agregar temporalmente lo siguiente a su
build.gradle:tasks.withType(KotlinCompile).configureEach { kotlinOptions { freeCompilerArgs += [ "-Xjvm-default=all", ] } }Tenga en cuenta que, en determinadas circunstancias, es posible que desee utilizar
all-compatibilityen lugar de la compatibilidadall; obtenga más información al respecto en la publicación de blog de Jebrain .A partir de kotlin 1.6.20, no necesitará tocar build.gradle para obtener más información, consulte KT-47000
Versión de Kotlin (kts) de la respuesta de @ianhanniballake
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile::class).configureEach { kotlinOptions { freeCompilerArgs = freeCompilerArgs + "-Xjvm-default=all" } }Intente poner estas líneas dentro del bloque android{} en el archivo build.gradle del módulo
kotlinOptions{ freeCompilerArgs += [ "-Xjvm-default=all", ] }Si el código anterior no funciona, intente agregar estas líneas a continuación dentro del bloque de dependencias {}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach{ kotlinOptions{ freeCompilerArgs +=["-Xjvm-default=all",] } }Usa la versión estable, en este caso la 2.4.1. Tengo el mismo problema y lo resolví haciendo este cambio.
https://developer.android.com/jetpack/androidx/releases/lifecycle