这些类如何能够访问默认包(后编译)?

时间:2013-06-01 23:03:04

标签: java

这取自Minecraft的字节码。大多数jar的类都在默认包中找到,但是还有另一个包“net.minecraft.client”,它有主类(Minecraft.class)运行游戏循环,设置OpenGL等。我不喜欢没有源代码,但如果我在JD-Gui中打开Minecraft.class,它有以下导入设置:

package net.minecraft.client;

import aaa;
import aai;
import ajq;
import ajv;
import akf;
import aki;
import aqx;
import aqz;
import ara;
import arb;
... (many more classes from the default package)

public abstract class Minecraft implements Runnable, mc {
...
}

这是如何工作的?假设我有一个具有类似设置的文件夹(需要由其他软件包访问的默认类),并希望使用批处理文件对其进行编译。什么编译方法可以复制这个结果?

1 个答案:

答案 0 :(得分:3)

  

这取自Minecraft的来源。

我不这么认为。 (编辑:编辑这个问题是为了制作这个"字节码" - 这没有多大意义,因为字节码不是Java源代码。无论如何......)

  

这是如何运作的?

从根本上说,它并非如此。您在JD-Gui中查看的代码不是原始源代码 - 它代码字节代码的代码与JD-Gui能够管理的代码一样准确。

我强烈怀疑原始源代码 使用包,但后来使用某种类型的混淆器重命名类并将它们放在默认包中。我强烈怀疑这不是唯一一种留下有效字节码的变化,它实际上不能直接从有效的源代码编译。 (例如,我强烈怀疑有些方法名在字节码中有效,但在源代码中没有。)

  

假设我有一个具有类似设置的文件夹(需要由其他软件包访问的默认类),并希望使用批处理文件对其进行编译。什么编译方法可以复制这个结果?

你不会。您已经使用包设置了源代码(如同所有理智,非平凡的Java代码一样),编译它然后对字节码进行后处理。