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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android编译时动态替换Jar包中的类相关的知识,希望对你有一定的参考价值。

参考技术A 开发过程中我们可能有修改Jar包的需求,但是Jar源码可能不在我们这边,这个时候我们可以用到 JarFilterPlugin 这个插件,这个插件可以做到编译时用我们本地类替换Jar包中的类,但是这个用法在这个插件的ReadMe中没有写,我们可以这样操作

在项目顶级目录的build.gradle下添加如下内容

在模块层级build.gradle下添加如下内容,内容与 adnroid 闭包同层级

上面 skipFiles 中就是我们想要替换的类,我们还要在自己模块的 src 目录下建立和想要替换的类同路径的包目录,然后将目标类的源码拷贝到我们建立的目录下并做对应的修改,举例为每一个类增加一个打印日志的方法,然后我们再编译就会发现我们的类已经替换了Jar包中原有的类。但是这个插件有个问题,处理大项目时编译会报 invalid entry compressed size ,这是因为Jar包的拷贝方式有问题,碰到了或者有兴趣的同学可以了解一下 这里 ,报错的路径在 JarFilterPlugin/buildSrc/src/main/java/cn/nekocode/jarfilter/JarFilterTransform.kt#copyAndFilterJar() 中,链接: JarFilterTransform.kt

java调用jar包中的类

在lib目录下导入了很多jar包,可是在调用其中的类的时候一部分能用,而一部分报找不到这个类,不知道是什么错误(struts2的相关jar包就可以用而sqljdbc就不可以用),请各位帮帮忙了,谢谢了
我在一个工程中加了好几个jar的包,可是struts2等几个可以用,而有的则不可以用,一直报找不到这个类。

参考技术A 你所说的不可用是哪方面的?
开发环境下的不可用,还是运行环境下的不可用?
如果是开发环境下的话,导入到当前项目的lib就可以了。
如果是运行环境的话,还要把jar包复制相关的环境中才行。
像你所说的sqljdbc包。运行时应该放置到tomcat的lib目录下(前提:你使用了tomcat的DHCP连接池)
参考技术B 请问你是不是用Eclipse做开发?
当你把jar包放到lib目录下以后,还应该在Eclipse工程中通过添加jar包的方式手动把那几个jar包添加工程中,jar包才可能生效。另外,如果一个工程中导入若干个相同的jar包,有潜在的风险,会出现一个莫名其妙的问题,所以最好相同的jar包只有一个。
参考技术C 你是不是导错了,好好看看

以上是关于Android编译时动态替换Jar包中的类的主要内容,如果未能解决你的问题,请参考以下文章

如何修改jar包里面的.class文件

27 Java动态加载第三方jar包中的类

如何替换java项目的框架jar包中的一个文件?

怎么修改jar包中的class文件然

android 导入第三方jar包,在程序中导入包中的类无效;

一个jar包,其中有个a.class和a$1.class,如何修改