修改Jar包源码(无需反编译工具)(文章看起来很长,其实方法超级简单!)

2023-11-14

前言:本文结合实际项目案例,介绍修改jar包源码的方式。(其中运用了一些小技巧~)
正文:
场景:在项目中用了第三方的jar包,但是jar包某个类的成员变量是private的,想将其改为public属性,以便为其赋值(源码中没有其提供简单的set方法)
问题:如下图中,源码虽然可以阅读,但是根本无法进行修改。
这里写图片描述
基本思路:
编写修改好的java文件–>编译该java文件为class文件–>解压jar包–>找打待修改文件的class文件并将其替换–>压缩源码文件,并改为jar后缀格式。
那么这一整个流程下来,理论上就可以修改源码了。
实际操作:
第一次尝试(结果失败):将待修改的文件代码拷贝出来,放入到txt文档中,然后修改txt后缀为java。接着打开cmd使用javac 命令对该java文件进行编译。然后就会发现代码中引用的包找不到的错误。第一次尝试到此结束。
这里写图片描述
第二次尝试(结果成功):
上面方法肯定是不行的,因为该文件中引用了外部文件,只编译一个java文件肯定是不行。但是也不可能将其引用的文件都拷贝出来,毕竟其他文件也引用了别的文件,否则就会将整个jar包中的文件都复制出来了。
那有没有别的方法能够获得到修改后的java代码编译后的class文件呢?其实是有的!这里有个小技巧,就可以超简单的做的!
在本工程中新建一个java,与待修改的源文件同名。并且将源码中的代码拷贝在该新的java文件中,在新的文件中修改你想修改的类容(因为新文件时自己创建的,所以可以为所欲为的进行修改),然后你会发现在新的java代码中只会用一行代码错误,就是包名路径错误。
这里写图片描述
这是当然的,因为在jar包中该文件所在包中的位置和我们新建的文件在包中所在的位置是不一样的。当然我们不能将新文件的包名路径改掉,否则就算将该文件编译成功,放在jar中也是没用的。
那么既然如此,我们为何不新建一个包,使其满足该文件所需的包名路径呢?
例如上图中,源码文件中导的包名路径是com.android.pc.ioc.app。我们就在项目中新建这些包,然后将该新的java文件放置其中即可。
这里写图片描述
我们可以看到这时候,新的java文件就没有导包上的错误了。
这里写图片描述
接下来的工作就简单了,利用编译器将整个工程编译。自然就可以获得到新java文件的class文件!
这里写图片描述
然后我们就可以回到刚才的主线上了:
编写修改好的java文件–>编译该java文件为class文件–>解压jar包–>找打待修改文件的class文件并将其替换–>压缩源码文件,并改为jar后缀格式。
随后解压该jar包,替换目标class文件,再次压缩回为jar文件即可!大功告成!
(Tips,在最后一步,压缩为jar文件时要选中两项文件后右键压缩,否则导入到工程后会出现包名找不到的错误,也不能在图中文件夹外部文件夹进行压缩,至于压缩jar包的文件名就没什么要求,可以随意取)
这里写图片描述

总结:本文中的描述方法的关键就是在编译器下通过新建包名对目标文件进行编译。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

修改Jar包源码(无需反编译工具)(文章看起来很长,其实方法超级简单!) 的相关文章

