开发过程中我们可能有修改Jar包的需求,但是Jar源码可能不在我们这边,这个时候我们可以用到JarFilterPlugin这个插件,这个插件可以做到编译时用我们本地类替换Jar包中的类,但是这个用法在这个插件的ReadMe中没有写,我们可以这样操作
引入JarFilterPlugin
在项目顶级目录的build.gradle下添加如下内容
buildscript {
repositories {
maven {
url "https://jitpack.io"
}
}
dependencies {
classpath 'com.github.nekocode:JarFilterPlugin:1.1'
}
}
在模块层级build.gradle下添加如下内容,内容与 adnroid
闭包同层级
apply plugin: "jar-filter"
jarFilter {
skipFiles = [
'android/arch/lifecycle/LiveData.class',
'android/support/constraint.class'
]
}
上面skipFiles
中就是我们想要替换的类,我们还要在自己模块的src
目录下建立和想要替换的类同路径的包目录,然后将目标类的源码拷贝到我们建立的目录下并做对应的修改,举例为每一个类增加一个打印日志的方法,然后我们再编译就会发现我们的类已经替换了Jar包中原有的类。但是这个插件有个问题,处理大项目时编译会报invalid entry compressed size
,这是因为Jar包的拷贝方式有问题,碰到了或者有兴趣的同学可以了解一下这里,报错的路径在JarFilterPlugin/buildSrc/src/main/java/cn/nekocode/jarfilter/JarFilterTransform.kt#copyAndFilterJar()
中,链接:JarFilterTransform.kt
注:发现另一个类似的库 ExcludeAar, 在大项目中表现更好(404了 可以根据名字找一下)