升级Mapbox依赖遇ClassCastException,旧依赖存PendingIntent问题
问题解决:Mapbox依赖与Gradle 8.x/JDK17兼容问题
环境
- Android OS版本:31
- JDK:jdk-17
- AGP:8.0
- Gradle:8.0.2
核心问题
- 升级Mapbox依赖后,编译阶段抛出
java.lang.ClassCastException: class com.sun.tools.javac.tree.JCTree$JCIdent cannot be cast to class com.sun.tools.javac.tree.JCTree$JCArrayTypeTree - 保留旧版Mapbox依赖时,Android 31+系统运行触发Telemetry初始化异常:
Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent
解决方案
1. 解决编译阶段的ClassCastException
该错误源于Mapbox旧版本注解处理器与JDK17/Gradle 8.x的Java编译API不兼容,按以下步骤处理:
- 升级Mapbox依赖至10.15.0及以上版本(此版本开始适配JDK17和Gradle 8.x),示例依赖配置:
dependencies { implementation 'com.mapbox.maps:android:10.16.1' // 同步升级其他Mapbox组件(如导航)的对应版本 implementation 'com.mapbox.navigation:core:2.13.1' } - 若升级后仍存在冲突,强制排除旧版注解处理器依赖:
configurations.all { exclude group: 'com.mapbox', module: 'mapbox-annotation-processor' }
2. 解决Android 31+的PendingIntent异常
旧版Mapbox Telemetry模块未适配Android 12+的PendingIntent flag要求,升级到上述兼容Gradle 8.x的Mapbox版本即可彻底解决——该版本已修复此flag问题。
若因特殊原因无法立即升级,可临时通过以下配置规避(不推荐长期使用):
<application> <meta-data android:name="mapbox.telemetry.targetSdkVersion" android:value="30" /> </application>
验证步骤
- 同步Gradle项目,执行
./gradlew clean清理构建缓存 - 重新编译项目,确认ClassCastException消失
- 在Android 31+设备上运行,检查Telemetry初始化异常是否解决
内容的提问来源于stack exchange,提问作者Syed Tayyab Ali
相关产品推荐
相关产品推荐

