airbnb / mavericks

Mavericks: Android on Autopilot
https://airbnb.io/mavericks/
Apache License 2.0
5.83k stars 500 forks source link

Crash in MvRxViewModelStore.saveViewModels #77

Closed chrisbanes closed 6 years ago

chrisbanes commented 6 years ago

This was on a debug build so not Proguard related.

(FYI TiviMvRxFragment is a copy of MvRxFragment with a different super type)

Log:

2018-09-03 15:16:39.445 11000-11000/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: app.tivi.debug, PID: 11000
    java.lang.IllegalStateException: Resource not found in classpath: kotlin/kotlin.kotlin_builtins
        at kotlin.reflect.jvm.internal.impl.builtins.BuiltInsLoaderImpl.createBuiltInPackageFragmentProvider(BuiltInsLoaderImpl.kt:64)
        at kotlin.reflect.jvm.internal.impl.builtins.BuiltInsLoaderImpl.createPackageFragmentProvider(BuiltInsLoaderImpl.kt:42)
        at kotlin.reflect.jvm.internal.impl.builtins.KotlinBuiltIns.createBuiltInsModule(KotlinBuiltIns.java:148)
        at kotlin.reflect.jvm.internal.impl.platform.JvmBuiltIns.<init>(JvmBuiltIns.kt:56)
        at kotlin.reflect.jvm.internal.impl.platform.JvmBuiltIns.<init>(JvmBuiltIns.kt:31)
        at kotlin.reflect.jvm.internal.components.RuntimeModuleData$Companion.create(RuntimeModuleData.kt:54)
        at kotlin.reflect.jvm.internal.ModuleByClassLoaderKt.getOrCreateModule(moduleByClassLoader.kt:58)
        at kotlin.reflect.jvm.internal.KDeclarationContainerImpl$Data$moduleData$2.invoke(KDeclarationContainerImpl.kt:35)
        at kotlin.reflect.jvm.internal.KDeclarationContainerImpl$Data$moduleData$2.invoke(KDeclarationContainerImpl.kt:32)
        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.KDeclarationContainerImpl$Data.getModuleData(Unknown Source:7)
        at kotlin.reflect.jvm.internal.KClassImpl$Data$descriptor$2.invoke(KClassImpl.kt:46)
        at kotlin.reflect.jvm.internal.KClassImpl$Data$descriptor$2.invoke(KClassImpl.kt:43)
        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.getDescriptor(Unknown Source:7)
        at kotlin.reflect.jvm.internal.KClassImpl.getDescriptor(KClassImpl.kt:172)
        at kotlin.reflect.jvm.internal.KClassImpl.getMemberScope$kotlin_reflection(KClassImpl.kt:178)
        at kotlin.reflect.jvm.internal.KClassImpl$Data$declaredNonStaticMembers$2.invoke(KClassImpl.kt:152)
        at kotlin.reflect.jvm.internal.KClassImpl$Data$declaredNonStaticMembers$2.invoke(KClassImpl.kt:43)
        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.getDeclaredNonStaticMembers(Unknown Source:8)
        at kotlin.reflect.full.KClasses.getDeclaredMemberProperties(KClasses.kt:163)
        at com.airbnb.mvrx.PersistStateKt.persistState(PersistState.kt:36)
        at com.airbnb.mvrx.PersistStateKt.persistState$default(PersistState.kt:34)
        at com.airbnb.mvrx.MvRxViewModelStore$saveViewModels$3$1.invoke(MvRxViewModelStore.kt:53)
        at com.airbnb.mvrx.MvRxViewModelStore$saveViewModels$3$1.invoke(MvRxViewModelStore.kt:20)
        at com.airbnb.mvrx.StateContainerKt.withState(StateContainer.kt:6)
        at com.airbnb.mvrx.MvRxViewModelStore.saveViewModels(MvRxViewModelStore.kt:52)
        at com.airbnb.mvrx.MvRxViewModelStore.saveViewModels(MvRxViewModelStore.kt:43)
        at app.tivi.util.TiviMvRxFragment.onSaveInstanceState(TiviMvRxFragment.kt:34)
        at android.support.v4.app.Fragment.performSaveInstanceState(Fragment.java:2629)
        at android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:2910)
        at android.support.v4.app.FragmentManagerImpl.saveAllState(FragmentManager.java:2971)
        at android.support.v4.app.FragmentController.saveAllState(FragmentController.java:134)
        at android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:591)
        at android.support.v7.app.AppCompatActivity.onSaveInstanceState(AppCompatActivity.java:510)
        at android.app.Activity.performSaveInstanceState(Activity.java:1549)
        at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1443)
        at android.app.ActivityThread.callActivityOnSaveInstanceState(ActivityThread.java:4809)
2018-09-03 15:16:39.446 11000-11000/? E/AndroidRuntime:     at android.app.ActivityThread.callActivityOnStop(ActivityThread.java:4157)
        at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:4121)
        at android.app.ActivityThread.handleStopActivity(ActivityThread.java:4196)
        at android.app.servertransaction.StopActivityItem.execute(StopActivityItem.java:41)
        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:145)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        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)
Oknesif commented 6 years ago

Hello, @chrisbanes, I made PR recently that could relate to this issue(https://github.com/airbnb/MvRx/pull/67), and therefore I have a question. Did this crash happened on published maven version of the library, or it was locally built from the fresh repository?

chrisbanes commented 6 years ago

Public v0.5.0

gpeal commented 6 years ago

@chrisbanes Do you have any packagingOptions in your build.gradle?

gpeal commented 6 years ago

For more context: https://stackoverflow.com/questions/41052868/what-are-kotlin-builtins-files-and-can-i-omit-them-from-my-uberjars

chrisbanes commented 6 years ago

Good point, yes I am. I'll stop excluding the kotlin/kotlin.kotlin_builtins and give it a try.

chrisbanes commented 6 years ago

So turns out I could easily recreate this by simply rotating the phone (which one of my tests does). After including the kotlin.kotlin_builtins files the test passes, so I'll close this.