7

我刚刚收到一个第三方身份验证库,可在我的客户端应用程序中使用。我没有收到任何文档,我正在尝试挖掘源代码并查看它是如何工作的。当我在 IntelliJ 中单击Go To -> Declaration.class on methods 时,我非常喜欢新的 Java,它会将我发送到一个文件,我在方法中看到一堆存根/* compiled code */方法。

我相当确定这在 Java 中很常见,我只是不知道要搜索什么来了解到底发生了什么。任何澄清都会很棒。

4

3 回答 3

5

这通常意味着您没有源代码,而 IntelliJ IDEA 只会显示/* compiled code */为您没有的源代码的占位符。我相信这已经改变了,IntelliJ 捆绑了一个完整的 Java 反编译器插件,并将显示反编译的源代码作为标准。

为了更好地了解发生了什么,最好的办法是接收第三方库的实际源代码。

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

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

于 2013-08-26T13:33:03.277 回答
1

你真的应该搜索/询问文档。如果该方法执行您无法从其名称中猜到的事情,那么 Javadoc 通常是无价的。否则使用反编译器,例如JD-GUI

.java 源代码由 javac 等编译器编译为.class 字节码如果极不可能产生相同的源,编译器可能会优化特定的东西和编译反编译过程。此外,所有注释都应该被删除,如果代码不是在调试模式下编译的,甚至变量名也会丢失。所以:反编译不是手工制作文档的好选择。

于 2013-08-26T13:33:18.370 回答
1

如果您的库是使用以下内容构建的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 */

于 2020-03-26T08:21:21.437 回答