Java 从apk还原原始源

Java 从apk还原原始源,java,android,apk,decompiler,Java,Android,Apk,Decompiler,当我反编译我的.apk时,我看到一些额外的文件,如MainActivity$1.java、MainActivity$1$1.java等。事实上,其中一些是空的。 除此之外,还有一些代码片段多次出现,例如 this$0 = MainActivity.this; super(); 或 我在哪里可以读到更多关于这方面的信息?有没有办法恢复我原来的源代码 此代码来自Java中编译内部类的方式 在字节码级别没有对内部类的直接支持。相反,您创建的每个内部类都被编译成一个单独的类文件,使用编译器生成的桥代码

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

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


我在哪里可以读到更多关于这方面的信息?有没有办法恢复我原来的源代码

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

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

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

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

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


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

这段代码来自Java中内部类的编译方式

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

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

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

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


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

当你反编译时,你永远不会得到你放入的东西。所做的更改使文件更加计算机友好,而反编译器无法撤消这些更改。与某些语言相比,反编译的java实际上非常友好。你为什么要反编译你的apk???@RichardTingle我已经知道反编译程序很难把我的源代码还给我,但我想从它给我的代码中重建源代码。你在找一个工具来实现这一点吗?因为在反编译器完成后,其余的工作必须“手工”完成。故事的寓意;不要泄露消息来源code@RichardTingle我不是在找工具。我在寻找逻辑。正如你所说,我已经准备好“手工”做了,但我不知道怎么做。当你反编译时,你永远不会得到你输入的东西。所做的更改使文件更加计算机友好,而反编译器无法撤消这些更改。与某些语言相比,反编译的java实际上非常友好。你为什么要反编译你的apk???@RichardTingle我已经知道反编译程序很难把我的源代码还给我,但我想从它给我的代码中重建源代码。你在找一个工具来实现这一点吗?因为在反编译器完成后,其余的工作必须“手工”完成。故事的寓意;不要泄露消息来源code@RichardTingle我不是在找工具。我在寻找逻辑。正如你所说,我已经准备好“手工”完成它,但我不知道怎么做。Procyon应该能够很好地处理内部类,尽管我还没有用Android源代码对它们进行过广泛的测试。Procyon应该能够很好地处理内部类,尽管我还没有用Android源代码对它们进行过广泛的测试。
this$1 = _cls1.this;
super();