项目场景:
提示:最近在做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包的内容后,重新导入到项目中,没有报错的话就说明修改成功了,