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
相关产品推荐
相关产品推荐

