未找到 DefaultActivityViewModelFactory

Pat*_*iak 11 android android-viewmodel dagger-hilt

将 Hilt 版本从我的项目迁移2.33-beta2.35我的项目后,已停止构建并出现以下错误:

在此处输入图片说明

一个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
Run Code Online (Sandbox Code Playgroud)

我的 build.gradle(项目)的一个片段:

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
}
Run Code Online (Sandbox Code Playgroud)

我的 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"
}
Run Code Online (Sandbox Code Playgroud)

有没有人遇到该错误并知道可能的解决方案是什么?

Raf*_*ani 34

删除对 hilt-lifecycle-viewmodel 的依赖会导致错误消失,因为较新版本的 hilt 不再需要它。build.gradle如果您有此行,只需从您的应用程序级别文件中删除该行即可。

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

  • @Akashkumar 这里的文档可能对您有帮助。它本质上向您展示了使用“ViewModelScope”的推荐方法 https://dagger.dev/hilt/view-model.html (2认同)

小智 18

删除以下已弃用的依赖项:

implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03"
Run Code Online (Sandbox Code Playgroud)

(自 dagger-2.34 版本起已弃用)

证明: https: //github.com/google/dagger/releases/tag/dagger-2.34

另请尝试升级您的生命周期版本,如下所示:

def lifecycle_version = "2.5.1"
Run Code Online (Sandbox Code Playgroud)

build.gradle(app)的依赖部分之后添加以下行:

kapt {
  correctErrorTypes true
}
Run Code Online (Sandbox Code Playgroud)

遵循官方文档:

https://developer.android.com/training/dependency-injection/hilt-android

https://dagger.dev/hilt/view-model.html

https://github.com/google/dagger/releases


小智 14

在您的 Build.gradle (:app) 中,删除此行

implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03"
Run Code Online (Sandbox Code Playgroud)

你的 ViewModel 应该使用@HiltViewModel&@Inject而不是@ViewModelInject

@HiltViewModel
class MainViewModel @Inject constructor() : ViewModel() { }
Run Code Online (Sandbox Code Playgroud)