如何为我的 Google 地图应用使用具有 Google Play 服务依赖项的非 Nexus 5 模拟器
Posted
技术标签:
【中文标题】如何为我的 Google 地图应用使用具有 Google Play 服务依赖项的非 Nexus 5 模拟器【英文标题】:How to use non-Nexus 5 emulators with Google Play Services dependency for my Google Maps app 【发布时间】:2018-09-17 09:21:05 【问题描述】:我的测试方法涉及使用各种配置(品牌/模型/尺寸/apis/目标)的许多模拟器。
我最近升级到了 android Studio 3.1。
我的应用程序已经运行了 3 年,使用 Google Maps v2,我想继续维护它(Google 笑)。
我现在拥有的每个模拟器(除了 Nexus 5)都无法工作,因为它说 Google Play 服务需要更新,而且似乎没有解决它的途径。 Nexus 5 模拟器没有错误但显示空白地图背景。
当我尝试删除对 Google Play 服务的任何依赖时,它最终会变成一个滑坡(主要是替换融合的位置服务)。
问题:如果我的 Google Maps v2 应用程序中有 Google Play Services 依赖项(也许是我的第一个错误?)我是否仅限于 Nexus 5 模拟器(似乎有其自身的问题) ?如果没有,那么如何升级其他优秀的模拟器(Pixel、其他 Nexus、Galaxy...)?
我看到了其他问题,我会继续盯着他们看,但我想了解未来维护的可行路径 - 删除依赖项,升级某些东西......
供参考:
与 Nexus 5 无关的错误是:
除非您更新 Google Play 服务,否则(应用程序)将无法运行
(一个大胖子 还会显示“更新”按钮,该按钮会引发异常 - 大概是因为模拟器上没有安装。)
Nexus 5 相关错误是:
E/Google Maps Android API:Google Maps Android API v2 仅支持 OpenGL ES 2.0 及以上的设备
(我无法在 Nexus 5 模拟器的 AVD 管理器中启用。)
这是一些典型的 gradle 疯狂 - 我试图将播放服务降低到 11.8.0,但不幸的魔法发生了(来自 gradlew app:depencencies):
+--- com.google.android.gms:play-services-maps:11.8.0 -> 12.0.1 | +--- com.google.android.gms:play-services-base:12.0.1 | | +--- com.google.android.gms:play-services-basement:12.0.1 | | | +--- com.android.support:support-v4:26.1.0 () | | | --- com.google.android.gms:play-services-basement-license:12.0.1 | | +--- com.google.android.gms:play-services-tasks:12.0.1 | | | +--- com.google.android.gms:play-services-basement:12.0.1 () | | | --- com.google.android.gms:play-services-tasks-license:12.0.1 | | --- com.google.android.gms:play-services-base-license:12.0.1 | +--- com.google.android.gms:play-services-basement:12.0.1 (*) | --- com.google.android.gms:play-services-maps-license:12.0.1
庆祝活动
@xiaomi 正确地将问题归咎于 play-services(或特别是 play-services-maps)12.0.1,所以经过一些 gradle 战斗后,我将所有 play-* 降到 11.8.0 并且非 Nexus 模拟器工作。
经验教训:
切勿盲目遵循 gradle 警告建议升级版本! “gradlew app:dependencies”是你的朋友。结语
在执行此操作之前请三思而后行:
【问题讨论】:
您使用的是哪个版本的地图?如果是 12.0.0,模拟器可能还没有准备好支持它(播放服务太旧)。尝试使用 11.+ 版本可能会解决您的问题。 那是另一个滑坡 - 我现在是 12.0.1,所以让我把它往下撞,看看我是怎么做到的。 两者的结果相同 - 我记得一些疯狂的 gradle 导致我进入 12.0.1 - 但它现在是 11.+ 并且仍然无法正常工作。不过还是谢谢。 有趣 - 我运行了 gradle 依赖项,并且有一些东西正在拉入 12.0.1 播放服务 - 所以我会看看。 @xiaomi - 好的,我解决了我的 gradle 问题,所以我确定我使用的是 11.8.0 并且非 Nexus 5 模拟器现在可以工作了! nexus 5 仍然显示空白地图背景,但我怀疑这是另一个问题。随意张贴作为答案。一个子项目仍在拉 12.0.1,所以我更正了。 【参考方案1】:我们可以使用的最新 Google Play 服务与最新的模拟器可以处理的服务之间通常存在延迟。
当模拟器上的应用要求更新时,一种解决方案是使用较低版本的 Google Play 服务。
如果地图显示为空白,这通常是key registration 的问题
【讨论】:
以上是关于如何为我的 Google 地图应用使用具有 Google Play 服务依赖项的非 Nexus 5 模拟器的主要内容,如果未能解决你的问题,请参考以下文章
如何为 google map api v2 设置默认位置和缩放级别?