替换jar包中class文件
|
一、背景
在使用血氧仪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 |