Flutter-使用google_maps_flutter插件时由于权限错误导致构建失败

时间:2019-02-22 08:36:03

标签: flutter maps

我已经使用一段时间google_maps_flutter插件了,更新项目和插件版本以支持AndroidX之后,从Android目录运行./gradlew build时,构建失败。

颤振摘要:

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel master, v1.2.2-pre.51, on Mac OS X 10.14.3)
[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[✓] iOS toolchain - develop for iOS devices (Xcode 10.1)
[✓] Android Studio (version 3.3)
[✓] IntelliJ IDEA Community Edition (version 2018.1.6)
[✓] VS Code (version 1.30.2)
[✓] Connected device (1 available)

其他信息:

google_maps_flutter version: 0.2.0+3
compileSdkVersion 28
minSdkVersion 21
targetSdkVersion 28

错误:

.../.pub-cache/hosted/pub.dartlang.org/google_maps_flutter-0.2.0+3/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java:419: 
Error: Missing permissions required by GoogleMap.setMyLocationEnabled: 
android.permission.ACCESS_COARSE_LOCATION 
or android.permission.ACCESS_FINE_LOCATION [MissingPermission]
googleMap.setMyLocationEnabled(myLocationEnabled);

我已经声明了必要的权限,所以我不确定为什么会失败。


当前解决方法:我注意到google_maps_flutter plugin manifest的清单未声明这些权限,因此我在本地复制了一个版本,添加了权限,现在可以构建了。

有人知道插件的清单是否也需要声明权限吗?我不知道为什么以前没有这个问题现在会成为问题

1 个答案:

答案 0 :(得分:0)

有趣的是,这些权限没有添加到插件的清单中,因此只有使用该功能的应用才会在自己的应用清单中包含该权限。 您可以在以下示例应用程序中查看如何完成此操作:https://github.com/flutter/plugins/blob/0223a65a86c14f38de56c03f294235ad3536b1fb/packages/google_maps_flutter/example/android/app/src/main/AndroidManifest.xml#L5

我们错过了Gradle运行此检查的部分,如果缺少权限,则构建失败,我提交了https://github.com/flutter/flutter/issues/28339来解决此问题。