升级Compose BOM至2024.01.00后CircularProgressIndicator报错求助
Compose BOM升级后CircularProgressIndicator报错问题
问题描述
将Compose BOM从2023.10.01版本升级至2024.01.00后,使用CircularProgressIndicator时出现方法找不到的错误。
错误堆栈跟踪
java.lang.NoSuchMethodError: No virtual method at(Ljava/lang/Object;I)Landroidx/compose/animation/core/KeyframesSpec$KeyframeEntity; in class Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig; or its super classes (declaration of 'androidx.compose.animation.core.KeyframesSpec$KeyframesSpecConfig' appears in /data/app/~~UsXlPxBRrCk6Kgqqdu5UvA==/me.jerryokafor.ihenkiri.debug-c4yfK-gLz9ZQ8fKqIz3WEw==/base.apk) at androidx.compose.material3.ProgressIndicatorKt$CircularProgressIndicator$endAngle$1.invoke(ProgressIndicator.kt:371) at androidx.compose.material3.ProgressIndicatorKt$CircularProgressIndicator$endAngle$1.invoke(ProgressIndicator.kt:369) at androidx.compose.animation.core.AnimationSpecKt.keyframes(AnimationSpec.kt:649) at androidx.compose.material3.ProgressIndicatorKt.CircularProgressIndicator-LxG7B9w(ProgressIndicator.kt:369) at me.jerryokafor.feature.movies.screen.MoviesScreenKt$MoviesScreen$3.invoke(MoviesScreen.kt:275) at me.jerryokafor.feature.movies.screen.MoviesScreenKt$MoviesScreen$3.invoke(MoviesScreen.kt:178) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35) at me.jerryokafor.core.ui.components.BackgroundKt.Background(Background.kt:69) at me.jerryokafor.feature.movies.screen.MoviesScreenKt.MoviesScreen(MoviesScreen.kt:178) at me.jerryokafor.feature.movies.screen.MoviesScreenKt.MoviesScreen(MoviesScreen.kt:139) at me.jerryokafor.feature.movies.navigation.MoviesScreenKt$moviesScreen$1.invoke(MoviesScreen.kt:58) at me.jerryokafor.feature.movies.navigation.MoviesScreenKt$moviesScreen$1.invoke(MoviesScreen.kt:57) 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$14$1.invoke(NavHost.kt:308) at androidx.navigation.compose.NavHostKt$NavHost$14$1.invoke(NavHost.kt:306) 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:248) at androidx.compose.runtime.saveable.SaveableStateHolderImpl.SaveableStateProvider(SaveableStateHolder.kt:84) 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:228) at androidx.navigation.compose.NavBackStackEntryProviderKt.LocalOwnersProvider(NavBackStackEntryProvider.kt:47) at androidx.navigation.compose.NavHostKt$NavHost$14.invoke(NavHost.kt:306) at androidx.navigation.compose.NavHostKt$NavHost$14.invoke(NavHost.kt:295) 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:755) at androidx.compose.animation.AnimatedContentKt$AnimatedContent$6$1$5.invoke(AnimatedContent.kt:744)
解决方法
- 统一Compose依赖版本:所有Compose相关依赖(如
material3、animation-core)都通过Compose BOM引入,不要手动指定版本,避免版本冲突。示例Gradle配置:dependencies { implementation platform('androidx.compose:compose-bom:2024.01.00') implementation 'androidx.compose.material3:material3' implementation 'androidx.compose.animation:animation-core' // 其他项目依赖... } - 清理并刷新依赖:执行以下命令清理项目缓存,强制Gradle重新拉取依赖:
./gradlew clean ./gradlew build --refresh-dependencies - 排查依赖冲突:用
./gradlew dependencies查看项目依赖树,检查是否有第三方库依赖了旧版本的Compose Animation组件。如果有,通过exclude语句排除旧版本:implementation('第三方库坐标') { exclude group: 'androidx.compose.animation', module: 'animation-core' } - 升级到最新BOM版本:如果上述方法无效,尝试升级到更新的Compose BOM版本(如2024.02.00),该版本可能已修复此兼容性问题。
内容的提问来源于stack exchange,提问作者Jerry Okafor
相关产品推荐
相关产品推荐

