DefaultActivityViewModelFactory nicht gefunden

Lesezeit: 3 Minuten

Nach der Migration der Hilt-Version von 2.33-beta zu 2.35 Mein Projekt wurde mit dem unten angegebenen Fehler nicht mehr erstellt:

Geben Sie hier die Bildbeschreibung ein

Eine txt-Version:

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

Ein Ausschnitt aus meinem build.gradle (Projekt):

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
}

Ein Ausschnitt meiner build.gradle (App):

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"
}

Kennt jemand diesen Fehler und weiß, was die Lösung sein kann?

  • Mit hilt können Sie ein ViewModel ohne Factory initialisieren. Können Sie den Code Ihres ViewModels zeigen!

    – Ameentischler

    25. April 2021 um 18:05 Uhr

  • Ich habe das gleiche Problem. Das Entfernen dieses Imports scheint es für mich behoben zu haben implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03'

    – Rafsandschani

    25. April 2021 um 20:39 Uhr


  • @Rafsanjani vielen Dank. Sie haben Recht. Das androidx.hilt:hilt-lifecycle-viewmodel Abhängigkeit war das Problem. Es war auch in der Beta-Version überflüssig. Schreib die Antwort gerne 😉

    – Patryk Kubiak

    26. April 2021 um 20:03 Uhr


  • @Rafsanjani Vielen Dank. Ich habe einen etwas anderen Fehler erhalten, es war so etwas wie “My.packages.SingletonC konnte nicht verarbeitet werden”, aber es wurde auch DefaultActivityViewModelFactory erwähnt, und ich habe noch nicht einmal ViewModels oder UI, die sie verwenden (Umschreiben einer App und haben Sie nur die Datenschicht, das Repo und einen Teil des DI-Setups). Das Auskommentieren dieser Lifecycle-Viewmodel-Abhängigkeit hat es behoben.

    – Muschel

    10. August um 5:42

Durch das Entfernen der Abhängigkeit von hilt-lifecycle-viewmodel verschwindet der Fehler, da er in neueren Versionen von hilt nicht mehr benötigt wird. Löschen Sie diese Zeile einfach aus Ihrer App-Ebene build.gradle Datei, wenn Sie es haben.

implementation 'androidx.hilt:hilt-lifecycle-viewmodel:x.x.x'

  • Ich habe es entfernt und der Fehler ist verschwunden, aber als ich die Viewmodel-Abhängigkeit mit ViewModelScoped hinzugefügt habe, wird ein Fehler wie ein Fehler ausgegeben: [Dagger/MissingBinding] com.example.smartbilling.ui.login.LoginViewModel kann nicht ohne einen Inject-Konstruktor oder eine mit Provides kommentierte Methode bereitgestellt werden. öffentliche abstrakte statische Klasse SingletonC implementiert BaseApplication_GeneratedInjector, ^

    – Akash Kumar

    29. April 2021 um 12:29 Uhr

  • @Akashkumar Die Dokumente hier könnten für Sie hilfreich sein. Es zeigt Ihnen im Wesentlichen die empfohlene Art der Verwendung des ViewModelScope dagger.dev/hilt/view-model.html

    – Rafsandschani

    29. April 2021 um 12:45 Uhr


  • @Rafsanjani, danke! Nach dem Entfernen dieser Bibliothek musste ich den Fehler beheben: incompatible types: NonExistentClass cannot be converted to Annotation. Ihr Link zu ViewModel half mir.

    – CoolMind

    24. Mai 2021 um 15:18 Uhr


  • Haben Sie dies nicht in den Release Notes google/dagger gefunden, oder haben wir etwas übersehen? Übrigens, vielen Dank, du hast unsere Tage gerettet!

    – mochadwi

    12. Juli 2021 um 7:18 Uhr


  • das hat sich für mich nicht gelöst?!

    – mobibob

    6. Oktober um 23:11 Uhr

1436340cookie-checkDefaultActivityViewModelFactory nicht gefunden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy