找不到默认ActivityViewModelFactory

问题描述 投票:0回答:4

将 Hilt 版本从

2.33-beta
迁移到
2.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

我的

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
}

我的

build.gradle
(应用程序)的片段:

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

如何解决这个问题?

android android-viewmodel dagger-hilt
4个回答
235
投票

删除对 hilt-lifecycle-viewmodel 的依赖会导致错误消失,因为新版本的 hilt 不再需要它。 只需从您的应用程序级别

build.gradle
文件中删除此行(如果有的话)。

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


14
投票

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

implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03"

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

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

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

def lifecycle_version = "2.5.1"

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

kapt {
  correctErrorTypes true
}

遵循官方文档:

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

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

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


5
投票

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

implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03"

您的 ViewModel 应使用

@HiltViewModel
@Inject
而不是
@ViewModelInject

@HiltViewModel
class MainViewModel @Inject constructor() : ViewModel() { }

0
投票

一些依赖项已被弃用。因此,您可以修改

build.gradle (:app)
和项目级别
build.gradle
,如下所示。

此外,您可以在以下位置查找官方来源:使用 Hilt 进行依赖注入

build.gradle (:app)

plugins{
   ...
   id 'dagger.hilt.android.plugin'
   id 'kotlin-kapt'
}

dependencies {
   ...
   // Dagger Hilt
   implementation("com.google.dagger:hilt-android:2.44.2")
   kapt("com.google.dagger:hilt-android-compiler:2.44.2")
}

kapt {
   correctErrorTypes true
}

build.gradle (Project's root)

plugins {
  ...
  id("com.google.dagger.hilt.android") version "2.44" apply false
}
© www.soinside.com 2019 - 2024. All rights reserved.