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

net8.0-android34.0的C#原生Android项目中Type com.google.gson.FieldNamingPolicy$5重复定义问题求助

net8.0-android34.0的C#原生Android项目中Type com.google.gson.FieldNamingPolicy$5重复定义问题求助

各位好,我最近在做一个基于net8.0-android34.0的C#原生Android项目,碰到个头疼的问题,想请大家帮忙支支招。

项目里我导入了几个Android库,配置是这样的:

<AndroidLibrary Update="Jars\jc3api.jar" />
<AndroidLibrary Update="Jars\jc3api-android.jar" />
<AndroidLibrary Update="Jars\commons-codec-1.6r.jar" Bind="false" />
<AndroidLibrary Update="Jars\gson-2.8.6.jar" />

结果现在编译或者运行的时候,一直弹出错误提示:Type com.google.gson.FieldNamingPolicy$5 is defined multiple times,明显是gson的相关类被重复定义了,应该是不同的jar包里面都包含了这部分代码。

我自己琢磨了几个可能的解决方向,但还没完全搞定,也想听听大家的建议:

  • 先排查所有引入的jar包:用解压工具打开jc3api.jar、jc3api-android.jar这些第三方包,看看里面是不是已经内置了com.google.gson相关的类。如果有的话,那我手动加的gson.jar就可以删掉了,避免重复引入。
  • 给冲突的jar包加排除规则:如果必须同时保留多个依赖,那可以在项目文件的AndroidLibrary配置里,给内置了gson的jar包加上排除规则,把里面的gson类排除掉。比如这样改:
    <AndroidLibrary Update="Jars\jc3api.jar">
      <Exclude>com/google/gson/**</Exclude>
    </AndroidLibrary>
    
  • 统一gson版本:如果第三方jar里的gson版本和我手动加的不一样,试着把手动引入的gson版本换成和第三方包一致的,这样类版本统一了,可能冲突就消失了。
  • 调整D8打包参数:因为net-android用的是D8来处理dex,或许可以在项目文件里配置D8的额外参数,指定优先保留某个版本的类。比如在PropertyGroup里加:
    <PropertyGroup>
      <AndroidDexTool>d8</AndroidDexTool>
      <AndroidD8AdditionalArguments>--pick-first com/google/gson/FieldNamingPolicy.class</AndroidD8AdditionalArguments>
    </PropertyGroup>
    

有没有朋友遇到过类似的问题?或者有其他更靠谱的解决办法吗?麻烦大家帮忙看看了!

备注:内容来源于stack exchange,提问作者Jesoo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 17:24:33