描述
有時第三方j(luò)ar會和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都有,有沖突,經(jīng)排查發(fā)現(xiàn)javax.annotation:jsr250-api:1.0庫包含在hilt里,需要用exclude,但考慮到hilt注解主要核心是annotation,所以權(quán)衡下,刪除rt.jar里的annotation比較妥當(dāng)。
刪除掉jar包里部分.class文件并重新打包成jar包
一、解壓jar包
unzip xxx.jar -d 解壓后目錄
如下,解壓后放在tmpDir目錄

解壓到tmpDir目錄.png
二、刪除jar包里沖突的.class文件
如下,刪除javax里的annotation

刪除部分class文件.png
三、重新打包jar包
jar cvf 打包后.jar .//
.//表示將當(dāng)前目錄下的所有目錄的.class文件打進(jìn)jar包
如下,重新打包my.jar

重新打包jar.png

打包后jar.png