Xamarin.Android添加GooglePlayServices包报指定异常求助
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

