You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin.Android添加GooglePlayServices包报指定异常求助

解决Xamarin.Android中java.lang.illegalargumentexception: already added okhttp3/Address异常

这个问题我之前帮同行排查过,本质是OkHttp3库的重复引用冲突——你安装的XBindings.MapboxLocationLayer.Droid和Xamarin.GooglePlayServices.*系列包都依赖了OkHttp3,但要么版本不统一,要么被重复打包,导致Android构建时抛出重复类的错误。下面是几个亲测有效的解决步骤:


1. 检查并统一OkHttp3依赖版本

先打开项目的NuGet包管理器,看看已安装的包里哪些依赖了OkHttp3:

  • 找到Xamarin.Android.OkHttp或者Square.OkHttp3相关的包,确保所有依赖它的库用的是完全相同的版本。
  • 如果发现版本不一致,试着把它们都升级/降级到同一个稳定版本(比如找一个Mapbox和Google Play Services都兼容的版本,优先选较新的兼容版)。

2. 强制指定OkHttp3版本

如果NuGet自动解析的版本还是混乱,可以手动在.csproj文件里加强制绑定,让所有引用都指向同一个版本:

<ItemGroup>
  <PackageReference Include="Xamarin.Android.OkHttp" Version="4.9.3" />
  <!-- 把版本号换成你要统一的那个 -->
</ItemGroup>

改完后先清理解决方案(Build > Clean Solution),再重新生成(Rebuild Solution)试试。

3. 排除重复的依赖引用

对于XBindings.MapboxLocationLayer.Droid或者Xamarin.GooglePlayServices包,可以通过NuGet的依赖排除功能,去掉它们自带的OkHttp3引用,转而用你统一好的版本:
在.csproj里修改对应的PackageReference,加上排除规则:

<PackageReference Include="XBindings.MapboxLocationLayer.Droid" Version="你的包版本号">
  <ExcludePackageReferences>
    <ExcludePackageReference Include="Xamarin.Android.OkHttp" />
  </ExcludePackageReferences>
</PackageReference>

记得把你的包版本号换成你实际安装的Mapbox包版本。

4. 彻底清理构建缓存

有时候旧的构建缓存会残留重复类,导致问题反复出现,按以下步骤清一遍:

  • 先在Visual Studio里点Build > Clean Solution清理解决方案
  • 删除项目目录下的bin和obj文件夹
  • 删除用户目录下的%localappdata%\Xamarin缓存文件夹
  • 重启Visual Studio再重新生成项目

5. 换成Mapbox官方Xamarin包

你现在用的XBindings.MapboxLocationLayer.Droid看起来是非官方的绑定包,这类包经常会有依赖管理不规范的问题。建议换成Mapbox官方提供的Xamarin.Android包:Mapbox.MapboxSdk和Mapbox.MapboxServices,官方包的依赖兼容性做得更好,和Google Play Services冲突的概率会低很多。


如果以上方法都试过还是不行,可以试试创建一个全新的空白Xamarin.Android项目,先装Xamarin.GooglePlayServices.Base,再逐步安装Mapbox相关包,这样能排查出到底是哪个包引入了冲突的OkHttp3版本。

内容的提问来源于stack exchange,提问作者Rasmus Pedersen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:22:06