Android项目引入Jar包:Duplicate class com.mediatek.twoworlds.tv.KeyMapReader found in modules

项目场景:

提示:最近在做Android Tv 系统应用开发

例如:项目场景:在LiveTv中的切换通道处添加关闭CEC功能的接口,


问题描述

问题:在引入相关的Jar包时,编译报错,具体见下图;

这两个jar包的依赖如下:

   implementation files('libs\\com.mediatek.support.factory.jar')
   implementation files('libs\\com.mediatek.tv.agent.jar')

原因分析:

2处的jar包是我导入的,1处的jar包是项目正在使用的,这是两个不同的jar包,从报错提示可以看出是两个jar包中出现的同一个类,而且相同的类有很多,上面只是截取了一部分。


解决方案:

这种报错在网上有很多相关文章,也看了几篇文章;出现这种报错原因有以下:

1.引入的不同版本的同一个jar包,这种只要把引入库了里面的 implementation 改为 compileOnly;

 这个方法不适合我的这个问题,虽然编译能通过,但是运行的时候还是报错,提示找不到类。

2.也是两个不同jar包里面有重复的类名,比如:Duplicate class xx.xx.XX found in modules xx1-1.0 (xx.xx:mm1:1.0),... and xx2-1.0 (xx.xx:mm2:1.0),可知xx1与xx2中有重复项,后面括号就是具体位置,假设保留mm1如此就可以exclude group: 'xx.xx', module: 'mm2'解决,

implementation ("org.apache.shiro:shiro-core:1.4.2") {
        exclude group: 'org.apache.shiro', module: 'shiro-lang'

     ...
    }
这是方法也试过,但是我导入的jar没有版本号,一直提示exclude

 我的解决方法是:修改jar包的内容,被重复的类文件删除,然后重新打包成jar包,引入即可

具体修改:

1.把jar包的后缀改为zip,解压后,删除里面重复的类文件,具体重复的文件要看编译报错的提示,不要误删了引发新的问题;

2.把修改后的文件重新压缩为zip,然后改为.jar格式即可;

可以参考下图:

图一

 图二

修改好jar包的内容后,重新导入到项目中,没有报错的话就说明修改成功了,

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值