Después de migrar la versión de Hilt de 2.33-beta
a 2.35
mi proyecto ha dejado de compilarse con el error que se indica a continuación:
Una versión de txt:
error: cannot access DefaultActivityViewModelFactory
class file for dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory not found
Consult the following stack trace for details.
com.sun.tools.javac.code.Symbol$CompletionFailure: class file for dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory not found
Un fragmento de mi build.gradle (proyecto):
buildscript {
ext.hilt_version = '2.33-beta'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.32"
...
classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version"
}
}
allprojects {
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Un fragmento de mi build.gradle (aplicación):
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-parcelize'
apply plugin: 'kotlin-kapt'
apply plugin: 'dagger.hilt.android.plugin'
android {
compileSdkVersion 29
...
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
arguments += [
"room.schemaLocation": "$projectDir/schemas".toString(),
"room.incremental" : "true"
]
}
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
testOptions {
execution 'ANDROIDX_TEST_ORCHESTRATOR'
}
buildFeatures {
viewBinding true
dataBinding true
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
...
//DI
implementation "com.google.dagger:hilt-android:$hilt_version"
implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03"
implementation 'androidx.hilt:hilt-work:1.0.0-beta01'
kapt "com.google.dagger:hilt-compiler:$hilt_version"
kapt "com.google.dagger:hilt-android-compiler:$hilt_version"
kapt 'androidx.hilt:hilt-compiler:1.0.0-beta01'
// INSTRUMENTED TESTS
...
androidTestImplementation "com.google.dagger:hilt-android-testing:$hilt_version"
kaptAndroidTest "com.google.dagger:hilt-android-compiler:$hilt_version"
androidTestImplementation "androidx.work:work-testing:2.5.0"
//KOTLIN
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.32"
//LIFECYCLE
implementation 'androidx.lifecycle:lifecycle-common-java8:2.3.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1'
// WORK MANAGER
implementation "androidx.work:work-runtime-ktx:2.5.0"
}
¿Alguien se encuentra con ese error y sabe cual puede ser la solución?
Eliminar la dependencia de hilt-lifecycle-viewmodel hace que el error desaparezca, ya que ya no es necesario en las versiones más recientes de hilt. Simplemente elimine esta línea de su nivel de aplicación build.gradle
archivo si lo tiene.
implementation 'androidx.hilt:hilt-lifecycle-viewmodel:x.x.x'
-
Eliminé y desapareció el error, pero cuando agregué la dependencia de viewmodel con ViewModelScoped, arroja un error como el error: [Dagger/MissingBinding] com.example.smartbilling.ui.login.LoginViewModel no se puede proporcionar sin un constructor Inject o un método anotado por Provides. La clase estática abstracta pública SingletonC implementa BaseApplication_GeneratedInjector, ^
– Akash kumar
29 de abril de 2021 a las 12:29
-
@Akashkumar Los documentos aquí pueden serle útiles. Esencialmente le muestra la forma recomendada de usar el
ViewModelScope
dagger.dev/hilt/view-model.html– Rafsanyani
29 de abril de 2021 a las 12:45
-
@Rafsanjani, ¡gracias! Después de eliminar esta biblioteca, tuve que corregir el error:
incompatible types: NonExistentClass cannot be converted to Annotation
. Tu enlace aViewModel
me ayudó.– CoolMind
24 de mayo de 2021 a las 15:18
-
¿No encontró esto en las notas de la versión de google/dagger, o nos falta algo? Por cierto, ¡muchas gracias, nos salvaste los días!
– mochadwi
12 de julio de 2021 a las 7:18
-
¿Esto no se resolvió para mí?
– mobibob
6 oct a las 23:11
Con empuñadura puede inicializar un ViewModel sin una fábrica. ¿Puedes mostrar el código de tu ViewModel?
– ameencarpenter
25 de abril de 2021 a las 18:05
Tengo el mismo problema. Quitar esta importación parece haberlo arreglado para mí.
implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03'
– Rafsanyani
25/04/2021 a las 20:39
@Rafsanjani muchas gracias. Tienes razón. los
androidx.hilt:hilt-lifecycle-viewmodel
la dependencia era el problema. También era redundante en la versión beta. No dudes en escribir la respuesta 😉– Patryk Kubiak
26 abr 2021 a las 20:03
@Rafsanjani Muchas gracias. Estaba recibiendo un error un poco diferente, era algo así como “No se puede procesar my.packages.SingletonC”, pero también mencionaba DefaultActivityViewModelFactory, y ni siquiera tengo ViewModels o UI que los use todavía (reescribiendo una aplicación y solo tenga la capa de datos, el repositorio y parte de la configuración DI). Al comentar que la dependencia del modelo de vista del ciclo de vida lo arregló.
– almeja
10 de agosto a las 5:42