美文网首页
修改Jar文件中代码

修改Jar文件中代码

作者: 放羊娃华振 | 来源:发表于2021-07-07 00:04 被阅读0次

    一、为何要修改Jar文件中代码?

    假如项目中用了一个很老的版本的jar包,现在发现有问题,但是🈶联系不到原作者修改。这种情况下,如果我嫩看懂里面的代码逻辑,也知道怎么修改,我们就可以在没有源码的情况下对jar里面的代码进行修改。
    又或者自己就是个小项目,用了牛逼哄哄的大公司的sdk,人家也不会针对你的需求进行定制化开发,这时候也可以尝试修改jar来满足我能的需求。

    二、如何操作?

    2.1、熟悉需要修改的jar的代码逻辑,可以看代码打断点啥的。
    2.2、使用jd-gui反编译jar包,通过file->Save all Sources把原始的jar代码保存成zip文件。
    2.3、解压zip文件,可以看到反编译之后的java文件代码了。
    2.4、这里的代码直接运行是有问题,你需要使用java编译器新建一个跟需要修改的jar结构一样的工程,并且修改里面的所有报错信息。
    2.5、修改你要改的的类的逻辑,假如有个方法需要修改,你就可以重新这个方法。
    2.6、重新编译修改后的工程,生成.class文件。
    2.7、切换到原始文件解压后的目录中,用2.6生成的class文件覆盖老的class文件。
    2.8、把老的jar文件、和解压的目录文件放在一起


    image.png

    2.9、执行打包成jar的命令:

    //命令的意思就是把lib_test目录下的文件归档到lib_test.jar中
    jar cvfm lib_test.jar lib_test/META-INF/MANIFEST.MF -C lib_test/ .
    

    当这个指令没有报错,就可以看到生成的新的jar了,之后反编译下,可以发现已经有新的代码了。
    最后加上jar命令的用法:

    用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
    选项:
        -c  创建新档案
        -t  列出档案目录
        -x  从档案中提取指定的 (或所有) 文件
        -u  更新现有档案
        -v  在标准输出中生成详细输出
        -f  指定档案文件名
        -m  包含指定清单文件中的清单信息
        -n  创建新档案后执行 Pack200 规范化
        -e  为捆绑到可执行 jar 文件的独立应用程序
            指定应用程序入口点
        -0  仅存储; 不使用任何 ZIP 压缩
        -P  保留文件名中的前导 '/' (绝对路径) 和 ".." (父目录) 组件
        -M  不创建条目的清单文件
        -i  为指定的 jar 文件生成索引信息
        -C  更改为指定的目录并包含以下文件
    如果任何文件为目录, 则对其进行递归处理。
    清单文件名, 档案文件名和入口点名称的指定顺序
    与 'm', 'f' 和 'e' 标记的指定顺序相同。
    
    示例 1: 将两个类文件归档到一个名为 classes.jar 的档案中: 
           jar cvf classes.jar Foo.class Bar.class 
    示例 2: 使用现有的清单文件 'mymanifest' 并
               将 foo/ 目录中的所有文件归档到 'classes.jar' 中: 
           jar cvfm classes.jar mymanifest -C foo/ .
    

    三、##AAR如何修改?
    大致分文修改classes.jar文件和布局文件,jar文件修改同上。布局文件文件修改可以参考有个大哥总结的文章:https://www.jianshu.com/p/bdb62f36bc62

    相关文章

      网友评论

          本文标题:修改Jar文件中代码

          本文链接:https://www.haomeiwen.com/subject/ozpnultx.html