替换jar包中class文件

  1. 虽然.jar文件是一种Java归档文件,可以使用压缩软件打开,但是并不能通过压缩软件来修改其内容,只能通过jar命令来更新文件。

一、背景

在使用血氧仪SDK时出现了问题,经过分析是在申请权限时版本不兼容导致的闪退异常,基于此我们对SDK中的一个工具类进行了代码调整并替换。

二、操作步骤

1. 获取有问题的jar包文件

将有问题的jar包下载到本地,比如叫:EoxSDK-v1.0.1.jar

2. 使用IDEA自带的反编译插件(Jadx Class Decompiler)

将jar包反编译得到类文件,然后创建一个java文件将文件内容复制进去

注意:java文件所在的包名要和你要修改的类所在的包名一致,才能完成替换。

3. 修改有问题的部分并编译

对有问题的部分进行代码修正。

修正完成后编译得到一个正确的class文件

4. 替换jar包的class文件

这里将拷贝出的类文件按原目录创建好并放在与EoxSDK-v1.0.1.jar同级。如下图



执行命令替换class文件

jar -uvf com-business-1.0.jar com/business/service/tool/util/IgnoreSSLUtils.class

三、jar命令帮助

参数列表

名称说明
-c创建一个jar包
-t显示jar中的内容列表
-x解压jar包
-u添加文件到jar包中
-f指定jar包的文件名
-v生成详细的报造,并输出至标准设备
-m指定manifest.mf文件
-0产生jar包时不对其中的内容进行压缩处理
-M不产生所有文件的清单文件(Manifest.mf)
-i为指定的jar文件创建索引文件
-C表示转到相应的目录下执行jar命令,相当于cd到那个目录,然后不带-C执行jar命令

1. 查看.class文件具体路径

查看要替换的.class文件在xxx.jar包中所在的具体路径,命令如下:

 jar -tvf archive-manage-service.jar | grep PigeonholeCaseInfoSynHandlerImpl.class

2. 解压指定的class文件

将xxxdemo.jar中指定的.class解压出来,命令如下:

jar -xvf archive-manage-service.jar  BOOT-INF/classes/cn/com/chnsys/handler/impl/PigeonholeCaseInfoSynHandlerImpl.class

3. 替换class文件

将替换后的.class重新打进xxxdemo.jar中,命令如下:

jar -uvf archive-manage-service.jar  BOOT-INF/classes/cn/com/chnsys/handler/impl/PigeonholeCaseInfoSynHandlerImpl.class

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值