我一直在使用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的清单没有声明这些权限,因此我在本地复制了一个版本,添加了权限,我现在可以构建。
有谁知道是否预期插件的清单还需要声明权限?我不知道为什么现在这不是问题
有趣的是,这些权限未添加到插件的清单中,因此只有使用该功能的应用才会在自己的应用清单中包含权限。你可以在这里的示例应用程序中看到这是如何完成的: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来解决这个问题。