首页 文章

从apk恢复原始源

提问于
浏览
0

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

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

要么

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

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

1 回答

  • 4

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

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

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

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

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

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

相关问题