Ahmed Muhammed
Ahmed Muhammed

Reputation: 285

Hilt: java.lang.ClassNotFoundException: Didn't find class "com.kotlin20test.Hilt_MyApp"

I have an error concerning Hilt, I"ve been trying to inject a retrofit interface I created using Hilt,

Here is the error:


 java.lang.ClassNotFoundException: Didn't find class "com.kotlin20test.Hilt_MyApp" on path: DexPathList[[zip file "/data/app/com.example.kotlin20test-hKFhgE2D6vBE-1ZkVY-UOA==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.kotlin20test-hKFhgE2D6vBE-1ZkVY-UOA==/lib/x86, /system/lib, /system/product/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
                ... 16 more

and Here are my files:

MyApp


@HiltAndroidApp
class MyApp : Application()

build.gradle


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

android {
    //View Binding
    buildFeatures {
        viewBinding true
    }
    compileSdkVersion 30

    defaultConfig {
        applicationId "com.example.kotlin20test"
        minSdkVersion 26
        targetSdkVersion 30
        versionCode 1
        multiDexEnabled true
        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'
    }

    dexOptions {
        javaMaxHeapSize "4g"
    }

    packagingOptions {
        exclude 'META-INF/gradle/incremental.annotation.processors'
    }
}

dependencies {

    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"

    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.3.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

    //Room
    def room_version = "2.2.6"
    def lifecycle_version = "2.3.1"

    // ViewModel
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
    // Saved state module for ViewModel
    implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version"
    // Annotation processor
    annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
    // alternately - if using Java8, use the following instead of lifecycle-compiler
    implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"


    apply plugin: 'kotlin-kapt'
    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version"



    implementation 'androidx.room:room-ktx:2.3.0'
    annotationProcessor "androidx.room:room-compiler:2.3.0"

    //Coroutines
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.3'

    def multidex_version = "2.0.1"
    implementation "androidx.multidex:multidex:$multidex_version"


    //Activity Result API
    implementation "androidx.activity:activity-ktx:1.3.0-alpha07"
    implementation 'androidx.fragment:fragment-ktx:1.3.3'


    //Retrofit and Gson
    implementation "com.squareup.retrofit2:converter-gson:2.9.0"
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'



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


    implementation 'com.google.android.gms:play-services:12.0.1'
    implementation 'androidx.multidex:multidex:2.0.0'


}



buildscript {
    ext.kotlin_version = "1.3.50"
    repositories {
        google()
        jcenter()
    }
    ext.hilt_version = '2.35'
    dependencies {
        classpath 'com.android.tools.build:gradle:4.2.1'
        classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version"
        classpath 'com.google.dagger:hilt-android-gradle-plugin:2.35.1'


        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

AndroidManifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.kotlintest">

    <application
        tools:remove="android:appComponentFactory"
        android:name=".Hilt_MyApp"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.KotlinTest">
        <activity android:name=".MainActivity2"
            ></activity>
        <activity android:name=".MainActivity"  >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver android:name=".ExampleBroadcast"/>
    </application>

</manifest>

I tried hilt in another application using Kotlin but still the same error is produced, I've also read a couple of questions on the subject her on Stack Overflow, and tries some Answers, including MultiDexApplication.

Edit: Sorry I wrote the wrong AndroidManifest, the previous app one was of an app that had the same error(I'm trying two apps), and I changed the second one's Application class to Hilt_MyApp class before that error showed up in hopes of trying to solve the error.

Here is the real manifest related to this app:


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.kotlin20test">

    <application

        android:name="com.kotlin20test.MyApp"
        tools:remove="android:appComponentFactory"
        tools:targetApi="p"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Kotlin20Test">
        <activity android:name="com.kotlin20test.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

'''

Upvotes: 12

Views: 13250

Answers (8)

Abdul Aziz
Abdul Aziz

Reputation: 31

Assalamu alaykum, these configurations solved my problems.

build.gradle.kts(Project)

plugins {
   alias(libs.plugins.android.application) apply false
   alias(libs.plugins.jetbrains.kotlin.android) apply false
   id("com.google.dagger.hilt.android") version "2.44" apply false
}

build.gradle.kts(Module)

plugins {
   alias(libs.plugins.android.application)
   alias(libs.plugins.jetbrains.kotlin.android)
   kotlin("kapt")
   id("com.google.dagger.hilt.android")
}

compileOptions {
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
    jvmTarget = "17"
}
composeOptions {
    kotlinCompilerExtensionVersion = "1.4.3"
}
dependencies {
    implementation("com.google.dagger:hilt-android:2.44")
    kapt("com.google.dagger:hilt-compiler:2.44")
}

kapt {
    correctErrorTypes = true
}

libs.versions.toml

[versions]
agp = "8.5.2"
kotlin = "1.8.10"

[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }

Upvotes: 0

DIRTY DAVE
DIRTY DAVE

Reputation: 2731

I tried every single thing I could find in Stackoverflow answers...

Build/Clean/Invalid & Restart, Uninstalling app, reinstalling, Removing hilt and it's annotations, and readding them, but none of those worked. Even tried renaming the class and creating it under another name.

What DID work was, moving the affected class.

So my WalletFragment with the annotation AndroidEntryPoint was not working and giving that error. Moving it to another package fixed it.

Upvotes: 1

shubhamgarg1
shubhamgarg1

Reputation: 1995

I ended up migrating to KSP after wasting hours with this issue. Please follow this guide for migrating to KSP: https://developer.android.com/build/migrate-to-ksp

and use this guide for Hilt versions that you should use: https://dagger.dev/dev-guide/ksp.html

Upvotes: 1

Elie Danhash
Elie Danhash

Reputation: 61

you should use kapt instead of implementation for the hilt-compiler

kapt "com.google.dagger:hilt-compiler:$hilt_version"

Upvotes: 0

Taimoor Khan
Taimoor Khan

Reputation: 659

I have seen some issue's in your build.gradle

You have put

apply plugin: 'kotlin-kapt'

in wrong place . I mean in dependencies instead of at top in plugins.

And you are also adding two differnt classpath like

classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version"
classpath 'com.google.dagger:hilt-android-gradle-plugin:2.35.1'

Upvotes: 0

feyza
feyza

Reputation: 41

i had the same problem today, and I saw that it in your gradle too

packagingOptions {
   exclude 'META-INF/gradle/incremental.annotation.processors'
} 

this is how you should do the hilt implementation to avoid using it and fix the problem

//Hilt
implementation "com.google.dagger:hilt-android:2.42"
kapt "com.google.dagger:hilt-android-testing:2.42"
kapt "com.google.dagger:hilt-compiler:2.42"

Renamed the application name in manifest.xml to android:name=".MyApp"

Upvotes: 4

Not an apple fan
Not an apple fan

Reputation: 1

In your manifest rename the atributte:

android:name=".Hilt_MyApp" to android:name=".MyApp"

Upvotes: 0

Ahmed Muhammed
Ahmed Muhammed

Reputation: 285

I solved it, it turns out that I did not provide the kapt,

id 'kotlin-kapt'

and used used implementation instead of kapt so instead of:

implementation 'com.google.dagger:hilt-compiler:2.35.1'

I provided:

kapt 'com.google.dagger:hilt-compiler:2.35.1'

hope this helps someone someone

Upvotes: 15

Related Questions