从apk恢复原始源

时间:2014-04-29 22:34:45

标签: java android apk decompiler

当我反编译我的.apk时,我看到了一些额外的文件,例如MainActivity $ 1.java,MainActivity $ 1 $ 1.java等。实际上有些文件是空的。 除此之外,还有一些代码片段多次发生,例如

this$0 = MainActivity.this;
super();

this$1 = _cls1.this;
super();

我在哪里可以阅读更多相关信息?有没有办法恢复我原来的源代码?

1 个答案:

答案 0 :(得分:4)

此代码来自内部类用Java编译的方式。

在字节码级别没有直接支持内部类。相反,您创建的每个内部类都被编译为单独的类文件,编译器生成桥接代码以允许适当的访问。

MainActivity $ 1只是MainActivity中定义的匿名类。 MainActivity $ 1 $ 1将是在该内部类中定义的匿名内部类。

第二部分是内部类的另一个实现细节。内部类的实例需要对封闭实例的引用才能访问它(因为它们只是字节码级别的普通类)。为此,编译器在内部类中生成一个隐藏字段,并在调用超类构造函数之前插入代码以初始化它(在字节码中允许但在Java中不允许)。

显然,您的反编译器试图反编译这些部分,但无法将它们神奇地转换回Java风格的内部类。

你试过Procyon吗?我不太熟悉它的确切能力,但我敢打赌它可以重建内部类。