如何为我的 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 设置默认位置和缩放级别?

如何为我的城镇创建基于地图的应用程序?

您将如何为地图上各点之间的路线提供路线?缺失的部分是啥?

如何为谷歌地图信息窗口设置边界半径

如何为具有多个帐户的用户在Google App Scripts中选择帐户?

如何为 google_maps_flutter 设置缩放级别