更新NuGet包后IMvxLocationWatcher是否存在兼容性问题?
解决Xamarin.Android + MvvmCross更新NuGet后出现的
System.MissingMethodException问题 问题根源分析
你遇到的System.MissingMethodException: Method 'Android.Gms.Common.Zze.IsGooglePlayServicesAvailable' not found错误,几乎可以确定是NuGet包版本不兼容导致的:
- 谷歌Play服务系列的Xamarin绑定包(
Xamarin.GooglePlayServices.*)内部依赖极强,版本不一致会引发方法/类找不到的问题 - 更新NuGet时,可能MvvmCross插件(比如
MvvmCross.Plugin.Location)与新版谷歌Play服务包的兼容性不匹配,毕竟Zze这类内部类的方法签名可能在新版本中被修改或移除了
分步解决方案
1. 统一谷歌Play服务相关包的版本
打开NuGet包管理器,筛选你的Android项目,找到所有以Xamarin.GooglePlayServices.开头的包(比如Xamarin.GooglePlayServices.Maps、Xamarin.GooglePlayServices.Location、Xamarin.GooglePlayServices.Base等),确保它们的版本号完全一致。
举个例子:如果
Xamarin.GooglePlayServices.Maps是120.0.1,那其他同系列的包也要改成120.0.1,不能有的是119.0.0,有的是120.0.1。
2. 对齐MvvmCross与谷歌Play服务的版本兼容性
- 如果你的MvvmCross是旧版本,尝试升级到最新稳定版(比如当前的MvvmCross 9.x系列),新版本通常会适配较新的谷歌Play服务包
- 如果升级MvvmCross有困难,那就回退谷歌Play服务包到更新前的版本——你可以在NuGet包管理器的"已安装"标签里,点击包的版本下拉框,选择之前正常工作的版本
3. 清理编译缓存并重建项目
缓存问题有时候会伪装成版本兼容错误,按以下步骤操作:
- 右键解决方案,选择「清理解决方案」
- 删除解决方案根目录下的
packages文件夹,以及每个项目下的bin和obj目录 - 右键解决方案,选择「还原NuGet包」
- 重新编译整个解决方案
4. 检查AndroidManifest.xml的必要配置
确保你的Android项目的AndroidManifest.xml中包含谷歌Play服务的版本元数据:
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
正常情况下NuGet会自动添加,但更新过程中可能意外丢失,手动补上再试试。
5. 验证设备/模拟器的谷歌Play服务状态
- 实体设备:打开Google Play商店,确保「Google Play服务」是最新版本
- 模拟器:选择带有「Google Play」标识的系统镜像,启动后打开模拟器内的Google Play商店,更新里面的Google Play服务到最新版
内容的提问来源于stack exchange,提问作者Drake
相关产品推荐
相关产品推荐

