我刚刚收到一个第三方身份验证库,可在我的客户端应用程序中使用。我没有收到任何文档,我正在尝试挖掘源代码并查看它是如何工作的。当我在 IntelliJ 中单击Go To -> Declaration.class
on methods 时,我非常喜欢新的 Java,它会将我发送到一个文件,我在方法中看到一堆存根/* compiled code */
方法。
我相当确定这在 Java 中很常见,我只是不知道要搜索什么来了解到底发生了什么。任何澄清都会很棒。
我刚刚收到一个第三方身份验证库,可在我的客户端应用程序中使用。我没有收到任何文档,我正在尝试挖掘源代码并查看它是如何工作的。当我在 IntelliJ 中单击Go To -> Declaration.class
on methods 时,我非常喜欢新的 Java,它会将我发送到一个文件,我在方法中看到一堆存根/* compiled code */
方法。
我相当确定这在 Java 中很常见,我只是不知道要搜索什么来了解到底发生了什么。任何澄清都会很棒。
这通常意味着您没有源代码,而 IntelliJ IDEA 只会显示/* compiled code */
为您没有的源代码的占位符。我相信这已经改变了,IntelliJ 捆绑了一个完整的 Java 反编译器插件,并将显示反编译的源代码作为标准。
为了更好地了解发生了什么,最好的办法是接收第三方库的实际源代码。
当然,您还应该获得文档,因为阅读源代码并猜测如何使用库通常不是最好的学习方式。
第二个最佳选择是使用 IntelliJ 中的反编译器插件,它会自动反编译 Java 类文件(请注意,您的第三方库的许可证可能不允许您这样做)。这永远不会是 100% 的解决方案,但在大多数情况下,总比没有好。
你真的应该搜索/询问文档。如果该方法执行您无法从其名称中猜到的事情,那么 Javadoc 通常是无价的。否则使用反编译器,例如JD-GUI。
.java 源代码由 javac 等编译器编译为.class 字节码。如果极不可能产生相同的源,编译器可能会优化特定的东西和编译反编译过程。此外,所有注释都应该被删除,如果代码不是在调试模式下编译的,甚至变量名也会丢失。所以:反编译不是手工制作文档的好选择。
如果您的库是使用以下内容构建的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 */