如何构建使用Xamarin.Forms.Maps的Android项目?及NuGet安装后错误解决
我来一步步带你完成这个流程:
第一步:确认解决方案结构
你已经有了基于.NET Standard 2.0的Xamarin.Forms共享项目,以及对应的Android平台项目,这是基础结构,没问题。第二步:安装NuGet包
在解决方案级别打开NuGet包管理器,给共享项目和Android项目都安装相同版本的Xamarin.Forms和Xamarin.Forms.Maps包。版本统一很重要,避免版本冲突导致的奇怪错误。第三步:配置Android项目的权限与API密钥
打开Android项目的AndroidManifest.xml文件,添加以下必要权限到文件顶部(<manifest>节点内):<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" />然后在
<application>节点内添加Google Maps API密钥的配置(你需要先在Google Cloud平台申请API密钥):<meta-data android:name="com.google.android.geo.API_KEY" android:value="你的Google Maps API密钥" />第四步:初始化地图服务
打开Android项目的MainActivity.cs,在LoadApplication(new App());之前添加初始化代码:Xamarin.FormsMaps.Init(this, savedInstanceState);第五步:在共享项目中使用地图控件
在你的XAML页面中,先添加Maps命名空间引用:xmlns:maps="clr-namespace:Xamarin.Forms.Maps;assembly=Xamarin.Forms.Maps"然后就可以添加地图控件了:
<maps:Map HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" />
遇到这种双击错误没反应的情况,咱们先从常见问题排查:
先检查NuGet版本一致性
打开解决方案的NuGet包管理器,确认共享项目和Android项目的Xamarin.Forms和Xamarin.Forms.Maps版本完全一致。如果版本不匹配,很容易触发构建错误,统一版本后再尝试构建。清理缓存并重建
右键点击解决方案,选择“清理解决方案”,然后再选择“生成解决方案”。如果还是不行,重启Visual Studio试试,有时候IDE缓存会搞鬼。手动检查AndroidManifest配置
有些情况下,NuGet包不会自动添加完整的权限或API密钥配置,按照上面第一个问题里的步骤,手动补全AndroidManifest.xml里的权限和API密钥配置,即使暂时不需要定位功能,部分版本的Maps包也要求API密钥配置才能正常构建。查看详细构建日志
双击错误没反应的话,咱们换个方式看错误:打开Visual Studio的“视图”菜单,选择“输出”,然后在输出窗口的下拉菜单里选择“生成”,这里会显示完整的构建错误信息,能帮你精准定位问题(比如缺少某个SDK组件、依赖冲突等)。删除bin/obj文件夹
手动删除共享项目和Android项目下的bin和obj文件夹,然后重新构建。这两个文件夹里的旧编译缓存有时候会导致莫名其妙的错误,清空后重新编译就能解决。检查Android SDK组件
打开Android SDK管理器,确保已经安装了Google Play Services、Google Repository,以及你Android项目目标SDK版本对应的平台组件。缺少这些依赖也会导致Maps相关的构建错误。
内容的提问来源于stack exchange,提问作者Tony

