如何为依赖Google Play Services的谷歌地图应用使用非Nexus 5模拟器
嘿,我来帮你解决这个模拟器的Google Play Services问题——我之前维护老应用升级Android Studio时也踩过几乎一模一样的坑,给你整理几个亲测有效的方案:
这个问题本质是你应用依赖的老版本Google Play Services,和新模拟器系统镜像里的版本不兼容,毕竟你的应用已经3年了,用的Maps v2对应的Play Services版本肯定比较旧,而Android Studio 3.1的默认模拟器镜像版本偏新,两边对不上就会弹更新提示还没法解决。
具体解决步骤:
第一步:确认你应用的Play Services版本
打开Module级别的build.gradle,找到Maps相关的依赖行,比如:implementation 'com.google.android.gms:play-services-maps:10.2.0'把这个版本号记下来(比如上面的
10.2.0)。第二步:创建匹配版本的模拟器
打开AVD Manager,新建模拟器时注意这几点:- 不要选最新的API级别,比如如果你的Play Services是10.x版本,对应选API 23(Android 6.0)左右的系统镜像;
- 一定要选带「Google Play」标签的镜像(不是「Google APIs」)——带Google Play的镜像支持直接在模拟器内更新Play Services,或者本身版本更适配老应用;
- 删掉之前那些出问题的模拟器,重新建符合要求的,大概率就能解决更新提示的问题。
第三步:如果不想换模拟器,就调整依赖版本
如果一定要用现有模拟器,先看它提示要更新到哪个Play Services版本,然后把build.gradle里的Maps依赖版本改成这个号,同步后重新运行。不过要注意:跨大版本调整可能会有API变更,比如从10.x跳到16.x,得测试下地图功能有没有崩。
结合老应用+Maps v2的情况,大概率是地图加载相关的问题,你可以从这几个方向查:
- 检查Google Maps API密钥:确认在Google Cloud控制台里,密钥绑定的SHA-1和包名和你当前应用完全匹配,有没有过期或者权限没开;
- 看Logcat日志:搜索
GoogleMap或PlayServices相关的报错,比如有没有位置权限未授予、API密钥无效的提示; - 确认模拟器设置:Nexus 5模拟器有没有开启位置服务,系统镜像是不是带Google Play的版本。
Android Studio 3.1确实有点老了,虽然你要维护老应用,但可以考虑升级到4.x的稳定版——对模拟器的兼容性更好,而且不会影响老应用的编译,能省不少麻烦。另外别忘了在AndroidManifest.xml里加Play Services版本的meta-data:
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
内容的提问来源于stack exchange,提问作者user2711811

