使用Jetbrains IDES在反编译的jar文件中查找文本

时间:2015-08-20 11:15:54

标签: java search intellij-idea gradle dependencies

我使用Jetbrains IntelliJ(或Android Studio,如果您愿意),我的项目是使用gradle和我公司名称空间中的一些外部Java库构建的。因为我无法在.jar文件中搜索文本或解决使用问题,所以难以通过类导航。

你知道怎么做吗?有插件还是什么?可能是一招?

非常感谢。

2 个答案:

答案 0 :(得分:1)

IntelliJ IDEA(截至2017年2月或更新版本)知道如何在没有附加源的情况下反编译JAR文件,即当您处于调试模式并跳转到实现时。但是,这不允许您进行全文搜索(例如查找用法)。

如果您只需要1-2个JAR,那么您可以手动编辑IntelliJ中的模块属性并添加源JAR文件(需要从图书馆网站下载)使用二进制JAR)。

另一个选择是使用Maven,让它从公共Maven存储库下载源代码和二进制文件(如果我们正在谈论开源库)。

另一种选择,在企业环境中,有人通常会设置一个Artifactory(例如https://www.jfrog.com/artifactory/),它是所有库及其源代码的来源。

如果您使用一些最新的构建脚本(例如Gradle),您可以构建一个包含已链接的所有源的IntelliJ项目。

希望这有帮助!

答案 1 :(得分:0)

没有简单的方法可以做到这一点。在库代码中搜索任何内容的唯一方法是附加源代码。附加的源代码可以是您自己反编译的代码,但IDE不会为您执行此操作(但我认为有人可以编写反编译整个库并附加反编译源的插件)。所以我想这可能是你需要做的“技巧”。

为什么不可能?我没有写IDE,所以我不能确定原因。但很可能在没有附加源的jar文件中查找文本的问题是文本表示依赖于反编译器。没有“最好”的方法来反编译给定的类。有时反编译可能甚至是不可能的(例如,具有大量goto /条件跳转指令的字节码不能很好地转换为循环/条件结构)。在这种情况下,反编译器可以做任何事情,从抛出异常,放入原始字节码,到只是将goto语句放在java代码中,至少显示代码正在做什么。

允许搜索反编译代码的唯一方法(假设你不能只在某处下载代码),就是自己反编译(例如使用fernflower反编译,这也是intellij的想法)和附上反编译的源代码。

虽然上述参数在找到方法/字段的用法时不适用,但仍然不允许,很可能是因为IDE分析源代码以查找用法,而不是分析字节码(已编译的代码)。