为啥 Google 地图在我的 Android 应用程序中显示空白屏幕?

Posted

技术标签:

【中文标题】为啥 Google 地图在我的 Android 应用程序中显示空白屏幕?【英文标题】:Why Google Maps is showing empty screen in my Android App?为什么 Google 地图在我的 Android 应用程序中显示空白屏幕? 【发布时间】:2017-08-08 17:06:04 【问题描述】:

我的 android 应用中有 Google 地图。我通过选择新的 Google Maps Activity 并在 Android Studio 中粘贴密钥来添加它。它在我的 Android 手机(Lenovo K5 Note)上运行良好,但是当我将项目复制到另一台计算机并在另一台设备(Coolpad)上运行时,它会显示一个空白屏幕(米色或白色),左下方带有 Google 徽标。

【问题讨论】:

使用该机器的 SHA 生成 API 密钥 或者将debug.keystore文件从第一台机器复制到第二台机器,这样两者就可以使用相同的API_KEY 您需要将另一台机器的 SHA 密钥添加到您的项目中,该项目在 google 开发者控制台上可用 添加 Google Maps Activity 后打开此链接时自动生成密钥。 console.developers.google.com/flows/… 【参考方案1】:

过去两天与空白地图作斗争,这里是从各种来源收集的摘要(我敢肯定这不是可能问题的完整列表!)。


1。 API 密钥丢失、不正确或被禁用

似乎是最常见的。我建议关注official documentation。如果您完成所有步骤,问题仍然存在并且您仍然不确定是否是原因,请克隆 official android samples,找到 MapWithMarker 示例 (android-samples/tutorials/MapWithMarker) 并对其进行测试。如果您运行示例并且它正确显示了地图,请尝试将默认 API KEY 交换为您拥有的那个。

如果有效,则密钥不是问题。 如果不起作用,关键是你的问题。

在这种情况下,请确保您在 Google API Console 中启用了它。


2。缺少 Android GMS 版本元数据标记

您的 AndroidManifest.xml 需要定义以下元数据属性:

<meta-data android:name="com.google.android.gms.version"
      android:value="@integer/google_play_services_version" />

更多详情请参阅the answer here 和official documentation。


3。缺少用户权限

在旧版本的 Android SDK 中,您必须明确设置某些用户权限才能正确使用 Google Maps API,例如:

<uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

现在不再是这种情况了,但我建议您访问 official documentation 以确保您满足这些版本要求。


4。 OpenGL ES 版本 2 的要求

过去,似乎需要在 AndroidManifest.xml 中指定以下元数据属性

<uses-feature   
   android:glEsVersion="0x00020000"  
   android:required="true"/>

official documentation 不再需要此功能。一些额外的细节是可用的,例如here.


5. AVD Manager 设备配置

Android Studio 3.0 AVD Manager 允许您为似乎运行不佳的 API 创建设备配置。目前,您可以针对似乎尚未发布的 API v27 创建配置,如果我没记错的话。即使在我开始使用 Google Maps API 之前,基本的模拟也能很好地工作。设置为 v27 的设备配置均无法与 Maps API 一起使用,从而导致空白地图。

尝试降级到较低的 SDK 版本。

注意:如果有更深入的知识的人纠正我的简化且可能不正确的解释,我会很高兴。由于这是我的问题,我停止了更深入的评估,现在只是切换到不同的配置。

使用以下设置:

Android Studio 3.0
Build #AI-171.4408382, built on October 20, 2017
JRE: 1.8.0_152-release-915-b01 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Windows 10 10.0

希望这将帮助至少一个人节省一些时间..

【讨论】:

哇.. v27 似乎仍然是 AVD 管理器中的一个问题。谢谢提示【参考方案2】:

我遇到了同样的问题,请与以下内容进行交叉检查。 google map API key 有两个文件分别用于调试和发布。 请检查生产版本,您必须在发布文件夹下有条目 google_maps_api.xml 文件。我通过在两个文件中添加我的密钥解决了这个问题。

【讨论】:

【参考方案3】:

鉴于您的应用可以在Lenovo 上运行,最可能的原因是您的Coolpad 手机没有Google Play services,当您使用大多数Google 产品时,这是必需的。 (here 您可以通过Coolpad 8675 找到有关此问题的更多详细信息)。不幸的是,作为开发人员,您无法解决此问题。如果用户真的想使用您的应用程序并且没有Play Services,您可以显示一个错误,告诉您问题出在哪里,并且他们应该在使用您的应用程序之前安装它们。从这一点来看,他们应该能够找到足够多的教程来说明如何做这件事。

【讨论】:

【参考方案4】:

debug.keystore 不同于两台计算机。

解决方案:

1) 将密钥库从 pc 复制到 Android 文件夹中的新文件夹。

2) 生成新的 sha 并放入您的 google api 项目。 https://developers.google.com/maps/documentation/android-api/signup#release-cert

【讨论】:

【参考方案5】:

我遇到了类似的问题,花了很多时间才解决它。通常在真实设备上一切正常,但未能在我的一些模拟器变体上显示谷歌地图。很明显,程序代码没问题,那么问题来了,为什么?

到目前为止我观察到的:

    如果硬件加速被禁用 - 一切恢复正常。

    如果使用纯安卓镜像,cpu-arm(不加速x86,速度较慢),但也可以。

    如果您使用的是 x86_64 操作系统 - 在我的情况下是 macOS 10.13.2,使用 x86_64 版本的模拟器映像,而不是通用 x86!!! 这是我的市长错误不这样做让它工作!用 x86_64 变种替换我的模拟器的图像,解决所有问题!

【讨论】:

【参考方案6】:

我认为您用于在 pc 上开发应用程序的 SHA1 密钥在另一台 pc 上产生了这个问题。在新电脑上生成 SHA1 并替换旧电脑,然后它就可以正常工作了。 当您将其用作调试目的时。出于生产目的,开发人员页面上有文档。

【讨论】:

以上是关于为啥 Google 地图在我的 Android 应用程序中显示空白屏幕?的主要内容,如果未能解决你的问题,请参考以下文章

Google Developer 控制台“Google Map Android API V2”选项未查看启用

Ionic 3 Google 地图在 Android + IOS 上不显示

为啥我在 Google 地图上的当前位置在 Android 应用中不正确? [复制]

Android 谷歌地图 API

Android:Google Map v2 未显示发布 apk 的地图

使用 Google 地图 api 的演示 android 应用程序崩溃