-
Type: Bug
-
Resolution: Unresolved
-
Priority: Major - P3
-
None
-
Affects Version/s: None
-
Component/s: None
How frequently does the bug occur?
Sometimes
Description
Many of our users are facing a lot of ANRs on app launch. This happens when Koin dependencies are injected on Application onCreate. From the stacktrace it looks like its always stuck in RealmConfiguration build Step.
I have not been able to reproduce this ANR so far.
Stacktrace & log output
Unable to find source-code formatter for language: shell. Available languages are: actionscript, ada, applescript, bash, c, c#, c++, cpp, css, erlang, go, groovy, haskell, html, java, javascript, js, json, lua, none, nyan, objc, perl, php, python, r, rainbow, ruby, scala, sh, sql, swift, visualbasic, xml, yaml
Thread 1 "main" tid=1 Runnable at kotlin.reflect.jvm.internal.impl.load.kotlin.header.ReadKotlinClassHeaderAnnotationVisitor$KotlinMetadataArgumentVisitor$2.<init> (ReadKotlinClassHeaderAnnotationVisitor.java:215) at kotlin.reflect.jvm.internal.impl.load.kotlin.header.ReadKotlinClassHeaderAnnotationVisitor$KotlinMetadataArgumentVisitor.stringsArrayVisitor (ReadKotlinClassHeaderAnnotationVisitor.java:215) at kotlin.reflect.jvm.internal.impl.load.kotlin.header.ReadKotlinClassHeaderAnnotationVisitor$KotlinMetadataArgumentVisitor.visitArray (ReadKotlinClassHeaderAnnotationVisitor.java:196) at kotlin.reflect.jvm.internal.impl.descriptors.runtime.components.ReflectClassStructure.processAnnotationArgumentValue (ReflectKotlinClass.kt:235) at kotlin.reflect.jvm.internal.impl.descriptors.runtime.components.ReflectClassStructure.processAnnotationArguments (ReflectKotlinClass.kt:184) at kotlin.reflect.jvm.internal.impl.descriptors.runtime.components.ReflectClassStructure.processAnnotation (ReflectKotlinClass.kt:166) at kotlin.reflect.jvm.internal.impl.descriptors.runtime.components.ReflectClassStructure.loadClassAnnotations (ReflectKotlinClass.kt:85) at kotlin.reflect.jvm.internal.impl.descriptors.runtime.components.ReflectKotlinClass$Factory.create (ReflectKotlinClass.kt:56) at kotlin.reflect.jvm.internal.impl.descriptors.runtime.components.ReflectKotlinClassFinder.findKotlinClass (ReflectKotlinClassFinder.kt:34) at kotlin.reflect.jvm.internal.impl.descriptors.runtime.components.ReflectKotlinClassFinder.findKotlinClassOrContent (ReflectKotlinClassFinder.kt:38) at kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors.LazyJavaPackageScope$classes$1.invoke (LazyJavaPackageScope.kt:67) at kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors.LazyJavaPackageScope$classes$1.invoke (LazyJavaPackageScope.kt:59) at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$MapBasedMemoizedFunction.invoke (LockBasedStorageManager.java:578) at kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors.LazyJavaPackageScope.findClassifier (LazyJavaPackageScope.kt:146) at kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors.LazyJavaPackageScope.getContributedClassifier (LazyJavaPackageScope.kt:136) at kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors.JvmPackageScope.getContributedClassifier (JvmPackageScope.kt:55) at kotlin.reflect.jvm.internal.impl.resolve.scopes.ChainedMemberScope.getContributedClassifier (ChainedMemberScope.kt:35) at kotlin.reflect.jvm.internal.impl.resolve.scopes.AbstractScopeAdapter.getContributedClassifier (AbstractScopeAdapter.kt:44) at kotlin.reflect.jvm.internal.impl.descriptors.FindClassInModuleKt.findClassifierAcrossModuleDependencies (findClassInModule.kt:26) at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.computeClassifierDescriptor (TypeDeserializer.kt:268) at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.access$computeClassifierDescriptor (TypeDeserializer.kt:28) at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer$classifierDescriptors$1.invoke (TypeDeserializer.kt:37) at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer$classifierDescriptors$1.invoke (TypeDeserializer.kt:36) at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$MapBasedMemoizedFunction.invoke (LockBasedStorageManager.java:578) at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.typeConstructor (TypeDeserializer.kt:161) at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.simpleType (TypeDeserializer.kt:91) at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.type (TypeDeserializer.kt:68) at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.typeArgument (TypeDeserializer.kt:300) at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.simpleType (TypeDeserializer.kt:106) at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.type (TypeDeserializer.kt:68) at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassTypeConstructor.computeSupertypes (DeserializedClassDescriptor.kt:237) at kotlin.reflect.jvm.internal.impl.types.AbstractTypeConstructor$supertypes$1.invoke (AbstractTypeConstructor.kt:78) at kotlin.reflect.jvm.internal.impl.types.AbstractTypeConstructor$supertypes$1.invoke (AbstractTypeConstructor.kt:77) at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedLazyValue.invoke (LockBasedStorageManager.java:408) at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedLazyValueWithPostCompute.invoke (LockBasedStorageManager.java:481) at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedNotNullLazyValueWithPostCompute.invoke (LockBasedStorageManager.java:512) at kotlin.reflect.jvm.internal.impl.types.AbstractTypeConstructor.getSupertypes (AbstractTypeConstructor.kt:27) at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassMemberScope.getNonDeclaredVariableNames (DeserializedClassDescriptor.kt:355) at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedMemberScope$OptimizedImplementation$variableNames$2.invoke (DeserializedMemberScope.kt:262) at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedMemberScope$OptimizedImplementation$variableNames$2.invoke (DeserializedMemberScope.kt:261) at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedLazyValue.invoke (LockBasedStorageManager.java:408) at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedNotNullLazyValue.invoke (LockBasedStorageManager.java:527) at kotlin.reflect.jvm.internal.impl.storage.StorageKt.getValue (storage.kt:42) at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedMemberScope$OptimizedImplementation.getVariableNames (DeserializedMemberScope.kt:261) at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedMemberScope$OptimizedImplementation.addFunctionsAndPropertiesTo (DeserializedMemberScope.kt:349) at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedMemberScope.computeDescriptors (DeserializedMemberScope.kt:115) at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassMemberScope$allDescriptors$1.invoke (DeserializedClassDescriptor.kt:274) at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassMemberScope$allDescriptors$1.invoke (DeserializedClassDescriptor.kt:273) at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedLazyValue.invoke (LockBasedStorageManager.java:408) at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedNotNullLazyValue.invoke (LockBasedStorageManager.java:527) at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassMemberScope.getContributedDescriptors (DeserializedClassDescriptor.kt:284) at kotlin.reflect.jvm.internal.impl.resolve.scopes.InnerClassesScopeWrapper.getContributedDescriptors (InnerClassesScopeWrapper.kt:35) at kotlin.reflect.jvm.internal.impl.resolve.scopes.InnerClassesScopeWrapper.getContributedDescriptors (InnerClassesScopeWrapper.kt:27) at kotlin.reflect.jvm.internal.impl.resolve.scopes.ResolutionScope$DefaultImpls.getContributedDescriptors$default (ResolutionScope.kt:50) at kotlin.reflect.jvm.internal.KClassImpl$Data$nestedClasses$2.invoke (KClassImpl.kt:100) at kotlin.reflect.jvm.internal.KClassImpl$Data$nestedClasses$2.invoke (KClassImpl.kt:99) at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.invoke (ReflectProperties.java:93) at kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue (ReflectProperties.java:32) at kotlin.reflect.jvm.internal.KClassImpl$Data.getNestedClasses (KClassImpl.kt:99) at kotlin.reflect.jvm.internal.KClassImpl.getNestedClasses (KClassImpl.kt:240) at kotlin.reflect.full.KClasses.getCompanionObject (KClasses.kt:47) at kotlin.reflect.full.KClasses.getCompanionObjectInstance (KClasses.kt:57) at io.realm.kotlin.internal.platform.RealmObjectKt.realmObjectCompanionOrNull (RealmObject.kt:27) at io.realm.kotlin.Configuration$SharedBuilder.<init> (Configuration.kt:479) at io.realm.kotlin.RealmConfiguration$Builder.<init> (RealmConfiguration.kt:52) at com.myapp.kmm.cache.di.CacheModuleKt$cacheModule$1$4.invoke (CacheModule.kt:129) at com.myapp.kmm.cache.di.CacheModuleKt$cacheModule$1$4.invoke (CacheModule.kt:127) at org.koin.core.instance.InstanceFactory.create (InstanceFactory.kt:51) at org.koin.core.instance.SingleInstanceFactory.create (SingleInstanceFactory.kt:46) at org.koin.core.instance.SingleInstanceFactory$get$1.invoke (SingleInstanceFactory.kt:53) at org.koin.core.instance.SingleInstanceFactory$get$1.invoke (SingleInstanceFactory.kt:51) at org.koin.mp.KoinPlatformTools.synchronized (KoinPlatformTools.kt:20) at org.koin.core.instance.SingleInstanceFactory.get (SingleInstanceFactory.kt:51) at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core (InstanceRegistry.kt:116) at org.koin.core.scope.Scope.resolveValue (Scope.kt:246) at org.koin.core.scope.Scope.resolveInstance (Scope.kt:231) at org.koin.core.scope.Scope.get (Scope.kt:210) at com.myapp.kmm.cache.di.CacheModuleKt$cacheModule$1$5.invoke (CacheModule.kt:163) at com.myapp.kmm.cache.di.CacheModuleKt$cacheModule$1$5.invoke (CacheModule.kt:150) at org.koin.core.instance.InstanceFactory.create (InstanceFactory.kt:51) at org.koin.core.instance.SingleInstanceFactory.create (SingleInstanceFactory.kt:46) at org.koin.core.instance.SingleInstanceFactory$get$1.invoke (SingleInstanceFactory.kt:53) at org.koin.core.instance.SingleInstanceFactory$get$1.invoke (SingleInstanceFactory.kt:51) at org.koin.mp.KoinPlatformTools.synchronized (KoinPlatformTools.kt:20) at org.koin.core.instance.SingleInstanceFactory.get (SingleInstanceFactory.kt:51) at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core (InstanceRegistry.kt:116) at org.koin.core.scope.Scope.resolveValue (Scope.kt:246) at org.koin.core.scope.Scope.resolveInstance (Scope.kt:231) at org.koin.core.scope.Scope.get (Scope.kt:210) at com.myapp.kmm.cache.realm.dao.DaoModuleKt$daoModule$1$30.invoke (DaoModule.kt:277) at com.myapp.kmm.cache.realm.dao.DaoModuleKt$daoModule$1$30.invoke (DaoModule.kt:176) at org.koin.core.instance.InstanceFactory.create (InstanceFactory.kt:51) at org.koin.core.instance.SingleInstanceFactory.create (SingleInstanceFactory.kt:46) at org.koin.core.instance.SingleInstanceFactory$get$1.invoke (SingleInstanceFactory.kt:53) at org.koin.core.instance.SingleInstanceFactory$get$1.invoke (SingleInstanceFactory.kt:51) at org.koin.mp.KoinPlatformTools.synchronized (KoinPlatformTools.kt:20) at org.koin.core.instance.SingleInstanceFactory.get (SingleInstanceFactory.kt:51) at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core (InstanceRegistry.kt:116) at org.koin.core.scope.Scope.resolveValue (Scope.kt:246) at org.koin.core.scope.Scope.resolveInstance (Scope.kt:231) at org.koin.core.scope.Scope.get (Scope.kt:210) at com.myapp.kmm.data.RepoModuleKt$repoModule$1$1.invoke (RepoModule.kt:242) at com.myapp.kmm.data.RepoModuleKt$repoModule$1$1.invoke (RepoModule.kt:82) at org.koin.core.instance.InstanceFactory.create (InstanceFactory.kt:51) at org.koin.core.instance.SingleInstanceFactory.create (SingleInstanceFactory.kt:46) at org.koin.core.instance.SingleInstanceFactory$get$1.invoke (SingleInstanceFactory.kt:53) at org.koin.core.instance.SingleInstanceFactory$get$1.invoke (SingleInstanceFactory.kt:51) at org.koin.mp.KoinPlatformTools.synchronized (KoinPlatformTools.kt:20) at org.koin.core.instance.SingleInstanceFactory.get (SingleInstanceFactory.kt:51) at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core (InstanceRegistry.kt:116) at org.koin.core.scope.Scope.resolveValue (Scope.kt:246) at org.koin.core.scope.Scope.resolveInstance (Scope.kt:231) at org.koin.core.scope.Scope.get (Scope.kt:210) at com.myapp.kmm.core.di.user.UserUseCaseModuleKt$userUseCaseModule$1$5.invoke (UserUseCaseModule.kt:57) at com.myapp.kmm.core.di.user.UserUseCaseModuleKt$userUseCaseModule$1$5.invoke (UserUseCaseModule.kt:32) at org.koin.core.instance.InstanceFactory.create (InstanceFactory.kt:51) at org.koin.core.instance.SingleInstanceFactory.create (SingleInstanceFactory.kt:46) at org.koin.core.instance.SingleInstanceFactory$get$1.invoke (SingleInstanceFactory.kt:53) at org.koin.core.instance.SingleInstanceFactory$get$1.invoke (SingleInstanceFactory.kt:51) at org.koin.mp.KoinPlatformTools.synchronized (KoinPlatformTools.kt:20) at org.koin.core.instance.SingleInstanceFactory.get (SingleInstanceFactory.kt:51) at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core (InstanceRegistry.kt:116) at org.koin.core.scope.Scope.resolveValue (Scope.kt:246) at org.koin.core.scope.Scope.resolveInstance (Scope.kt:231) at org.koin.core.scope.Scope.get (Scope.kt:210) at com.myapp.example.phoenix.di.KoinKt$notificationModule$1$1.invoke (Koin.kt:168) at com.myapp.example.phoenix.di.KoinKt$notificationModule$1$1.invoke (Koin.kt:147) at org.koin.core.instance.InstanceFactory.create (InstanceFactory.kt:51) at org.koin.core.instance.SingleInstanceFactory.create (SingleInstanceFactory.kt:46) at org.koin.core.instance.SingleInstanceFactory$get$1.invoke (SingleInstanceFactory.kt:53) at org.koin.core.instance.SingleInstanceFactory$get$1.invoke (SingleInstanceFactory.kt:51) at org.koin.mp.KoinPlatformTools.synchronized (KoinPlatformTools.kt:20) at org.koin.core.instance.SingleInstanceFactory.get (SingleInstanceFactory.kt:51) at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core (InstanceRegistry.kt:116) at org.koin.core.scope.Scope.resolveValue (Scope.kt:246) at org.koin.core.scope.Scope.resolveInstance (Scope.kt:231) at org.koin.core.scope.Scope.get (Scope.kt:210) at com.myapp.example.modules.service.AndroidDependencyInjector$special$$inlined$inject$default$6.invoke (KoinComponent.kt:74) at kotlin.SynchronizedLazyImpl.getValue (LazyJVM.kt:74) at com.myapp.example.modules.service.AndroidDependencyInjector.getAppPushNotificationsManager (AndroidDependencyInjector.kt:22) at com.myapp.example.modules.service.AndroidDependencyInjector.injectDependencies (AndroidDependencyInjector.kt:44) at com.myapp.example.phoenix.app.MyApplication.injectDependencies (MyApplication.kt:115) at com.myapp.example.phoenix.app.MyApplication.onCreate (MyApplication.kt:64) at android.app.Instrumentation.callApplicationOnCreate (Instrumentation.java:1213) at android.app.ActivityThread.handleBindApplication (ActivityThread.java:6915) at android.app.ActivityThread.access$1600 (ActivityThread.java:261) at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2154) at android.os.Handler.dispatchMessage (Handler.java:111) at android.os.Looper.loopOnce (Looper.java:238) at android.os.Looper.loop (Looper.java:357) at android.app.ActivityThread.main (ActivityThread.java:8098) at java.lang.reflect.Method.invoke (Native method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1026)
### Can you reproduce the bug? No ### Reproduction Steps We have about 92 Entities in our Schema. Some code snippet
val configuration = RealmConfiguration.Builder( // This is the last line executed in our codebase as per ANR log schema = get() // koin injection )
val dbName: String = KmmServiceLocator.getDbName()
val encryptionKey: ByteArray? = KmmServiceLocator.getEncryptionKey()
if (encryptionKey?.isNotEmpty() == true) { configuration.name(dbName).encryptionKey(encryptionKey) } else { configuration.name(dbName) }
configuration.schemaVersion(schemaVersion) .migration(KMMRealmMigrationManager()) .build()
```
Koin is injecting dependency on Application -> onCreate() -> Open realm with above config
Version
1.9.1
What Atlas App Services are you using?
Local Database only
Are you using encryption?
Yes
Platform OS and version(s)
OS - Android, Version - Almost all of them
Build environment
Android Studio version: Android Studio Giraffe
Android Build Tools version: 30.0.3
Gradle version: 8.0.2