Flutter应用Android端Google Map显示空白 iOS端正常如何解决
Flutter GoogleMap 安卓端显示空白、iOS端正常修复方案
iOS端可以正常加载地图,说明Dart层组件逻辑、API密钥有效性、Maps SDK基础服务开通状态均无异常,故障点集中在安卓端专属配置环节,按以下顺序排查即可:
- 检查AndroidManifest中API密钥配置位置与字段名是否正确
密钥配置必须放在<application>标签内部、与Activity标签平级,不能嵌套在Activity或其他组件标签内;注意不要使用老安卓原生地图教程里的com.google.android.maps.v2.API_KEY作为meta-data的name值,该字段对Flutter插件无效,必须使用com.google.android.geo.API_KEY作为配置名。
正确配置示例:<application android:name=".MainApplication" android:label="@string/app_name"> <!-- 正确配置位置 --> <meta-data android:name="com.google.android.geo.API_KEY" android:value="你的实际API密钥"/> <activity android:name=".MainActivity" android:exported="true"> <!-- 不要把key的meta-data放在这里 --> </activity> </application> - 检查API密钥的安卓端应用限制配置
若给API密钥加了应用白名单限制,必须同时添加安卓端的包名与SHA-1签名指纹,仅配置iOS端信息时安卓端会被谷歌服务拦截,返回空白瓦片:- 进入Google Cloud控制台凭据页,找到当前使用的API密钥
- 应用限制选择「Android应用」,添加对应包名与SHA-1值
注意debug调试、release正式包的签名SHA-1值不同,安卓模拟器、本地真机调试用debug签名,正式发包用自定义release签名,两个环境的SHA-1都需要添加到白名单。
本地快速获取debug签名SHA-1可直接在项目根目录执行命令:
在输出内容中找到cd android && ./gradlew signingReportvariant: debug对应的SHA1值复制即可,无需手动查找keystore文件计算。 - 检查安卓端权限与SDK版本配置
- 在AndroidManifest根节点(与
<application>平级)添加必要网络权限,漏加权限会导致地图瓦片无法下载:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />- 打开
android/app/build.gradle文件,确认minSdkVersion不低于20,低于该版本时地图插件无法正常工作:
defaultConfig { applicationId "你的应用包名" minSdkVersion 20 // 不可低于20 targetSdkVersion 33 versionCode flutterVersionCode.toInteger() versionName flutterVersionName } - 在AndroidManifest根节点(与
- 特殊场景排查
若使用国行定制安卓系统真机测试,先确认设备内置完整Google Play服务框架、网络可正常连通谷歌服务;使用安卓模拟器测试时,选择带Google Play服务的官方AVD镜像,不要选纯AOSP无谷歌服务的镜像,这类镜像本身不支持谷歌地图加载。
你贴出的GoogleMap组件Dart代码不存在逻辑问题,所有配置修改完成后不要直接热重载,必须执行flutter clean清除构建缓存后重新全量编译安装应用,配置变更不会在热重载/热重启中生效。
内容的提问来源于stack exchange,提问作者Victor Ayodeji Ogundola
相关产品推荐
相关产品推荐

