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



我使用Jetbrains IntelliJ(或者Android Studio,如果你喜欢的话),我的项目是用gradle和一些来自我公司命名空间的外部java库构建的。问题是很难在类中导航,因为不能在.jar文件中搜索文本或解析用法。

你知道该怎么做吗?有插件之类的吗?也许是个诡计?

许多谢谢。

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

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

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

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

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

希望这对你有帮助!

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

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

唯一允许在反编译代码中搜索的方法(假设你不能在某个地方下载代码),将是自己反编译它(例如使用fernflower反编译,它也被intelllij idea使用)并附加反编译的源代码。

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

最新更新