如果有源码,直接修改源码,重新编译;
如果没有源码,那要使用反编译工具反编译之后,再进行修改,重新编译;
替换:
最简单的方法就是:使用rar,zip,好压等解压缩工具打开jar包,直接把修改的class文件拖进去,覆盖原来的class文件。
如果没有源码,一般来说不是很把握。以下方法是针对更改一个文件的。
需要反编辑工具。
在eclipse中创建一个java工程。
在工程中引入你下载的jar
用rar打开jar文件,取出你想更改的class文件。反编辑为java文件
将反编译的java文件放入工程中,并将所需要的地方修改。
到对应的工程目录中的bin目录也,找到新编译的class文件。
用rar工具将新编译的class替换jar文件中的class文件。
如果你需要更改的文件比较多,还是找一下源码工程。
上述方法。也有可能因为反编译的不完全而不成功。
首先将你要更改的源码文件在eclipse中编译成class文件
再找到你需要更改的jar包
在桌面右键新建个文件夹把你要改的jar包ctrl+c和ctrl+v
准备好一个压缩工具(这里推荐2345好压,别问我为什么,就是好用)
选中jar包右键解压到当前文件夹下
逐层文件夹找到你要更改的class文件替换掉
最后在将你刚刚解压出来的文件选中再次压缩回zip(或者其他都可以),在右键重命名将后缀名改成jar即可
最近下了一个StatSVN代码统计工具,发现中文乱码,非常无奈!用jd-gui反编译得到了java文件,可是由于一些内部类、包、lib文件找不到,还的成项目后无法编译通过,于是想来想去,认真研究了一下jdk的源代码,看了一下String的存储结构,终于采用直接修改class文件的方法可以得到解决,而且不用再编译。后来高人指点,先将jar文件解压,把要修改的那个class文件所在包拷完全复制到某一磁盘(比如D:)根下,将要修改的class文件反编译得到的java源文件放到此class文件的同一目文件录下,进入cmd命令,切换到刚才那个磁盘(命令cd D:),然后用命令javac 目录\XXXjava,编译后,将jar中的class用编译后class文件替换即可。
比如:你要修改的testclass文件在D:/com/test/下(可能D:/com/test/下面还有很多其它class文件,不用删掉他们),则将testclass反编译得到testjava放到D:/com/test/,然后修改testjava,进入cmd,采用命令cd D:切换到D:,用命令javac com/test/testjava编译,这样就不会出现错误,完全没问题。开发过程中我们可能有修改Jar包的需求,但是Jar源码可能不在我们这边,这个时候我们可以用到 JarFilterPlugin 这个插件,这个插件可以做到编译时用我们本地类替换Jar包中的类,但是这个用法在这个插件的ReadMe中没有写,我们可以这样 *** 作
在项目顶级目录的buildgradle下添加如下内容
在模块层级buildgradle下添加如下内容,内容与 adnroid 闭包同层级
上面 skipFiles 中就是我们想要替换的类,我们还要在自己模块的 src 目录下建立和想要替换的类同路径的包目录,然后将目标类的源码拷贝到我们建立的目录下并做对应的修改,举例为每一个类增加一个打印日志的方法,然后我们再编译就会发现我们的类已经替换了Jar包中原有的类。但是这个插件有个问题,处理大项目时编译会报 invalid entry compressed size ,这是因为Jar包的拷贝方式有问题,碰到了或者有兴趣的同学可以了解一下 这里 ,报错的路径在 JarFilterPlugin/buildSrc/src/main/java/cn/nekocode/jarfilter/JarFilterTransformkt#copyAndFilterJar() 中,链接: JarFilterTransformkt
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)