删除掉第三方jar包中的部分.class文件,并重新打包成jar
2023-01-12 本文已影响0人
HawkFlying
描述
有时第三方jar会和android引入的其它库有冲突,需要删除jar里的部分.class文件;
如我这边引入jdk1.8里的rt.jar编译时会有冲突,报错如下
ava.lang.RuntimeException: Duplicate class javax.annotation.Generated found in modules jetified-jsr250-api-1.0.jar (javax.annotation:jsr250-api:1.0) and jetified-rt.jar (rt.jar)
Duplicate class javax.annotation.PostConstruct found in modules jetified-jsr250-api-1.0.jar (javax.annotation:jsr250-api:1.0) and jetified-rt.jar (rt.jar)
Duplicate class javax.annotation.PreDestroy found in modules jetified-jsr250-api-1.0.jar (javax.annotation:jsr250-api:1.0) and jetified-rt.jar (rt.jar)
上面很明显就是javax.annotation类在javax.annotation:jsr250-api:1.0和rt.jar都有,有冲突,经排查发现javax.annotation:jsr250-api:1.0库包含在hilt里,需要用exclude,但考虑到hilt注解主要核心是annotation,所以权衡下,删除rt.jar里的annotation比较妥当。
删除掉jar包里部分.class文件并重新打包成jar包
一、解压jar包
unzip xxx.jar -d 解压后目录
如下,解压后放在tmpDir目录
![](https://img.haomeiwen.com/i17626152/d26219e3d749f2f8.png)
二、删除jar包里冲突的.class文件
如下,删除javax里的annotation
![](https://img.haomeiwen.com/i17626152/b91f5ac6a141df78.png)
三、重新打包jar包
jar cvf 打包后.jar .//
.//表示将当前目录下的所有目录的.class文件打进jar包
如下,重新打包my.jar
![](https://img.haomeiwen.com/i17626152/aaef96a2a1194b9d.png)
![](https://img.haomeiwen.com/i17626152/68b8c9105852f24c.png)