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

我使用Jetbrains IntelliJ(或者如果你愿意的话,也可以使用Android Studio),我的项目是用gradle和我公司命名空间中的一些外部java库构建的。问题是很难通过槽类导航,因为我无法将文本搜索到.jar文件中或解析用法。

你知道怎么做吗?,有没有插件什么的?也许是一个技巧?

非常感谢。


答案 1

IntelliJ IDEA(截至2017.2或更高版本)知道如何反编译未附加源代码的JAR文件,也就是说,当您处于调试模式并跳入实现时。但是,这将不允许您进行全文搜索(例如查找用法)。

如果您只关心浏览 1-2 个 JAR,则可以在 IntelliJ 中手动编辑模块属性并添加源 JAR 文件(您需要从库的网站下载这些文件以及二进制 JAR)。

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

还有一种选择,在企业设置中,人们通常会设置一个工件(例如 https://www.jfrog.com/artifactory/),这是所有库及其源代码的源代码。

如果您使用一些最新的构建脚本(例如Gradle),则可以构建一个IntelliJ项目,其中所有源代码都已链接在其中。

希望这有帮助!


答案 2

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

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

允许在反编译代码中搜索的唯一方法是自己反编译(例如使用fernflower反编译,intellij想法也使用它)并附加反编译的源代码。

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


推荐