-
Eclipse中怎样修改jar包的源码并将原jar包替换
2020-11-27 10:57:39在某Java Application中,所引用的lib下的某jar包,知道其源码,怎样修改其源码,然后将项目中的jar包替换为修改后的jar包。 注: 博客主页:https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿...场景
在某Java Application中,所引用的lib下的某jar包,知道其源码,怎样修改其源码,然后将项目中的jar包替换为修改后的jar包。
注:
博客主页:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。实现
如下图
下面项目所引用的jar包的源码项目在上面,怎样修改上面的源码并将下面的jar包替换。
首先找打上面源码中要修改的地方,这里添加了一行日志的输出
然后在此源码项目上右击-Export,将其导出为jar包,如果此源码没有引用其它第三方的jar包,则将其直接导出为jar包即可。
如果有引用的第三方的jar包,除了添加配置文件的方式,还可以使用Fat jar插件打包。
Eclipse安装低版本4.3并安装FatJar打包插件来打包引用第三方jar包的项目成jar包:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/110123747
可以参照如上教程。
打包成功后直接将lib下的jar包替换即可。
那么就能在修改源码后看到输出修改后的内容。
-
如何修改jar包里的文件
2018-07-27 16:02:32之前也曾遇到过修改jar包文件的问题,但是在解决之后没有把解决方法记录下来,今天有再一次遇到此类问题,在...修改图中圈起来的jar中的一个文件,文件路径为:catalina.jar\org\apache\catalina\util,例如下图中...之前也曾遇到过修改jar包文件的问题,但是在解决之后没有把解决方法记录下来,今天有再一次遇到此类问题,在网上找到很多解决的例子,但是都是比较麻烦的。
在这里,我就以修改Tomcat中的一个jar文件为例:
修改图中圈起来的jar中的一个文件,文件路径为:catalina.jar\org\apache\catalina\util,例如下图中圈起来的文件
修改方法:
首先把jar文件解压;
然后找到要修改的文件,用记事本或其他的编辑器打开,并在需要修改的地方进行修改;
保存文件,把解压出来的文件重新压缩打包;
把压缩包的后缀改为.jar。
-
修改AAR和Jar中class文件
2021-01-26 19:28:11前言 最近帮助同事解决了一个比较棘手的问题,一路采坑的过程比较有意思。...调试发现H5中使用原有的协议格式调用新协议,无法触发业务侧native注册的新协议的日志和断点。 怀疑原有的协议格式问题,当.前言
最近帮助同事解决了一个比较棘手的问题,一路采坑的过程比较有意思。在此记录下来。(PS:主要原因是项目比较大,我们只有整个
Android
项目部分业务侧代码的开发权限。所以解决问题的一些解决问题的常规手段无法使用。)问题
需求:
Web
页面中H5
和native
交互,保存base64图片
。问题:使用现有的已经封装好的
Hybrid
协议,在最后集成测试发现部分手机无法保存成功。- 调试发现
H5
中使用原有的协议格式调用新协议,无法触发业务侧native
注册的新协议的日志和断点。
- 怀疑原有的协议格式问题,当H5使用原有协议格式调用线上已经存在的新协议发现
native
可以端调用成功,此问题排除; - 怀疑新协议中的参数问题,H5去掉新协议中的参数发现可以调用到
native
新协议实现。猜测可能是协议参数导致出的问题;- 通过断点找到触发协议调用的地方,也就是
H5
和native
数据通信的地方。发现目前Hybrid
协议使用的是native
端复写onJsPrompt
方法,拦截JavaScript
的prompt()
方法。 - 将新协议参数改回来,再次调用。断点在
native
端复写onJsPrompt
方法中发现传输的数据被截断,数据解析失败无法进行下一个转发到业务测。
- 通过断点找到触发协议调用的地方,也就是
问题点
项目中原有的
Hybrid协议
使用的复写prompt方法
作为通信的桥梁,现在遇到了**发大洪水(较大的数据)**出现了阻碍问题。解决方案选择
-
让
H5
将base64
格式的图片改为http
格式图片;图片本就是
H5
绘制出来的,再上传之后客户端再下载交互体验太差; -
我们业务侧实现自已一套的
Hybrid
协议; -
让项目的基础架构部修改现有的
Hybrid
协议;晚上发现的bug,明天就需要封测。24小时之内想要完成跨部门的基础架构的改动,很难实现。
最后我们选择的是第二种方案,自己实现一套
Hybrid
协议。解决方案实现
- 拿到
WebView
调用addJavascriptInterface
方法给H5
环境下添加JS
对象。 - 开发
JS
工具让其能按照老协议格式,调用到新的JS
通信方法。 - 将拿到的数据解析抛给原来在
onJsPrompt
方法中处理数据的包装类对象。
如果所有的项目代码我们都能改动,那么这个解决方案也就没有难点。难点在于我们现在只有这个
H5
页面的最外层的一个壳Activity
,而且封装的WebView
没有为对外暴露我们想要的方法。所以方案的第三步执行产生了问题。针对这个问题我们有两个解决方案:
- 本次通过注入
JS
对象的Hybrid
通信协议和项目原有的Hybrid
协议做两套逻辑; - 通过多次
hook
黑科技调用到原有其他类中的dispatch
方法;
如果仅仅是这样也就没有本篇文章了。
好了,啰嗦了这么久了终于开始进入正题了。不知道还有几个同学打算继续看下去。
我们可以拿到项目中所有的
AAR
文件,想着是否能通过修改源代码使之提供我们想要的API
,然后通过升级AAR
版本解决问题。好了本文的重点已经出来了修改AAR中class文件。修改AAR中class文件
方案一
先把
AAR
中的想要修改的class
删除,重新打包为新的AAR
。项目依赖新版本AAR
,然后在项目对应的包下创建一个相同的类。- 将原有的
class
文件内容反编译之后拷贝到新建的类中,直接运行。 - 将原有的
class
文件内容反编译之后拷贝到新建的类中。最后重新编译生成的class
再添加到AAR
中重新打包生成新的AAR
。
如果类被混淆过的,那么这个方案基本废掉了。因为反编译出的
class
的内容里面存在大量包和类名相同的情况,这个再编译期间无法确认本次调用时使用的类还是包。举个例子,混淆之后经常看到下面的结构。
com.xx.a com.xx.a.a
在写下面代码的时候会提示类
a
下没有类a
,而不是去包a
下找类a
。a ma = new com.xx.a.a();
方案二
根据上图就可以看出这个方案是进行切面编程。我们仅仅需要在某个类中添加一两个方法,去解决访问受限的问题。考虑到当前这个问题的难易程度我们选择
Javassist
。因为Javassist
源代码级API
比ASM
中实际的字节码操作更容易使用,无需深入了解JVM
规范也能使用。Javassist
官方文档jar
包下载地址 Github:javassist//需要添加的方法 //public void executeJSCmd(String var1) { // if (this.mActionDispatcher != null) { // Message var2 = this.mActionHandler.obtainMessage(0); // var2.obj = var1; // this.mActionHandler.sendMessage(var2); // } //} //需要操作的class的类名:com.xxx.android.web.webview.BaseWebChromeClient public class Test { public static void main(String[] args) throws NotFoundException, CannotCompileException, IOException { ClassPool classPool = ClassPool.getDefault(); // 必须将class文件放在这个工程编译后的class文件中,路径也对应起来 CtClass ctClass = classPool.get("com.xxx.android.web.webview.BaseWebChromeClient"); CtMethod newmethod = CtNewMethod.make("public void executeJSCmd(String message) { if (this.mActionDispatcher != null) { android.os.Message msg = this.mActionHandler.obtainMessage(0); msg.obj = message; this.mActionHandler.sendMessage(msg); } }",ctClass); ctClass.addMethod(newmethod); ctClass.writeFile(); } }
需要注意的是,比如我们添加的方法中涉及到了其他的类需要写全路径
android.os.Message
,而且这个类相关的jar
包也必须添加到运行环境中(也可以将这个类的class文件放着这个工程编译后的class文件目录中),否则执行时候会报一下的错误。Exception in thread "main" javassist.CannotCompileException: [source error] no such class: android.os.Message at javassist.CtNewMethod.make(CtNewMethod.java:78) at javassist.CtNewMethod.make(CtNewMethod.java:44) at com.test.pattern.Test.main(Test.java:13)
注意点
替换或者删除
jar
中的class
的时候最好不要解压然后再使用命名打包,我自己在Max
电脑上使用命令打jar
包的时候会有一个.DS_Store
文件。我使用的BetterZip
压缩&解压工具,在不解压的情况下进行jar
包中的class
的添加和删除操作非常方便。文章到这里就全部讲述完啦,若有其他需要交流的可以留言哦!!
想阅读作者的更多文章,可以查看我 个人博客 和公共号:
- 调试发现
-
如何修改jar包
2016-01-18 09:18:56场景:项目中依赖的某个jar包中有2个class文件需要修改,并需要重新打成jar包~ 网上看了下其他人的做法,自己图一时省力是这么做的:~ 1. 用jd-gui工具打开jar包,保存成rar格式,解压出来就是java文件,直接...场景:项目中依赖的某个jar包中有2个class文件需要修改,并需要重新打成jar包~
网上看了下其他人的做法,自己图一时省力是这么做的:~
1. 用jd-gui工具打开jar包,保存成rar格式,解压出来就是java文件,直接修改;
2. 因为要修改的类文件依赖其他类,不方便单个编译,所以其整个java目录放到eclipse中(建个package),确保不报红,编译ok就行了,
3. 将那2个java文件对应的class 拖到rar中替换原来的那2个class文件,ok了
-
java 图片jar_java中 图片生成缩略图----Thumbnailator.jar
2021-02-28 13:49:32场景一:图片尺寸不变,修改图片文件类型使用:Thumbnails.of("F:\\image\\IMG_20131229_114806.png").scale(1f).outputFormat("jpg").toFile("F:\\image\\output\\IMG_20131229_114806");说明:outputFormat:输出... -
关于jar和aar中修改其中class字节码
2019-08-22 21:10:22总有jar和aar中修改其中class字节码的需求,之前想直接用压缩工具解压缩,直接用javasist写代码修改,...看看效果图吧(修改classes.jar后可以被识别的aar) 借助了https://github.com/BryanSharp/hibeaver 中对ja... -
分享mybatis的jar包加载到java项目中并学会修改官方mybatis-config.xml的配置文件
2019-11-19 15:47:142.在eclipse中的java项目中新建一个lib目录,将mybatis-3.5.2.jar复制到lib目录下再将图片中的lib目录打开将里面所有的jar包复制到java项目的lib目录下。 3.再将mysql-connector-java-5.1.48.jar导入java的lib目录... -
通过反编译修改jar,实现新增需求
2020-05-28 17:20:02通过反编译修改jar,实现新增需求需求描述修改流程最后 需求描述 在公司云服务器上部署的平台,管理端和操作端的操作日志模块,列表中增加显示客户端的请求IP。 如图,很简单。 一开始产品那边告知程序是2.4.0版本的... -
实现修改、添加jar包内的方法
2018-06-26 13:12:51本文中以dom4j.jar包为例,上一遍文章中写到,xml、map多层的相互转换,我就把该方法的类直接添加到dom4j里面,可以通过dom4j.jar包直接调用到自定义的类的方法,即把自己的方法封装到dom4j里面。把自定义的方法编译... -
百度ueditor修改版jar包
2019-03-07 15:10:37最近项目集群部署需要将上传的文件都放在文件服务器,正常的上传、下载都已经通过程序处理,但是发现凡是用富文本控件ueditor中上传的图片都无法处理,目前该控件仅支持上传到项目路径下。网上搜索后,发现很多人也... -
谈谈搜索JAR包里的图片文件
2010-09-04 23:22:00我们做移植的,尤其是做渠道移植的,经常会遇到一个...2,如果图片是包含于JAR里的某些资源文件中的,这样的话我们就得花点功夫来搜索并替换的。我自己写了个算法,用来搜索,替换jar包里无法直接替换的图片。原理: -
IDEA 怎么修改maven项目依赖jar的存放位置
2018-06-14 15:02:371、在idea中如图点击file-settings...3、在Local repostitoty 那行的末尾勾选 Override单选框 并且选择jar包存放路径 4、点击Apply 保存 ----------------------------------------------------2018年9月4日-----... -
java中的命令_Java中jar命令详解
2021-02-12 13:24:51做项目的时候我们肯定接触过很多jar包,那么jar包是什么呢?笔者了解到jar是java archive file 的简写。从名字就可以知道,它的应用与Java息息相关。...在命令行中键入jar命令之后,就会出现下图。里面详细的介绍了jar命... -
修改后的 fckedit.jar
2007-07-04 22:49:27web.xml 中配置 完善了对上传图片的验证 <context-param><br> <param-name>FCKAllowedExtensionsImage</param-name><br> <param-value>jpg|gif|jpeg|png|bmp </param-value><br> </context-param><br> ... -
SSM框架修改资料中实现图片上传功能
2018-08-25 17:38:43优化了添加图片时在当前页面的预览 ...第一步:当然是需要加入必要的两个jar包 commons-fileupload-1.3.jar、commons-io-1.2.jar 或者引入依赖: <dependency> <groupId... -
springboot项目打包部署时把静态资源打包到jar中、或修改静态资源根目录
2017-06-16 15:00:09如果想打包时静态资源也打包到jar中,springboot默认静态资源存放目录为static中,如图 当我们引入一个js或css时,如果使用绝对路径、static默认是不计入路径的、如下图 当前目录引入css绝对路径时应该 -
java中jar的命令详解
2014-09-09 10:24:14做项目的时候我们肯定接触过很多jar包,那么jar包是什么呢?笔者了解到jar是java archive file 的简写。从名字就可以知道,它的应用与Java息息相关。...在命令行中键入jar命令之后,就会出现下图。里面详细的介绍了 -
修改从Maven中心仓库下载到本地的jar包的默认存储位置及远程仓库
2019-09-24 02:25:19从Maven中心仓库下载到本地的jar包的默认存放在”${user.home}/.m2/repository”中,${user.home}表示当前登录系统的用户目录(如"C:\Users\gacl"),如下图所示: Jar包存放在这个位置不太好,我们希望能够... -
Maven学习总结(三):修改从Maven中心仓库下载到本地的jar包的默认存储位置
2018-12-13 11:39:00从Maven中心仓库下载到本地的jar包的默认存放在”${user.home}/.m2/repository”中,${user.home}表示当前登录系统的用户目录(如"C:\Users\gacl"),如下图所示 Jar包存放在这个位置不太好,我们希望... -
关于 UEditor 调用自定义上传方法,并jar包部署到分布式环境中图片回显问题
2020-05-27 15:40:08最近遇见UEditor 在开发环境能够正常图片上传回显,但是jar包部署到linux环境图片无法上传回显问题。 这里只是本人调通能够正常使用,现在只展示修改内容,...修改index.html 中 ueditor 上传图片调用的方法, 这里直. -
java 命令 jar_Java中jar命令详解
2021-02-12 12:57:19做项目的时候我们肯定接触过很多jar包,那么jar包是什么呢?笔者了解到jar是java archive file 的简写。从名字就可以知道,它的应用与Java息息相关。...在命令行中键入jar命令之后,就会出现下图。里面详细的介绍了jar命... -
java.jar_java中jar命令详解
2021-02-27 08:24:05做项目的时候我们肯定接触过很多jar包,那么jar包是什么呢?笔者了解到jar是java archive file的简写。从名字就可以知道,它的应用与Java息息相关...在命令行中键入jar命令之后,就会出现下图。里面详细的介绍了jar命令... -
修改Jar包源码(无需反编译工具)(文章看起来很长,其实方法超级简单!)
2016-11-01 19:26:00前言:本文结合实际项目案例,介绍修改jar包源码的方式。(其中运用了一些小技巧~) 正文: 场景:在项目中用了第三方的jar包,但是jar包某个类的成员变量是private的,想将其改为public属性,以便为其赋值(源码... -
利用asm对jar进行修改
2018-10-19 17:40:47有些时候,需要对jar进行修改,并加入一些“自定义”的代码,利用asm工具就可以到。 二.流程图 三.操作 步骤1,2 直接跳过了,这里从步骤3开始讲。首先需要Idea中安装一个插件Asm byteCode outline,这个工具可以... -
reportng的jar包
2017-09-20 17:20:27reportng的jar包,因为官网的reportng包不支持中文,在网页中显示的中文会乱码。官网的显示比较简单,修改后的jar包支持中文并增加了饼状图。 -
百度ueditor修改版jar包使用及下载
2019-03-07 15:15:31最近项目集群部署需要将上传的文件都放在文件服务器,正常的上传、下载都已经通过程序处理,但是发现凡是用富文本控件ueditor中上传的图片都无法处理,目前该控件仅支持上传到项目路径下。网上搜索后,发现有人也... -
ftp maven 依赖jar包_加快maven中jar包的下载速度,maven镜像收集
2021-01-14 12:24:37maven下载jar包的默认仓库是http://my.repository.com/repo/path速度较慢,通过配置国内镜像...选择Maven下的User Settings 如图找到User Settings路径中的settings.xml文件2、修改配置文件OSC的MAVEN已经关闭了阿... -
IDEA中JAR打包
2018-10-30 14:46:10结果打成的JAR执行后提示——XXXX.jar中没有主清单属性。以防遗忘解决办法,在此处记一下。 点击如图所示选项 在弹出的选项框中选择项目的Main Class,最主要的一步是将默认的Directory for META-INF/MANIFEST.... -
Java中jar命令详解
2019-09-29 22:12:55做项目的时候我们肯定接触过很多jar包,那么jar包是什么呢?笔者了解到jar是java archive file 的简写。从名字就可以知道,它的应用与Java息息相关。...在命令行中键入jar命令之后,就会出现下图。里面详细...
-
MySQL 高可用工具 DRBD 实战部署详解
-
ccf
-
PRDCL:帕金森病分类器-源码
-
jQuery现状,jQuery还值得学习吗
-
conta:HerançaOO的Aprendendo como funciona-源码
-
项目经理成长之路
-
带有MoS2饱和吸收体的无源调Q开关纳秒掺fiber光纤激光器
-
零基础极简以太坊智能合约开发环境搭建并开发部署
-
Electron日志的那些事
-
【布道者】Linux极速入门
-
MySQL 备份与恢复详解(高低版本 迁移;不同字符集 相互转换;表
-
VX6.8下软件使用方法.doc
-
钛掺杂AlP体系的半金属性质和电子结构的第一性原理研究。
-
vim.safariextension:Safari的Vim绑定-源码
-
html-fundamentals-lists-images-links-dumbo-web-120919-源码
-
MySQL 函数、用户自定义函数
-
MySQL 管理利器 mysql-utilities
-
ArcGIS最短路径分析教学视频.rar
-
大功率掺-全纤维超荧光源
-
Element_Components_v2.1.0