@linux1s1s
2016-03-11T18:12:34.000000Z
字数 940
阅读 5945
2016-03
AndroidBuild
在工作中,有些第三方JAR不能满足我们的特殊需求,所以经常会有需要修改JAR的情况,这里给出基本的修改思路,然后再辅以实例。
使用反编译工具JD-GUI)打开要修改的jar包(如beforeModify.jar),找到jar包中要修改的class文件(如A.class)
打开Eclipse新建一个Java工程,并添加一个类(如A.java:该类名与A.class文件中的类名一致,所在包结构与A.class文件中的类所在的包结构一致),复制A.class文件里的全部内容到A.java,对A.java做你要的修改保存即可。补充一点,有些类通过JD-GUI查看会导致莫名的乱码或者错误,这个时候最保险的方法是通过Google Git找出相应的源码,然后复制到Eclipse中的A.java中去。
使用WinRAR解压工具打开如beforeModify.jar,找到A.class选中右键点击删除
把如beforeModify.jar导入到项目中,把项目中需要的jar包导入,导入的目的是保证项目没有报错,可以正常编译。
右键项目导出jar包(如afterModify.jar),然后用WinRAR打开afterModify.jar,找到重新编译好的A.class
用WinRAR打开beforeModify.jar,找到原来A.class文件存放的目录,把重新编译后的A.class文件拖进目录覆盖即可。
修改ant-tasks.jar,其中的DexExecTask
和ApkBuilderTask
这两个类,按照上面的思路,先建Demo项目,然后按照原先的包名路径从新生成DexExecTask
和ApkBuilderTask
两个类,然后通过Google Git找出相应的源码(也可以通过JD-GUI反编译文件,当然为了保险起见最好通过需找源码来修改),将源码放到工程中以后,一般都会报错,因为此时可能缺少依赖,我们将需要的依赖全包导入工程以后确保没有编译错误如下:
然后导出Jar,可以看到我们需要的Java文件编译后的class如下:
接下来将这些修改过的class文件直接copy到原先的JAR包覆盖即可。