如何编辑一个 .jar 文件?

48

我有一个包含一个 .class 文件的 jar 文件。 我只需要更改文件中的一些单词。

我想要在我的手机上运行这个程序。

我应该使用什么程序?


3
你的意思是你需要修改.class文件中的一些“单词”吗?你知道这样的文件是二进制的,对吧? - Kirk Woll
5
它们只是压缩文件,可以使用任何压缩程序进行提取,如果无法直接提取,请将其重命名为“.zip”。但这并不能给你太多帮助,因为代码不在压缩文件中,Java 是一种编译语言 - 编辑.class 文件远非易事。 - Orbling
3个回答

49

我所做的如下:

  • 使用WinRAR提取文件
  • 对提取出来的文件进行修改
  • 使用WinRAR打开原始JAR文件
  • 使用添加按钮替换我的修改过的文件

就这样。我已经用我的诺基亚测试过了,它可以正常工作。


你是如何在没有编辑器的情况下编辑 .class 文件的?是否可以将 .class 转换为 .java 文件? - Christian Eric Paran
这个运行得非常好,谢谢。 - Mike
如果您想添加或更改非常少量的代码,这是一个非常好的方法。 - JamesWillett
你不能使用这种方法编辑文件。 - Caner
@Vaibhav 如果JAR文件被混淆了,我有一个a.class(1kB)和A.class(10kB),如果我按ADD修改A.class,它会破坏旧的a.class,我将有两个a.和A.类(都是10kB)。如何解决这个问题? - javierMarquez
显示剩余6条评论

27

一个jar文件是一个zip归档文件。您可以使用7zip(一个非常简单的工具来打开归档文件)来提取它。您还可以将其扩展名更改为zip并使用任何工具来解压该文件。

现在您有了类文件。没有简单的方法来编辑类文件,因为类文件是二进制文件(您不会在其中找到源代码。也许有一些字符串,但没有Java代码)。要编辑您的类文件,您可以使用类似于classeditor的工具。

您的类正在使用硬编码的所有字符串。因此,如果您想要更改的唯一内容是某些字符串,则可以在不使用classeditor的情况下进行更改。


1
如何编辑字符串,程序不允许我修改。 - user594568
1
@user:你是在使用Windows吗?用记事本打开类文件,搜索字符串,进行更改并保存。然后将类文件放回归档中。 - snakile
看起来ClassEditor在较新的Java类文件上并不总是有效。也许这是因为自2007年以来ClassEditor没有更新过?我试图在从.jar文件中提取Java类文件后编辑一个简单的常量字符串,现在Java程序运行失败,并出现了以下错误:“在加载主类时发生LinkageError...类文件中的InnerClasses属性长度错误"。 - Joseph238

4
这是一个打开Java类文件二进制文件的工具,可以查看其内部结构,如果需要,修改其中的部分并保存类文件。它还生成类似javap实用程序的可读报告。易于使用的Java Swing GUI。用户界面尽可能显示更多细节,并尝试呈现与实际Java类文件结构相似的结构。同时,在修改时强调易用性和类文件一致性。例如,当删除方法时,如果不再引用,则关联的常量池条目也将被删除。在保存文件之前,内置验证器会检查更改。此工具已被学习Java类文件内部的人使用。当源代码不可用时,此工具也用于对类文件进行快速修改。"这是网站上的一句话。 http://classeditor.sourceforge.net/

我假设你知道如何打开一个jar文件,因为你知道它只有一个类文件。 - Catalin Marin
我该如何编辑?我可以看到整个内容,但不知道如何编辑字符串。 - user594568
在Windows中,我创建了一个批处理文件,与类编辑器JAR文件位于同一目录下,其中包含start javaw -jar %~dp0ce.jar %* - Stuart Cardall

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接