java类方法存根与/* 编译代码 */

1cosmwyk  于 2023-04-28  发布在  Java
关注(0)|答案(4)|浏览(178)

我刚刚收到了一个第三方身份验证库,用于我的客户端应用程序。我没有收到任何文档,并试图挖掘通过源代码,看看它是如何工作的。当我点击IntelliJ中的方法上的Go To-〉*Declaration**时,我非常熟悉Java,它会把我发送到一个.class文件,我看到一堆stubed方法,其中包含/* compiled code */
我很确定这在Java中很常见,我只是不知道该搜索什么来了解到底发生了什么。任何澄清将是伟大的。

bbuxkriu

bbuxkriu1#

这通常意味着你没有源代码,IntelliJ IDEA只会显示/* compiled code */作为你没有的源代码的占位符。我相信现在这种情况已经改变了,IntelliJ捆绑了一个完整的Java反编译器插件,并将显示反编译的源代码作为标准。
为了更好地了解正在发生的事情,最好是接收第三方库的实际源代码。

当然,你也应该获得文档,因为阅读源代码和猜测如何使用库通常不是最好的学习方法。

第二个最好的选择是使用IntelliJ中的反编译器插件,它将自动反编译Java类文件(请注意,第三方库的许可证可能不允许您这样做)。这永远不会是一个100%的解决方案,但在大多数情况下,这比什么都没有要好。

qzlgjiam

qzlgjiam2#

你真的应该搜索/要求文档。Javadoc通常是无价的,如果方法做的事情你不能从它的名字猜到。否则使用反编译器,如JD-GUI

  • .java源代码 * 编译为 。类bytecode 由编译器,如javac。编译器可能会优化特定的东西,如果高度不可能产生相同的源代码,则编译-反编译过程。另外,所有注解都应该被删除,如果代码不是在调试模式下编译的,甚至变量名也会丢失。所以:反编译不是手工制作文档的好替代品。
tzcvj98z

tzcvj98z3#

如果你的库是用sourceFiles构建的:

task androidSourcesJar(type: Jar) {
        classifier = 'sources'
        from android.sourceSets.main.java.sourceFiles//look at this line
    }

然后,您将看到带有/* compiled code */的类
如果你的库是用srcDirs构建的:

task androidSourcesJar(type: Jar) {
        classifier = 'sources'
        from from android.sourceSets.main.java.srcDirs//look at this line
    }

然后,您将看到没有/* compiled code */的完整源代码的类

ilmyapht

ilmyapht4#

参考-https://www.jetbrains.com/help/idea/decompiler.html
在设置中启用Java Bytecode Decompiler插件。
如果这是您第一次打开已编译的文件,IDE将提示您同意“JetBrains反编译器”对话框中指定的条款和条件。如果单击Accept,则以后将不会显示该对话框,并且将自动反编译相应的代码。

之后,IDE将向您显示人类可读的Java代码,而无需进行实际转换。类文件到。java文件。
编辑器上方的黄色通知面板通知您正在阅读一个反编译文件。

相关问题