Google Maps Flutter在AVD中报错GoogleCertificatesRslt: not allowed
解决Google Maps Flutter包在AVD中授权失败及应用冻结问题
1. 检查API密钥的限制配置
- 别在Google Cloud控制台给API密钥加太严的应用限制,比如SHA-1指纹或包名错了都不行。
- 用默认debug keystore的话,跑这个命令拿SHA-1:
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android - 把这个SHA-1和你的应用包名(比如
com.example.my_map_app)加到API密钥的Android应用限制里。
- 用默认debug keystore的话,跑这个命令拿SHA-1:
- 确认已经启用Google Maps Android API v2和Maps SDK for Android服务,在Google Cloud的API库搜一下就能启用。
2. 验证AndroidManifest.xml配置
- 确保API密钥放在
<application>标签里,格式别错:<meta-data android:name="com.google.android.geo.API_KEY" android:value="你的API密钥"/> - 必要权限不能少:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.INTERNET"/> - 别忘了加OpenGL声明:
<uses-feature android:glEsVersion="0x00020000" android:required="true"/>
3. 检查build.gradle配置
- app级build.gradle的
defaultConfig里,applicationId必须和Google Cloud控制台填的包名完全一致:defaultConfig { applicationId "com.example.my_map_app" // 其他配置... } - Maps SDK依赖用稳定版,别搞太新的测试版:
dependencies { implementation 'com.google.android.gms:play-services-maps:18.1.0' // flutter相关依赖... }
4. AVD环境修复
- 有些AVD镜像缺Google Play服务或者版本太低,直接导致授权失败:
- 创建AVD时选带Google Play的镜像(比如“Pixel 5 API 33 (Google Play)”),别选只有Google APIs的。
- 打开AVD里的Google Play,把Google Play服务更到最新版。
- 清一下应用缓存和数据:在AVD的设置-应用-你的应用-存储里,点清除缓存和数据,然后重启应用。
5. 代码层面排查
- Dart代码里别搞错误的地图初始化逻辑,比如
GoogleMap的初始相机位置不能是空的,不然容易冻住:GoogleMap( initialCameraPosition: CameraPosition( target: LatLng(37.7749, -122.4194), zoom: 12, ), onMapCreated: (GoogleMapController controller) { // 初始化逻辑别太耗时 }, ) - 地图初始化的时候别跑耗时操作,不然主线程卡了应用就冻住了。
内容的提问来源于stack exchange,提问作者MrObscure
相关产品推荐
相关产品推荐

