'dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory' could not be resolved
Asked Answered
H

1

5

I have spent the hole week trying to add hilt dependency injection to my sample note application, android studio have been throwing on me error after an error.It got me mad, any way, in AppModule i have been trying to inject my room database to app repository and then my app repo to my use cases class and at the end injecting use cases class to my sharedViewModel so this is my AppModule object:

@Module
@InstallIn(SingletonComponent::class)
object AppModule {

    @Provides
    @Singleton
    fun provideNoteDatabase(app: Application): NoteDatabase {
        return Room.databaseBuilder(
            app,
            NoteDatabase::class.java,
            NoteDatabase.DATABASE_NAME
        ).build()
    }

    @Provides
    @Singleton
    fun provideNoteRepository(db: NoteDatabase): NotesRepo {
        return RepoImplementation(db.noteDao())
    }

    @Provides
    @Singleton
    fun provideNoteUseCase(repo: NotesRepo): NoteUseCase {
        return NoteUseCase(
            getNotesUseCase = GetNotesUseCase(repo),
            deleteNoteUseCase = DeleteNoteUseCase(repo),
            updateNoteUseCase = UpdateNoteUseCase(repo),
            insertNoteUseCase = InsertNoteUseCase(repo)
        )
    }
}

and this my Application class:

@HiltAndroidApp
class Application : Application()

my edit fragment:

@AndroidEntryPoint
class EditFragment : Fragment() {

    private var _binding: FragmentEditBinding? = null
    private val binding get() = _binding!!
    private val viewModel: SharedViewModel by activityViewModels()
//...
}

my other fragment:

@AndroidEntryPoint
class MainFragment : Fragment() {

    private  var _binding: FragmentMainBinding? = null
    private val binding get() = _binding!!
    private val viewModel: SharedViewModel by activityViewModels()
//...
}

by the way also my MainActivity is annotated with @AndroidEntryPoint
my famous viewModel :

@HiltViewModel
class SharedViewModel @Inject constructor(private val noteUseCase: NoteUseCase) :
    ViewModel() {...} 

this is project level build.gradle:

buildscript {

    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        def nav_version = "2.5.2"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
        classpath 'com.google.dagger:hilt-android-gradle-plugin:2.44'
    }
}

plugins {
    id 'com.android.application' version '7.3.0' apply false
    id 'com.android.library' version '7.3.0' apply false
    id 'org.jetbrains.kotlin.android' version '1.7.10' apply false

}

and module level build.gradle:

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'kotlin-android'
    id 'kotlin-kapt'
    id "androidx.navigation.safeargs"
    id 'com.google.dagger.hilt.android'
}

android {
    compileSdk 32


    defaultConfig {
        applicationId "com.example.stayin"
        minSdk 21
        targetSdk 32
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
    buildFeatures {
        dataBinding true
        viewBinding true
    }
    namespace 'com.example.stayin'
}

dependencies {

    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.appcompat:appcompat:1.4.2'
    implementation 'com.google.android.material:material:1.6.1'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

    def lifecycle_version = "2.4.1"
    implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
    implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"

    // coroutines for getting off the UI thread
    def coroutines = "1.6.0"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines"

    //shared preferences dependency
    implementation 'androidx.preference:preference-ktx:1.2.0'

    // Room dependency
    def room_version = "2.4.3"
    implementation "androidx.room:room-runtime:$room_version"
    kapt "androidx.room:room-compiler:$room_version"
// Kotlin Extensions and Coroutines support for Room
    implementation "androidx.room:room-ktx:$room_version"

    //navigation component dependency
    implementation "androidx.navigation:navigation-fragment-ktx:2.5.2"
    implementation "androidx.navigation:navigation-ui-ktx:2.5.2"

    //Dagger - Hilt
    implementation 'com.google.dagger:hilt-android:2.44'
    kapt 'com.google.dagger:hilt-compiler:2.44'

        // For instrumentation tests
    androidTestImplementation  'com.google.dagger:hilt-android-testing:2.44'
    kaptAndroidTest 'com.google.dagger:hilt-compiler:2.44'

        // For local unit tests
    testImplementation 'com.google.dagger:hilt-android-testing:2.44'
    kaptTest 'com.google.dagger:hilt-compiler:2.44'
    implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03"

}

if can any one help me to find what is wrong and explained why, i will be so thankful towards him. i rally need to pass this so i can level up in my career.

Hygienist answered 3/10, 2022 at 21:27 Comment(1)
try to remove implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03"Crest
D
13

Remove below deprecated dependency:

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

(It was deprecated since dagger-2.34 version)

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

Also Try to upgrade your lifecycle version as below:

def lifecycle_version = "2.5.1"

add below lines after dependency section in build.gradle(app):

kapt {   correctErrorTypes true }

follow official documentation:

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

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

De answered 11/12, 2022 at 13:54 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.