Android中Navigation Compose 2.8.0+与TextFieldState兼容崩溃问题
我跟着PL-Coding的在线课程开发Android应用,尝试升级到Navigation Compose 2.8.0-alpha08版本(目标是使用类型安全导航参数特性),但启动包含TextFieldState(Compose实验性API)的页面时直接崩溃。该功能在Navigation Compose 2.7.7版本中运行正常,但升级到2.8.0-alpha08或2.8.0-beta01后就出现崩溃,哪怕我并未使用新版本的导航特性也是如此。
使用的Compose BOM版本为2024.05.00,代码可查看GitHub仓库的navigation-compose-crash分支。
崩溃报错信息
FATAL EXCEPTION: main Process: com.jlahougue.runique, PID: 10474 java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/compose/foundation/text2/input/TextFieldState; at com.jlahougue.auth.presentation.register.RegisterState.<init>(RegisterState.kt:10) at com.jlahougue.auth.presentation.register.RegisterViewModel.<init>(RegisterViewModel.kt:20) at com.jlahougue.auth.presentation.di.AuthViewModelModuleKt$authViewModelModule$lambda$0$$inlined$viewModelOf$default$1.invoke(ViewModelOf.kt:231) at com.jlahougue.auth.presentation.di.AuthViewModelModuleKt$authViewModelModule$lambda$0$$inlined$viewModelOf$default$1.invoke(ViewModelOf.kt:55) at org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:50) at org.koin.core.instance.FactoryInstanceFactory.get(FactoryInstanceFactory.kt:38) at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.kt:109) at org.koin.core.scope.Scope.resolveValue(Scope.kt:247) at org.koin.core.scope.Scope.resolveInstance(Scope.kt:233) at org.koin.core.scope.Scope.get(Scope.kt:212) at org.koin.androidx.viewmodel.factory.KoinViewModelFactory.create(KoinViewModelFactory.kt:25) at androidx.lifecycle.ViewModelProvider$Factory.create(ViewModelProvider.android.kt:158) at androidx.lifecycle.viewmodel.ViewModelProviderImpl.getViewModel$lifecycle_viewmodel_release(ViewModelProviderImpl.kt:69) at androidx.lifecycle.viewmodel.ViewModelProviderImpl.getViewModel$lifecycle_viewmodel_release$default(ViewModelProviderImpl.kt:47) at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.android.kt:91) at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.android.kt:109) at org.koin.androidx.viewmodel.GetViewModelKt.resolveViewModel(GetViewModel.kt:43) at com.jlahougue.auth.presentation.register.RegisterScreenKt.RegisterScreenRoot(RegisterScreen.kt:227) at com.jlahougue.runique.NavigationRootKt$authGraph$1$2.invoke(NavigationRoot.kt:42) at com.jlahougue.runique.NavigationRootKt$authGraph$1$2.invoke(NavigationRoot.kt:41) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:139) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35) at androidx.navigation.compose.NavHostKt$NavHost$32$1.invoke(NavHost.kt:613) at androidx.navigation.compose.NavHostKt$NavHost$32$1.invoke(NavHost.kt:611) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35) at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:401) at androidx.compose.runtime.saveable.SaveableStateHolderImpl.SaveableStateProvider(SaveableStateHolder.kt:85) at androidx.navigation.compose.NavBackStackEntryProviderKt.SaveableStateProvider(NavBackStackEntryProvider.kt:65) at androidx.navigation.compose.NavBackStackEntryProviderKt.access$SaveableStateProvider(NavBackStackEntryProvider.kt:1) at androidx.navigation.compose.NavBackStackEntryProviderKt$LocalOwnersProvider$1.invoke(NavBackStackEntryProvider.kt:52) at androidx.navigation.compose.NavBackStackEntryProviderKt$LocalOwnersProvider$1.invoke(NavBackStackEntryProvider.kt:51) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35) at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:380) at androidx.navigation.compose.NavBackStackEntryProviderKt.LocalOwnersProvider(NavBackStackEntryProvider.kt:47) at androidx.navigation.compose.NavHostKt$NavHost$32.invoke(NavHost.kt:611) at androidx.navigation.compose.NavHostKt$NavHost$32.invoke(NavHost.kt:594) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:139) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35) at androidx.compose.animation.AnimatedContentKt$AnimatedContent$6$1$5.invoke(AnimatedContent.kt:803) at androidx.compose.animation.AnimatedContentKt$AnimatedContent$6$1$5.invoke(AnimatedContent.kt:792) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:118) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35) at androidx.compose.animation.AnimatedVisibilityKt.AnimatedEnterExitImpl(AnimatedVisibility.kt:771) at androidx.compose.animation.AnimatedContentKt$AnimatedContent$6$1.invoke(AnimatedContent.kt:774) at androidx.compose.animation.AnimatedContentKt$AnimatedContent$6$1.invoke(AnimatedContent.kt:757) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35) at androidx.compose.animation.AnimatedContentKt.AnimatedContent(AnimatedContent.kt:816) at androidx.navigation.compose.NavHostKt.NavHost(NavHost.kt:571) at androidx.navigation.compose.NavHostKt$NavHost$34.invoke(Unknown Source:29) at androidx.navigation.compose.NavHostKt$NavHost$34.invoke(Unknown Source:10) at androidx.compose.runtime.RecomposeScopeImpl.compose(RecomposeScopeImpl.kt:192) at androidx.compose.runtime.ComposerImpl.recomposeToGroupEnd(Composer.kt:2823) at androidx.compose.runtime.ComposerImpl.skipCurrentGroup(Composer.kt:3114) at androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:3605) at androidx.compose.runtime.ComposerImpl.recompose$runtime_release(Composer.kt:3550) at androidx.compose.runtime.CompositionImpl.recompose(Composition.kt:948) at androidx.compose.runtime.Recomposer.performRecompose(Recomposer.kt:1198) at androidx.compose.runtime.Recomposer.access$performRecompose(Recomposer.kt:132) at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:609) at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:578) at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock.android.kt:41) at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.android.kt:109) at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.android.kt:41) at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher.android.kt:69) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1035) at android.view.Choreographer.doCallbacks(Choreographer.java:845) at android.view.Choreographer.doFrame(Choreographer.java:775) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1022) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7839) 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:1003) Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [androidx.compose.runtime.PausableMonotonicFrameClock@46da157, androidx.compose.ui.platform.MotionDurationScaleImpl@a206444, StandaloneCoroutine{Cancelling}@eef992d, AndroidUiDispatcher@27e1e62] Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.compose.foundation.text2.input.TextFieldState" on path: DexPathList[[zip file "/data/app/~~hqBtIZBlu44CWRUpMilOjw==/com.jlahougue.runique-IDMmmJEiS3W7iNOyHla66Q==/base.apk"],nativeLibraryDirectories=[/data/app/~~hqBtIZBlu44CWRUpMilOjw==/com.jlahougue.runique-IDMmmJEiS3W7iNOyHla66Q==/lib/x86_64, /data/app/~~hqBtIZBlu44CWRUpMilOjw==/com.jlahougue.runique-IDMmmJEiS3W7iNOyHla66Q==/base.apk!/lib/x86_64, /system/lib64, /system_ext/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:218) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) ... 79 more
有没有人遇到过这个问题?
内容的提问来源于stack exchange,提问作者Damon
相关产品推荐
相关产品推荐

