Android升级SDK及依赖后模拟器LocationServices.API报错咨询
问题解答
关于报错里的17状态码说明
你看到的ApiException: 17里的数字不是依赖版本号,是Google Play服务(GMS)的标准连接状态码,对应常量值ConnectionResult.SERVICE_INVALID,含义是当前设备上安装的Google Play服务组件损坏、版本过低,和你接入的位置服务依赖不兼容,和你配置的20.0.0版本位置服务SDK没有直接关联。
你把所有GMS相关依赖更新到最新版后,SDK对设备端预装的Google Play服务最低版本要求同步提升,你当前用的模拟器镜像里自带的GMS版本达不到要求,就会抛出这个错误。
模拟器报错的修复方式
这个问题基本不需要修改业务代码,调整模拟器配置即可解决:
- 删除当前故障的Pixel 3a API 30模拟器
- 重新创建模拟器时,系统镜像必须选择标注了Google Play或Google APIs的官方镜像,不要选择不带Google服务框架的纯AOSP镜像
- 模拟器启动后先打开内置Google Play商店,将Google Play服务更新到最新正式版,再安装运行你的应用
如果当前模拟器桌面找不到Google Play商店入口,说明镜像本身缺失GMS核心组件,没有调整配置修复的可能,必须更换镜像。
发布到Google Play的风险提示
你现在的安装包不能直接发布,必须完成两项校验再上传:
- 补充前置校验逻辑:在调用LocationServices相关接口前,先通过
GoogleApiAvailability检查设备上的GMS可用状态,若检测到服务版本不符、组件缺失,要弹出引导用户升级Google Play服务的提示,不要直接调用接口取结果。你当前代码里直接调用task.getResult()没有做成功状态判断,只要用户设备GMS版本不满足要求就会直接崩溃,Google Play的预启动检测环节就会直接驳回你的包,上线后也会产生大量崩溃差评。 - 完成多环境兼容性测试:你自己的Android 12实体机能正常运行,仅能代表你个人设备的GMS版本符合依赖要求,无法覆盖所有用户的设备环境。你至少需要在API 30、API 31、API 33三个版本的带Google Play服务的模拟器,以及2-3台不同厂商的Android 12/13实体机上跑完定位相关的核心流程,确认无崩溃再打包发布。
额外提示:你当前崩溃栈里显示代码开启了R8混淆,发布前务必测试混淆后的release包,确认GMS相关类没有被错误混淆导致功能异常。
内容的提问来源于stack exchange,提问作者Claudio Bogado Pompa
相关产品推荐
相关产品推荐

