从.jar文件中提取源代码

207
有没有一种方法可以从可执行的.jar文件(Java ME)中提取源代码?

3
但请注意,这样做可能会违法,这取决于您是否拥有该 jar 的版权、您居住的国家和您这样做的目的。 - Richard
2
如果是开源的,可以从开发人员那里获取源代码。否则,“任何遵守最终用户许可协议将不胜感激”。 - Andrew Thompson
检查Procyon反编译器。下载它的jar文件以反编译jar文件。我已经在下面给出了步骤。 - nitin angadi
11个回答

167

使用JD GUI。打开应用程序,将JAR文件拖放到其中。


9
有没有一种不用JD GUI就能从.jar文件获取源代码的方法? - Zulqurnain Jutt
@ZulqurnainJutt 使用 @elachance 的回答中提到的 jar xf filename.jar - Arvind Sridharan
这是最佳解决方案。 - Lawhatre

63

你可以使用以下命令解压jar文件:

jar xf filename.jar

参考资料: Oracle JAR文档


24
这相当于将 filename.jar 重命名为 filename.jar.zip,然后解压它。 - Mathias Bynens
45
这并不提取源代码,而是提取已编译的源代码。 - 0xcaff
5
当jar包中含有Java文件,比如文件名通常以“-sources”结尾时,它会提取源代码。当jar包中不含任何Java源文件时,它只会提取.class文件。请注意,这是原文的翻译,我没有进行解释或改变原意。 - edwardmp

43

我相信这可以很容易地实现。你总是可以将jar文件的源文件(Java文件)提取到zip中。

获取jar文件源代码的步骤:

  1. http://techieme.in/resources-needed/下载并保存JAD到系统上的任何位置。
  2. 将要获取源代码的jar文件拖放到JAD上。
  3. JAD UI将以树形格式显示所有包结构。
  4. 点击“文件”菜单,然后选择“保存jar源代码”。
  5. 它将把源代码保存为与jar文件同名的zip文件。

希望这有所帮助。

由于某些原因链接失效,因此添加了一个链接,您可以从该链接处下载JDGUI


1
@Nitesh... 我将在我的网站上发布链接... 请从那里下载。 - dharam
4
这个链接中的版本非常好用,谢谢! - DerStrom8
保存所有源代码后,当我打开Java文件时,它显示所有行都是注释行。有没有设置可以解决这个问题? - Anand

38

如果你的JAR文件中包含源代码和javadoc,那么你只需使用jar xf my.jar命令来提取它们。

否则,你可以像adarshr的答案所提到的那样,使用反编译器:

使用JD GUI。打开该应用程序,将JAR文件拖放到其中。


21
请注意,.jar文件实际上是.zip文件,并且可以使用任何ZIP工具打开。 - Chris Nava

17

我知道这是一个老问题,但仍然认为它可以帮助某些人。

1) 进入您的jar文件所在的文件夹。

2) 将其扩展名更改为.zip。

3) 您现在可以轻松地通过双击来提取它。

注意: 我在MAC上测试过,它可以正常工作。希望它在Windows上也能正常工作。


2
@JCodex,我正在进行一个关于情感分析工具“opinionfinder”的研究项目,它的jar文件确实包含了Java和class文件。所以你的评论并不完全正确。我知道通常只会包含.class文件,但至少在这种情况下不是这样的。 - wired00
4
您的解决方案只能提取 .class 文件,而无法提取源代码。 - Carlos Sá
看起来JD-GUI是一个跨平台的工具,可以反编译代码并显示所有包中类的源代码。我在MacOS上尝试了一下,只用了一秒钟就得到了源代码。我已经安装了Java 8。你可以在http://jd.benow.ca上获取它。不确定它是否适用于大型项目。 - Carlos Sá
1
需要源代码,但你描述的方式并没有提供。 - chiragchavda.ks

9

以下步骤在你的linux机器上执行(如果你喜欢使用终端):

    cd ~
    mkdir decompiled_code && cd decompiled_code
//  download jar procyon from https://drive.google.com/file/d/1yC2gJhmLoyE8royCph5dLEncgkNZXj58/view?usp=sharing
    java -jar procyon-decompiler-0.5.36.jar /Path/to/your/jar -o .

注意:正如@Richard评论所说,“这可能违法,取决于您是否拥有该jar文件的版权,您所在的国家以及您这样做的目的。”


针对特定的类文件,您可以执行以下命令:java -jar procyon-decompiler-0.5.36.jar /Path/to/your/jar package/of/the/java/class.class > className.java - nitin angadi

6

获取jar文件源代码的步骤:

  1. http://java-decompiler.github.io/下载JD-GUI,并将其保存在计算机上的任意位置。

  2. 将要获取源代码的jar文件拖放到JD-GUI中或者打开.jar文件。

  3. Java反编译器将以树形结构显示所有包的结构。

  4. 点击“文件”菜单,选择“保存jar源代码”,它会将源代码保存为同名的zip文件。

示例:

enter image description here

我们可以使用 Eclipse IDE for Java EE Developers 来更新/提取代码(如果需要的话)。
从Eclipse中选择Import选项,然后选择您需要的Jar文件。按照下面的图片说明进行操作。

enter image description here

enter image description here


0

AndroChef Java反编译器生成非常好的代码,您可以直接在您的项目中使用...


-2
以上工具可以提取jar文件。此外还有其他工具和命令可以提取jar文件。 但据我所知,如果代码已被混淆,您无法获取Java代码。

9
最伟大的答案。 - fnc12

-6
假设您的JAR文件位于C:\ Documents and Settings \ mmeher \ Desktop \ jar中,JAR文件名为xx.jar,则在命令提示符中编写以下两个命令:
1> cd C:\ Documents and Settings \ mmeher \ Desktop \ jar 2> jar xf xx.jar

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