随机推荐

  • 【进制转换】二进制,十进制,八进制,16进制

    1 二进制与十进制相互转换 二进制转为十进制 0000 0110转换为10进制 二进制里面没有 个位 十位 百位 只能通过从左到右或者从右到左第几位来描述 从右往左开始 第一位是0 进制的基数是2 那么就是0 20 第二位是1 就是1 21
  • 如何实现数据可视化分析?有这个解决方案就够了

    在这个数据呈爆炸式增长的时代 每天都有海量数据在产生 如何通过简单的方式实现业务上的分析 计算 交互 并最终呈现出可视化的分析结果 帮助业务人员更好地理解数据的价值 将数据变现 是当前众多企业都需要面对的问题 想要直观准确地从不同领域中的数
  • XGBOOST算法Python实现(保姆级)

    摘要 XGBoost算法 eXtreme Gradient Boosting 在目前的Kaggle 数学建模和大数据应用等竞赛中非常流行 本文将会从XGBOOST算法原理 Python实现 敏感性分析和实际应用进行详细说明 目录 0 绪论
  • sqlite3加密支持

    sqlite3加密支持 sqlite3免费版并不支持加密 不过留有接口 有不少开源的加密实现 不过有的需要使用openssl配置略显繁琐 不过使用wxsqlite比较方便 wxSqlite3 wxSqlite3是wxWidgets的扩展组件
  • 声笔飞码超字模式效率分析

    声笔飞码超字模式效率分析 2 keys 672 items 405280396 00 times covering 72 48 2 keys 672 items 405280396 00 times covering 72 48 3 key
  • SVM(2)从原始问题到对偶问题的转换

    S VM的水真是太深了 只能一点一点的解决了 今天这篇博客简单讲解SVM的目标函数从原始问题到对偶问题的转换 在这里再给大家一个大牛的博客链接 http blog pluskid org p 685 1 转化对偶问题 上篇博客中我们得到的目
  • 计算机无法访问指定设备路径或文件怎么回事,window无法访问指定设备 路径或文件是怎么回事...

    近日许多用户在咨询小编说自己的电脑在打开某些程序的时候 就出现提示window无法访问指定设备 路径或文件 从而导致程序的无法正常运行 许多用户对此也都不知该从而下手 非常烦恼 那么window无法访问指定设备 路径或文件怎么解决呢 下面小
  • UGUI内核大探究(九)Image与RawImage

    Image组件是UGUI里最常用的组件 可能没有之一 我们知道其实还有一个RawImage组件 那么二者的区别是什么呢 之前的文章UGUI内核大探究 八 MaskableGraphic中我们提到过 二者 连同Text 都继承自Maskabl
  • ES的java接口调用异常信息:java.lang.RuntimeException: Request cannot be executed; I/O reactor status: STOPPED

    我的处理方法是重启了连接ES的服务接口 我专门写的一个供APP调用的服务 这个服务去连接ES 出现了这个错误 估计还是客户端连ES的出了问题
  • 【蓝桥杯】带分数

    题目 100可以表示为带分数的形式 100 3 69258 714 还可以表示为 100 82 3546 197 注意特征 带分数中 数字 1 9 分别出现且只出现一次 不包含 0 类似这样的带分数 100 有 11 种表示法 输入格式 一
  • 一起学Vue3源码,实现最简Vue3【07】 - 实现 isReactive 和 isReadonly

    实现 isReactive 和 isReadonly 什么是isReactive isReadonly 即判断一个对象是否是reactive或者readonly reactive spec ts import isReactive reac
  • 关于模板类重载流operator<<

    关于模板类重载流operator lt lt template
  • 机器学习之逻辑回归算法笔记

    逻辑回归是一种用于解决分类问题的机器学习方法 它是一种基于概率思想的预测分析技术 分类算法 Logistic 回归用于预测分类因变量的似然性 逻辑回归中的因变量是二进制变量 数据编码为 1 是 真 正常 成功等 或 0 否 假 异常 失败等
  • C++ 类的构建,继承,派生上的小细节

    自己从C过渡到学C 的时候 对于面向过程和面向对象两种编程思想一直模模糊糊分不清楚 所以花了很大的功夫 侧面说明我可能不适合编程 为了提醒 也是为了做一点小总结 特意总结了一些学习的时候发现的易错点 一 类在声明的时候 必须要写清priva
  • UCOS-III 互斥量

    互斥量 一 互斥量基本概念 二 互斥量优先级继承机制 三 互斥量应用场景 四 互斥量运作机制 五 互斥量创建流程 1 定义互斥量 2 创建互斥量 六 互斥量接口函数 1 创建互斥量函数OSMutexCreate 2 删除互斥量函数 OSMu
  • VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tupl

    VisibleDeprecationWarning Creating an ndarray from ragged nested sequences which is a list or tuple of lists or tuples o
  • VS2015创建C语言工程

    http blog csdn net hao134838 article details 53142442 foxhandler RssReadRenderProcessHandler 引言 之前我们在完成C语言工程的时候都是在VC 6 0
  • 【数字音频】采样率、声道与采样深度

    前言 最近因为项目需要 接触了一些简单的数字音频知识 内容来源于网络 百度百科及相关博客 这里做一个简单的记录 方便以后查阅 1 采样率 采样频率 也称为采样速度或者采样率 定义了每秒从连续信号中提取并组成离散信号的采样个数 它用赫兹 Hz
  • uni app 调用网络打印机_Taro 和 uni-app选型对比

    一 Taro和uni app的介绍 1 taro的介绍 taro是多端统一开发框架 支持用 React 的开发方式编写一次代码 生成能运行在微信 百度 支付宝 字节跳动小程序 H5 React Native 等的应用 2 uni app的介
  • 修改Jar包源码(无需反编译工具)(文章看起来很长,其实方法超级简单!)

    前言 本文结合实际项目案例 介绍修改jar包源码的方式 其中运用了一些小技巧 正文 场景 在项目中用了第三方的jar包 但是jar包某个类的成员变量是private的 想将其改为public属性 以便为其赋值 源码中没有其提供简单的set方