Skip to content

Android: Axer crashes when accessed in application initializer #94

@smozhaykin

Description

@smozhaykin
    java.lang.RuntimeException: Unable to get provider androidx.startup.InitializationProvider: androidx.startup.StartupException: java.lang.ExceptionInInitializerError
    	at android.app.ActivityThread.installProvider(ActivityThread.java:9598)
    	at android.app.ActivityThread.installContentProviders(ActivityThread.java:9095)
    	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:8713)
    	at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
    	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2873)
    	at android.os.Handler.dispatchMessage(Handler.java:110)
    	at android.os.Looper.loopOnce(Looper.java:273)
    	at android.os.Looper.loop(Looper.java:363)
    	at android.app.ActivityThread.main(ActivityThread.java:10060)
    	at java.lang.reflect.Method.invoke(Native Method)
    	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:632)
    	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)
    Caused by: androidx.startup.StartupException: java.lang.ExceptionInInitializerError
    	at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:187)
    	at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:239)
    	at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:207)
    	at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:49)
    	at android.content.ContentProvider.attachInfo(ContentProvider.java:2710)
    	at android.content.ContentProvider.attachInfo(ContentProvider.java:2679)
    	at android.app.ActivityThread.installProvider(ActivityThread.java:9593)
    	... 11 more
    Caused by: java.lang.ExceptionInInitializerError
    	at io.github.orioneee.AxerConfig.<init>(AxerConfig.kt:6)
    	at io.github.orioneee.Axer.<clinit>(Axer.kt:214)
    	at io.github.orioneee.AxerBundledSQLiteDriver.<init>(AxerBundledSQLiteDriver.kt:29)
    	at io.github.orioneee.AxerBundledSQLiteDriver.instance_delegate$lambda$2(AxerBundledSQLiteDriver.kt:53)
    	at io.github.orioneee.AxerBundledSQLiteDriver.$r8$lambda$tYDhUiiJ0grrZPIwDgQJBO3n4LQ(Unknown Source:0)
    	at io.github.orioneee.AxerBundledSQLiteDriver$$ExternalSyntheticLambda0.invoke(D8$$SyntheticClass:0)
    	at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:86)
    	at io.github.orioneee.AxerBundledSQLiteDriver$Companion.getInstance$axer_release(AxerBundledSQLiteDriver.kt:52)
    	at io.github.orioneee.AxerBundledSQLiteDriver$Companion.getInstance(AxerBundledSQLiteDriver.kt:57)

Currently Axer uses KoinInitializer for internal initialization. This initializer is internal, so library clients cannot access it and make their own application initializers depend on it. This causes application crash if application custom initializer tries to access Axer (e.g. for configuration).

For now I've fixed for me it by exposing public initializer to depend on it (6abfaf0), but maybe you can provide better way to handle it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions