Flutter集成Google Maps Platform抛出SecurityException问题求助
解决google_maps_flutter中SecurityException(未知调用包名com.google.android.gms)问题
针对你遇到的调试时地图可渲染但抛出SecurityException、发布APK后地图完全无法加载的问题,可按以下步骤排查修复:
1. 检查Google Cloud API密钥的限制配置
- 登录Google Cloud控制台,找到对应Maps SDK for Android的API密钥,进入密钥详情页:
- 确认应用限制中已添加调试签名SHA-1和发布签名SHA-1,两者缺一不可——调试用APK依赖调试签名,发布APK依赖发布签名,缺任意一个都会导致对应环境下的权限验证失败
- 确认配置的包名和项目
app/build.gradle中的applicationId完全一致(注意大小写,Google Cloud的包名限制是区分大小写的)
2. 修正AndroidManifest.xml配置
- 确保已添加必要权限,放在
<manifest>标签内:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> - 确认API密钥的
<meta-data>标签位置正确(必须在<application>标签内部),且名称为com.google.android.geo.API_KEY(不要用旧的com.google.android.maps.v2.API_KEY):<application android:label="你的应用名" android:name="${applicationName}" android:icon="@mipmap/ic_launcher"> <!-- 其他组件 --> <meta-data android:name="com.google.android.geo.API_KEY" android:value="你的GMP API密钥"/> </application> - 检查Manifest中是否存在自定义权限或provider配置,避免误限制
com.google.android.gms的调用权限
3. 验证Gradle签名与applicationId配置
- 在
app/build.gradle中,确认debug和release构建类型的签名配置:- 调试构建:如果使用自定义调试签名,需确保其SHA-1已添加到API密钥限制;默认调试签名可通过Android Studio的
Signing Report工具获取SHA-1 - 发布构建:配置正确的签名文件,通过以下命令获取发布签名SHA-1:
keytool -list -v -keystore 你的签名文件路径.jks -alias 签名别名
- 调试构建:如果使用自定义调试签名,需确保其SHA-1已添加到API密钥限制;默认调试签名可通过Android Studio的
- 确认
defaultConfig中的applicationId和Google Cloud配置的包名完全匹配
4. 设备端Google Play服务调试
- 测试设备上进入设置→应用→Google Play服务→存储,清除缓存和数据后重启设备,再重新安装APK
- 确保设备上的Google Play服务为最新版本,旧版本可能存在兼容问题
5. 依赖兼容性检查
- 确认项目
app/build.gradle中的compileSdkVersion不低于31(google_maps_flutter:^2.4.0的推荐配置) - 可尝试升级google_maps_flutter到最新稳定版,避免旧版本的已知bug
验证步骤
- 调试模式下,确认API密钥已添加调试SHA-1,运行后查看日志是否仍有异常
- 生成发布APK前,将发布签名SHA-1添加到API密钥限制,重新构建APK并安装测试
内容的提问来源于stack exchange,提问作者Rafael Vizcaino
相关产品推荐
相关产品推荐

