如何解决升级play-services-location依赖后出现的版本不匹配报错问题
报错信息:com.google.android.gms.tasks.RuntimeExecutionException: com.google.android.gms.common.api.ApiException: 17: API: LocationServices.API is not available on this device. Connection failed with: ConnectionResult{statusCode=SERVICE_INVALID, resolution=null, message=null}
疑问解答:为什么依赖升级到18版本仍出现数字17?
报错中的17是Google Play服务框架定义的标准错误状态码,并非依赖库的版本号,对应枚举值SERVICE_INVALID,代表当前设备上安装的Google移动服务(GMS)版本与应用依赖的play-services-location版本不兼容,无法提供定位接口能力,和你升级的18.0.0依赖版本本身无关联。
修复方案
- 统一所有GMS相关依赖版本
检查app模块build.gradle中所有com.google.android.gms:前缀的依赖,确保版本号完全一致,避免跨版本冲突。如果存在第三方库间接引入不同版本GMS组件的情况,添加强制版本配置:configurations.all { resolutionStrategy.force 'com.google.android.gms:play-services-location:18.0.0' // 其余GMS相关依赖如果有版本冲突也可在此处添加强制规则 } - 降级定位依赖适配旧设备
play-services-location:18.0.0要求设备端GMS版本不低于21.0.0,大量未更新GMS的旧设备会触发该错误。如果需要覆盖旧设备群体,可将该依赖降级到17.1.0及以下的稳定兼容版本。 - 前置GMS可用性检测
在调用定位相关接口前,先检测设备GMS状态,避免直接调用引发崩溃:int gmsStatus = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context); if (gmsStatus != ConnectionResult.SUCCESS) { // 自定义降级逻辑,例如提示用户更新GMS、切换到系统定位接口等 } - 清理本地构建缓存
手动删除项目根目录下的.gradle文件夹、app模块下的build文件夹,再执行Rebuild操作,排除旧缓存导致的依赖引用异常。 - 模拟器场景修复
如果是测试模拟器触发该错误,更换带Google APIs的系统镜像创建模拟器,或打开模拟器内置的Play Store更新Google Play服务到最新版本即可。
内容的提问来源于stack exchange,提问作者Claudio Bogado Pompa
相关产品推荐
相关产品推荐

