Jetpack Compose 1.1.1集成Google Maps报错:找不到isTraceInProgress()方法
使用Jetpack Compose 1.1.1版本集成Google Maps后,应用启动直接崩溃;移除Google Maps相关代码后,应用可正常运行。报错核心信息:
java.lang.NoSuchMethodError:找不到androidx.compose.runtime.ComposerKt类或其超类中的静态方法isTraceInProgress()Z
完整崩溃日志:
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.emmanuel.japh, PID: 6095 java.lang.NoSuchMethodError: No static method isTraceInProgress()Z in class Landroidx/compose/runtime/ComposerKt; or its super classes (declaration of 'androidx.compose.runtime.ComposerKt' appears in /data/app/~~CawNWHnzOeevtc9GLdJ9Wg==/com.emmanuel.japh-hZxyKg3RuIgGoJA8QHMO8A==/base.apk) at com.google.maps.android.compose.GoogleMapKt.GoogleMap(Unknown Source:6) at com.emmanuel.japh.ui.screens.HomeScreenKt.HomeScreen(HomeScreen.kt:20) at com.emmanuel.japh.navigation.ComposableSingletons$BottomNavGraphKt$lambda-1$1.invoke(BottomNavGraph.kt:23) at com.emmanuel.japh.navigation.ComposableSingletons$BottomNavGraphKt$lambda-1$1.invoke(BottomNavGraph.kt:22) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:116) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34) at androidx.navigation.compose.NavHostKt$NavHost$4$2.invoke(NavHost.kt:163) at androidx.navigation.compose.NavHostKt$NavHost$4$2.invoke(NavHost.kt:162) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34) at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228) at androidx.compose.runtime.saveable.SaveableStateHolderImpl.SaveableStateProvider(SaveableStateHolder.kt:84) at androidx.navigation.compose.NavBackStackEntryProviderKt.SaveableStateProvider(NavBackStackEntryProvider.kt:60) 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:107) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34) at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228) at androidx.navigation.compose.NavBackStackEntryProviderKt.LocalOwnersProvider(NavBackStackEntryProvider.kt:47) at androidx.navigation.compose.NavHostKt$NavHost$4.invoke(NavHost.kt:162) at androidx.navigation.compose.NavHostKt$NavHost$4.invoke(NavHost.kt:141) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:116) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34) at androidx.compose.animation.CrossfadeKt$Crossfade$4$1.invoke(Crossfade.kt:115) at androidx.compose.animation.CrossfadeKt$Crossfade$4$1.invoke(Crossfade.kt:110) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34) at androidx.compose.animation.CrossfadeKt.Crossfade(Crossfade.kt:124) at androidx.compose.animation.CrossfadeKt.Crossfade(Crossfade.kt:55) at androidx.navigation.compose.NavHostKt.NavHost(NavHost.kt:141) at androidx.navigation.compose.NavHostKt$NavHost$5.invoke(Unknown Source:13) at androidx.navigation.compose.NavHostKt$NavHost$5.invoke(Unknown Source:10) at androidx.compose.runtime.RecomposeScopeImpl.compose(RecomposeScopeImpl.kt:140) at androidx.compose.runtime.ComposerImpl.recomposeToGroupEnd(Composer.kt:2158) at androidx.compose.runtime.ComposerImpl.skipCurrentGroup(Composer.kt:2404) at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:2585) at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:2571) at androidx.compose.runtime.SnapshotStateKt__DerivedStateKt.observeDerivedStateRecalculations(DerivedState.kt:247) at androidx.compose.runtime.SnapshotStateKt.observeDerivedStateRecalculations(Unknown Source:1)
HomeScreen代码:
@Composable fun HomeScreen() { val singapore = LatLng(1.35, 103.87) val cameraPositionState = rememberCameraPositionState { position = CameraPosition.fromLatLngZoom(singapore, 10f) } GoogleMap( modifier = Modifier.fillMaxSize(), cameraPositionState = cameraPositionState ) { Marker( state = MarkerState(position = singapore), title = "Singapore", snippet = "Marker in Singapore" ) } }
问题根源
isTraceInProgress()是Jetpack Compose 1.2.0及以上版本才新增的方法,你当前使用的Google Maps Compose库版本依赖了该方法,但项目使用的Compose 1.1.1不包含这个方法,导致版本兼容冲突。
解决步骤
降级Google Maps Compose版本(保留Compose 1.1.1)
如果你想继续使用Compose 1.1.1,需将Google Maps Compose降级到适配Compose 1.1.x的版本,比如2.10.0(该版本及以下适配Compose 1.1.x)。在Module级别的build.gradle.kts或build.gradle中修改依赖:implementation "com.google.maps.android:maps-compose:2.10.0"升级Jetpack Compose版本(使用新版Maps Compose)
若要使用更高版本的Google Maps Compose,需将Jetpack Compose整体升级到1.2.0及以上,确保所有Compose相关依赖版本一致,示例配置:// Compose BOM统一管理版本 implementation platform("androidx.compose:compose-bom:2023.03.00") implementation "androidx.compose.ui:ui" implementation "androidx.compose.ui:ui-tooling-preview" implementation "androidx.compose.material:material"同步项目并重启应用
修改依赖后,点击Android Studio的「Sync Project with Gradle Files」按钮,等待同步完成后重新启动应用。
内容的提问来源于stack exchange,提问作者Noureddine

