描述
有时第三方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目录
二、删除jar包里冲突的.class文件
如下,删除javax里的annotation
三、重新打包jar包
jar cvf 打包后.jar .//
.//表示将当前目录下的所有目录的.class文件打进jar包
如下,重新打包my.jar