Android编译时动态替换Jar包中的类

开发过程中我们可能有修改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

你可能感兴趣的:(Android编译时动态替换Jar包中的类)