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

Jetpack Compose中Google地图聚类功能崩溃问题求助

问题:Google Maps Compose聚类功能触发应用崩溃

尝试基于最新版Google Maps Compose库实现简单地图聚类示例,使用Clustering组合项时应用直接崩溃,错误提示无法找到androidx.appcompat.widget.AppCompatTextView类。

复现步骤

  • 用Compose Material模板创建新项目
  • 添加以下依赖:
implementation 'com.google.maps.android:maps-compose:2.11.4'

// 确保引入最新版Android地图SDK
implementation 'com.google.android.gms:play-services-maps:18.1.0'

// 可选:引入聚类等功能的Compose工具库
implementation 'com.google.maps.android:maps-compose-utils:2.11.4'

// 可选:引入比例尺等组件的Compose工具库
implementation 'com.google.maps.android:maps-compose-widgets:2.11.4'
  • 在AndroidManifest.xml的<application>标签内添加有效Google Maps密钥:
<meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="YOUR_KEY"
        />
  • 在MainActivity的setContent块中添加代码:
val singapore = LatLng(1.35, 103.87)
    
val cameraPositionState = rememberCameraPositionState {
    position = CameraPosition.fromLatLngZoom(singapore, 10f)
}

GoogleMap(modifier = Modifier.fillMaxSize(), cameraPositionState = cameraPositionState) {
    Clustering(items = listOf(MyMarker("foo")))
}
  • 创建MyMarker数据类:
data class MyMarker(val name: String): ClusterItem {
    override fun getPosition(): LatLng {
        return LatLng(1.30, 103.80)
    }

    override fun getTitle(): String? {
        return name
    }

    override fun getSnippet(): String? {
        return null
    }
}

崩溃错误信息

java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/appcompat/widget/AppCompatTextView;
        at com.google.maps.android.clustering.ClusterManager.<init>(ClusterManager.java:78)
        at com.google.maps.android.clustering.ClusterManager.<init>(ClusterManager.java:70)
        at com.google.maps.android.compose.clustering.ClusteringKt$rememberClusterManager$1.invokeSuspend(Clustering.kt:104)
.
.
.
uppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [androidx.compose.ui.platform.MotionDurationScaleImpl@10983c0, androidx.compose.runtime.BroadcastFrameClock@db1c8f9, StandaloneCoroutine{Cancelling}@984a03e, AndroidUiDispatcher@6e31bec]
    Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.appcompat.widget.AppCompatTextView" on path: DexPathList[[dex file "/data/data/com.example.mapstest/code_cache/.overlay/base.apk/classes4.dex", zip file "/data/app/~~a3y1RK-lr6Zj89PHaClKpA==/com.example.mapstest-_VL6f5R9fXVZhEg4iRdmhQ==/base.apk"],nativeLibraryDirectories=[/data/app/~~a3y1RK-lr6Zj89PHaClKpA==/com.example.mapstest-_VL6f5R9fXVZhEg4iRdmhQ==/lib/arm64, /system/lib64, /system_ext/lib64]]

解决方案

崩溃原因是ClusterManager内部依赖AppCompat库的组件,但Compose Material模板默认未引入AppCompat依赖。只需在Module级build.gradle中添加以下依赖:

implementation 'androidx.appcompat:appcompat:1.6.1'

同步Gradle后重新运行应用,即可正常显示聚类标记。

本质原因:Google Maps聚类组件用AppCompatTextView构建聚类标签,而纯Compose项目不会自动包含AppCompat库,手动引入后就能确保该类被正确加载。

内容的提问来源于stack exchange,提问作者Javier Cancio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:20:26