跳转使用Material Motion的Fragment时报NoSuchFieldError如何解决?
错误原因
该错误是Accompanist版本与Jetpack Compose版本不匹配导致的:
你当前使用的Accompanist 0.11.1适配的是Jetpack Compose Beta 10及以上版本,该版本的Compose动画库中Transition类由Compose编译器自动生成了$stable标记字段;而你项目中使用的Compose Beta 09版本的Transition类不存在该字段,运行时Accompanist读取对应字段失败就抛出了该NoSuchFieldError异常。
解决方案
有两种兼容调整方案可选:
- 保留现有Compose Beta 09版本:将Accompanist版本降级至
0.10.0,该版本是官方指定适配Compose Beta 09的版本,无需调整其他依赖即可兼容。 - 保留现有Accompanist 0.11.1版本:将Jetpack Compose全量依赖升级至Beta 10版本,同步将Kotlin版本升级至1.5.20以适配新版Compose编译器要求。
额外注意事项
版本调整完成后请先执行项目clean操作,清除构建缓存后再重新编译,避免缓存残留的旧类文件导致报错重复出现。你当前使用的Material 1.4.0-rc01、Fragment 1.3.5、AGP 7.0.0-beta03版本均兼容上述两种调整方案,无需额外修改。
内容的提问来源于stack exchange,提问作者Andre Thiele
相关产品推荐
相关产品推荐

