今天项目中集成第三方的 aar 与 另外一个jar中的 类重复了 导致不能生成apk,如果是依赖的第三方就用exclude 排除的方式,如下:
运行 如下命令可以查看依赖
./gradlew :app:dependencies
再输入您要排除的依赖包如下
implementation('com.google.android.material:material:1.2.1') {
exclude group: 'androidx.cardview', module: 'cardview'
}
但我这里不是依赖的第三方,是包里面包含了重复的类,这里我用了jarjar工具来打包,工具下载地址:
https://code.google.com/archive/p/jarjar/downloads
下载完成后用jar 命令来运行该工具
java –jar jarjar.jar strings jar包地址
查看当前jar包中所有的类信息
jarjar的命令说明如下:
java -jar jarjar.jar process <rulesFile> <inJar> <outJar>
这里面有一个重要的东西是rulesFile,就是定义一个替换规则。injar就是指要替换的jar包,outjar就是替换完要输出的jar包,rulesFile直接用.txt文档写就行,
rulesFile有三种指令,分別如下:
1. rule用来取代Package的名称。
rule pattern result
2.zap用来移除符合名称的Package。
zap pattern
3.keep只会保留符合的Package的名称,其他的则会刪除。如果和zap一起使用,将会在zap执行完之后才执行。
keep pattern
那这里我要删除的包是:
zap com.hoho.android.usbserial.**
并保存一个txt文件。
java -jar /路径/Downloads/jarjar-1.4.jar process /规则路径/rule.txt /原路径/libs/plsyreadersdk.jar /新输出路径libs/plsyreadersdk1.jar
运行就可以生成一个删除重复包的jar文件,可以改rar文件 然后查看是否成功。