You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 16:54:52