找回密码
 会员注册
查看: 19|回复: 0

一键修改JAR包内文件:JarEditor插件详细指南

[复制链接]

3

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2024-9-10 16:57:18 | 显示全部楼层 |阅读模式
背景在开发中我们有时会遇到这样的场景,需要修改jar包内某个class,常见的方法就是先解压缩,然后反编译这个class,新建java修改再编译,最后再打包,整个过程是非常耗时的。这里向大家介绍一款IDEA插件:JarEditor,可以一键修改JAR包内文件,无需解压。插件安装首先在插件商城搜索JarEditor,可直接安装插件插件使用1.修改class文件安装完后,任意打开一个jar的class,可以看到反编译后的class内容,选中JarEditor的tab页签,就可以直接编辑class了修改完代码后先点击Save,这个过程会编译class,编译成功后点击BuildJar就修改jar完成了,是不是很简单?下面是一个修改的例子。SDK可以选择需要的JDK或者其他SDK,Target为编译class的目标版本,默认是和反编译的class前的版本保持一致。附:修改外部jar选择File->rojectStructure->Libraries,然后添加工程外的jar即可打开jar内文件修改也可以将jar包粘贴到本项目中,然后右键->AddasLibrary…2.修改配置文件操作流程同修改class文件,不需要选择Compile3.JAR包内新增文件在工程视图jar包内某个文件夹上右键->JarEditor->New,可以新建Class/Kotlin/File/Directory选择后输入文件名即可在jar内新增文件,默认是空文件新增后打开可以写入内容,Class和Kotlin新建完文件是有模版的,无需后缀名,如果是JarEditor->New->File则需要写文件后缀名。3.删除JAR包内文件在工程视图jar包内某个文件或者文件夹上右键->JarEditor->Delete,则会删除选择的目录或者文件,支持多选。4.重命名文件在工程视图jar包内某个文件或者文件夹上右键->JarEditor->Rename,输入名字后即可将原来的名字修改为新的名字,修改完立即生效。5.拷贝JAR包内文件到外部文件夹在工程视图jar包内某个文件或者文件夹上右键->JarEditor->Copy,可以将jar包内文件拷贝到剪切板(支持多选)然后在外部任意一个文件夹内,使用Ctrl+V,即可将刚才复制的文件拷贝到这个目录6.粘贴外部文件到JAR包内外部文件使用Ctrl+C复制后,在jar内某个文件夹上右键->JarEditor->aste(不能直接用Ctrl+V,Ctrl+V被IDEA默认占用了),即可将剪切板的文件粘贴到jar包内,一气呵成。7.JAR包内搜索字符串工具栏有一个搜索图标,点击后输入需要搜索的字符串,可搜索到jar包内的文件,包括class和普通文件。点击搜索后的文件列表,可跳转到具体的文件搜索的class如果是classjar的话取决于反编译的内容,如果是sourcejar取决于java文本。8.sourcejar的支持IDEA内打开的jar分两种,classjar和sourcejar,如果下载了源码的话,打开的是sourcejar,即打开的是一个java文件,而不是class文件,这里一定要注意此时如果修改代码的话,生效的是sourcejar,比如这里改的是FindInstancesOfClass-1.0.3-sources.jar。那如何修改classjar呢?点击JarEditorTools上面的跳转链接:Clickheartoopenclassjar即可跳转到class文件此时展示的class为反编译的代码,可修改class文件,按修改class文件的流程操作即可。也可以从sourcejar中导入代码:ImportfromsourcejarImportfromsourcejar和直接在soucejar中的java修改的区别是:前者修改的是classjar后者是sourcejar。一些机制和原理SDK的选择目前支持java和kotlin两种文件编译,后续可能会增加更多的编译文件支持。选择SDKDefault时,是使用的IDEA运行时自带编译器,即javax.tools.JavaCompiler,详细可阅读源码。选择其他JDK时,默认使用的是javac外部命令编译。编译时选择的Target的范围是1.1~所有JDK的版本最大值。Save(Compile)考虑到可能会修改多个文件,会将当前修改的内容(编译)保存到所在jar包目录的临时目录jar名_temp/jar_edit_out下,当点击BuildJar将增量文件写入jar后,会删除临时目录,也可手动清理临时目录。编译依赖在编译时,依赖的jar为当前工程的Libraries,如果编译时提示依赖包找不到,可以添加依赖即可。另外class文件的内容取决于反编译的结果,如果混淆的代码则不太方便修改和编译。SDKDefault当选择SDKDefault编译时,对应的JDK版本如下:IDEAJDKIDEA2020.3~IDEA2022.1JDK11IDEA2022.2~IDEA2024.1JDK17IDEA2024.2及更高版本JDK21总结本文主要介绍了使用JarEditor直接对jar包文件进行增删改查操作,简化了修改jar的流程,感兴趣的朋友可以去试试。本文篇幅有限,具体原理和实现细节可阅读源码源码:https://github.com/Liubsyy/JarEditor
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-7 06:42 , Processed in 1.254921 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表