| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 我有一个第三方 jar 包,咋们一起修改 class 文件吧 -> 正文阅读 |
|
[Java知识库]我有一个第三方 jar 包,咋们一起修改 class 文件吧 |
你有遇到适用的场景吗你有没有遇到需要修改 class 文件重新打包的场景呢? 巧得很,最近刚好遇到需要修改一个已存在的 jar 包,为了满足自己的需求, 不过对于 class 文件修改的是比较简单的字符常量,尚未涉及到比较复杂的逻辑, 用于记录一下如何修改,如何快速修改完成需求,希望可以抛砖引玉,剩下的较为复杂的逻辑修改就交给你们了 😃 比如我有这样一个修改 class 文件的场景:
此弹窗代码是在某第三方 jar 包里,显示内容格式是: 我的需求是不需要 jar 内置的固定格式(看代码其实就是字符串拼接),我需要去掉
那么想要实现这个,我想到的是通过修改 jar 包,去除显示格式 这里简单记录两种修改方式
稍微温故 jar 命令
将 folder/ 目录下的所有文件打包成 classes.jar 文件
工具下载方式一:javac 命令1、使用 JD-GUI 打开 jar 文件并导出 java 代码,对代码进行修改 2、使用 javac 命令
实际操作过程中直接执行该命令可能往往不是自己期望的那么顺利,那么我们要对特殊情况进行特殊处理。
这里有个坑,如果打包过程有依赖 android jar,那么!!!android.jar 必须是 android sdk 目录下的 jar,不能随便找一个,否则编译失败。` 3、经过上述操作,最后使用的命令可能是这样的
例如
这就成功把 java 代码编译为 class 代码 4、把编译好了的 class 文件替换原先的文件打包成 jar
例如
到这里就打包成功了,如果遇到什么问题欢迎评论 😃 看起来操作步骤是有点繁琐。那么下面简明介绍可以快速实现的方法。 方式二:jclasslib 工具1、把 jar 包拖入工具中并打开指定 class 文件【也可以使用 jar 命令先解压获取 class 文件】 2、代码定位并修改(我们以开头的客服提示弹窗为例) 在原始 classes.all.dex.jar 文件中定位到 我们知道匿名实现经过编译成 class 文件之后生成单独的文件,且文件名往往带有 一番查阅后定位到
JVM 相关知识我自己也要加强,不过多介绍,这里推荐一个学习地址 字节码指令 3、修改并保存 到这里,其实我们对 class 文件的修改已经完成了,省去了方法一中的 java 代码转换为 class 的操作和 jar 打包操作。 最后的最后我在想,如果想要修改更复杂的代码满足更大的需求呢?怎么办? 个人总结了一点,那就是:持续学习 比如,我对 JVM 指令掌握的不够,那我需要深入学习;我对反编译相关知识掌握不足,也需要找资源学习… 推荐一个反编译工具的下载地址: 在线破解工具包: |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 22:52:06- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |