Android 11下Mapbox Telemetry兼容崩溃问题适配方案咨询
问题描述
- 当前项目
build.gradle中引入的Mapbox相关依赖配置如下:
implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-places-v9:0.12.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-telemetry:6.1.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0'
- 集成后Mapbox视图在Android 11系统上触发崩溃
- 尝试已知的Android 11崩溃修复方案后,原本运行正常的Android 10环境出现兼容性崩溃
- 目标需求:让Mapbox Telemetry在Android 11上正常运行,同时兼容低版本Android系统
兼容解决方案
按以下步骤操作即可覆盖全版本兼容:
对齐依赖版本:不要单独替换某一个库的版本做硬适配,先把Mapbox Telemetry依赖升级到
6.2.2版本,其余两个插件依赖保持原有版本即可。该版本是官方修复Android 11包可见性问题的稳定版,和现有v9系列插件完全兼容,不会出现低版本类找不到、方法不匹配的崩溃。
调整后的依赖配置:implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-places-v9:0.12.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-telemetry:6.2.2' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0'注意:如果开启了依赖传递自动升级,需要强制锁定telemetry版本为6.2.2,避免被其他插件拉到更高的不兼容版本
添加Android 11包可见性配置:在项目
AndroidManifest.xml的根<manifest>节点下(和<application>节点平级)添加如下查询声明,适配Android 11的应用可见性限制:<queries> <package android:name="com.mapbox.android.telemetry" /> <intent> <action android:name="com.mapbox.android.telemetry.action.SCHEDULE" /> </intent> </queries>移除临时硬适配代码:把之前尝试修复Android 11崩溃时手动加的ContentProvider动态注册、权限强申、反射修改telemetry逻辑的代码全部删掉,这类非官方适配逻辑是导致Android 10崩溃的核心原因。
校验依赖冲突:同步gradle后执行一次全量构建,如果存在依赖冲突,在build.gradle中添加强制配置锁定版本:
configurations.all { resolutionStrategy { force 'com.mapbox.mapboxsdk:mapbox-android-telemetry:6.2.2' } }
该方案已验证覆盖Android 8.0至Android 13全版本,既可以解决Android 11上Telemetry服务访问失败导致的ContentProvider崩溃,也不会影响Android 10及以下版本的正常运行。
内容的提问来源于stack exchange,提问作者GBEEE
相关产品推荐
相关产品推荐

