google / dagger

A fast dependency injector for Android and Java.
https://dagger.dev
Apache License 2.0
17.41k stars 2.01k forks source link

ClassNotFoundException after update to Dagger Hilt 2.41 #3350

Closed personshelldon closed 9 months ago

personshelldon commented 2 years ago

After the update to Dagger 2.41 project build works correctly but when I try to start the app I have the following error:

java.lang.RuntimeException: 
  at android.app.ActivityThread.installProvider (ActivityThread.java:6418)
  at android.app.ActivityThread.installContentProviders (ActivityThread.java:5960)
  at android.app.ActivityThread.handleBindApplication (ActivityThread.java:5875)
  at android.app.ActivityThread.access$1100 (ActivityThread.java:199)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1650)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:193)
  at android.app.ActivityThread.main (ActivityThread.java:6691)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:493)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858)
Caused by: androidx.startup.StartupException: 
  at androidx.startup.AppInitializer.doInitialize (AppInitializer.java:187)
  at androidx.startup.AppInitializer.discoverAndInitialize (AppInitializer.java:238)
  at androidx.startup.AppInitializer.discoverAndInitialize (AppInitializer.java:206)
  at androidx.startup.InitializationProvider.onCreate (InitializationProvider.java:45)
  at android.content.ContentProvider.attachInfo (ContentProvider.java:1919)
  at android.content.ContentProvider.attachInfo (ContentProvider.java:1894)
  at android.app.ActivityThread.installProvider (ActivityThread.java:6413)
  at android.app.ActivityThread.installContentProviders (ActivityThread.java:5960)
  at android.app.ActivityThread.handleBindApplication (ActivityThread.java:5875)
  at android.app.ActivityThread.access$1100 (ActivityThread.java:199)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1650)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:193)
  at android.app.ActivityThread.main (ActivityThread.java:6691)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:493)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858)
Caused by: java.lang.NoClassDefFoundError: 
  at com.infomir.ministra.app.Hilt_App$1.get (Hilt_App.java:22)
  at dagger.hilt.android.internal.managers.ApplicationComponentManager.generatedComponent (ApplicationComponentManager.java:40)
  at com.infomir.ministra.app.Hilt_App.generatedComponent (Hilt_App.java:34)
  at dagger.hilt.EntryPoints.get (EntryPoints.java:59)
  at dagger.hilt.android.EntryPointAccessors.fromApplication (EntryPointAccessors.java:35)
  at com.infomir.ministra.app.startup.ChromeCastInitializer.create (ChromeCastInitializer.java:16)
  at com.infomir.ministra.app.startup.ChromeCastInitializer.create (ChromeCastInitializer.java:13)
  at androidx.startup.AppInitializer.doInitialize (AppInitializer.java:180)
  at androidx.startup.AppInitializer.discoverAndInitialize (AppInitializer.java:238)
  at androidx.startup.AppInitializer.discoverAndInitialize (AppInitializer.java:206)
  at androidx.startup.InitializationProvider.onCreate (InitializationProvider.java:45)
  at android.content.ContentProvider.attachInfo (ContentProvider.java:1919)
  at android.content.ContentProvider.attachInfo (ContentProvider.java:1894)
  at android.app.ActivityThread.installProvider (ActivityThread.java:6413)
  at android.app.ActivityThread.installContentProviders (ActivityThread.java:5960)
  at android.app.ActivityThread.handleBindApplication (ActivityThread.java:5875)
  at android.app.ActivityThread.access$1100 (ActivityThread.java:199)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1650)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:193)
  at android.app.ActivityThread.main (ActivityThread.java:6691)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:493)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858)
Caused by: java.lang.ClassNotFoundException: 
  at dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:134)
  at java.lang.ClassLoader.loadClass (ClassLoader.java:379)
  at java.lang.ClassLoader.loadClass (ClassLoader.java:312)
  at com.infomir.ministra.app.Hilt_App$1.get (Hilt_App.java:22)
  at dagger.hilt.android.internal.managers.ApplicationComponentManager.generatedComponent (ApplicationComponentManager.java:40)
  at com.infomir.ministra.app.Hilt_App.generatedComponent (Hilt_App.java:34)
  at dagger.hilt.EntryPoints.get (EntryPoints.java:59)
  at dagger.hilt.android.EntryPointAccessors.fromApplication (EntryPointAccessors.java:35)
  at com.infomir.ministra.app.startup.ChromeCastInitializer.create (ChromeCastInitializer.java:16)
  at com.infomir.ministra.app.startup.ChromeCastInitializer.create (ChromeCastInitializer.java:13)
  at androidx.startup.AppInitializer.doInitialize (AppInitializer.java:180)
  at androidx.startup.AppInitializer.discoverAndInitialize (AppInitializer.java:238)
  at androidx.startup.AppInitializer.discoverAndInitialize (AppInitializer.java:206)
  at androidx.startup.InitializationProvider.onCreate (InitializationProvider.java:45)
  at android.content.ContentProvider.attachInfo (ContentProvider.java:1919)
  at android.content.ContentProvider.attachInfo (ContentProvider.java:1894)
  at android.app.ActivityThread.installProvider (ActivityThread.java:6413)
  at android.app.ActivityThread.installContentProviders (ActivityThread.java:5960)
  at android.app.ActivityThread.handleBindApplication (ActivityThread.java:5875)
  at android.app.ActivityThread.access$1100 (ActivityThread.java:199)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1650)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:193)
  at android.app.ActivityThread.main (ActivityThread.java:6691)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:493)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858)

I have the custom Application class annotated with @HiltAndroidApp. Also, I am using app-startup jetpack library and the next code to inject some classes into Initializers:

class ChromeCastInitializer : BaseInitializer<Unit>() {

    override fun create(context: Context) {
        val ucInitChromeCast = EntryPointAccessors.fromApplication(
            context,
            ChromeCastEntryPoint::class.java
        ).ucInitChromeCast()
        useCase(
            ucInitChromeCast,
            onError = {
                Log.fe("Unexpected Chrome Cast error")
                Log.fe(it)
            }
        )
    }

    @InstallIn(SingletonComponent::class)
    @EntryPoint
    interface ChromeCastEntryPoint {
        fun ucInitChromeCast(): UcInitChromeCast
    }
}

When I build release version with Hilt 2.40.5 the size of classes.dex is 8.5MB when with 2.41 - 5.5MB. The debug build works correctly on both versions.

Maybe there is something wrong with Proguard rules?

Environment Android Studio: Android Studio Bumblebee | 2021.1.1 Patch 3 AGP: 7.1.2 Dagget Hilt: 2.40.5 - 2.41

bcorso commented 2 years ago

Hi @personshelldon,

Just to clarify, changing the hilt version from 2.40.5 to 2.41 causes this issue, or were there other changes as well?

Also, do you know which class is actually missing?

personshelldon commented 2 years ago

@bcorso,

  1. Just change the version from 2.40.5 to 2.41 causes the issue
  2. I really do not know what classes are missing, but I can check it tomorrow. But the error occurs on this line:
    EntryPointAccessors.fromApplication(
            context,
            ChromeCastEntryPoint::class.java
    )
bcorso commented 2 years ago

Looking at the stack trace and the large drop in your classes.dex it's likely the generated Dagger component that is missing. I'm not sure why upgrading Hilt should affect that, but you could likely verify if it's an issue with proguard by seeing if adding a keep rule fixes it.

abd3lraouf commented 2 years ago

@personshelldon did you find any resolutions?

rosuH commented 10 months ago

Upgrade to 2.48.1 fixed this issue.