DefaultActivityViewModelFactory no encontrado

3 minutos de lectura

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:

ingrese la descripción de la imagen aquí

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?

  • 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

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 a ViewModel 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

¿Ha sido útil esta solución?