Android 如何将 Java 方法编译为编译方法?
How does Android compile a Java method to an compiled method?
最近我用 dex2jar、jd-gui 和 Android studio.
反编译了一些 Android
APK
为什么有的classes的方法可以看到源码,有的classes的方法只能看到/编译后的代码/?
这两个class在编译的时候有什么区别?
而且,我想对我的代码做同样的编译工作以确保安全。我可以寻找哪些工具?
这可能是因为您的 JAVA
文件由于不正确的字节码而无法读取,或者它可能已被加密。您无法区分正确和不正确的 JAVA
文件类型。
无论如何,要正确编译您的 JAVA
文件,您也可以使用 Luyten(与 jd-gui 相同)。
当 Android Studio 打开一个 .class 文件并且无法反编译代码时,它只会显示 "compiled code" 消息。有很多东西可以阻止反编译,因为很多东西在字节码中是合法的,而在 Java 中是非法的。 (例如,具有名为 if
或 for
的方法是完全合法的字节码,但这些是 Java 关键字,不能用于命名 Java 方法。)当 ProGuard 处理 .class 文件时,这些事情很容易出现,并且可能由 APK 构建过程中的其他工具处理。
最近我用 dex2jar、jd-gui 和 Android studio.
反编译了一些Android
APK
为什么有的classes的方法可以看到源码,有的classes的方法只能看到/编译后的代码/?
这两个class在编译的时候有什么区别?
而且,我想对我的代码做同样的编译工作以确保安全。我可以寻找哪些工具?
这可能是因为您的 JAVA
文件由于不正确的字节码而无法读取,或者它可能已被加密。您无法区分正确和不正确的 JAVA
文件类型。
无论如何,要正确编译您的 JAVA
文件,您也可以使用 Luyten(与 jd-gui 相同)。
当 Android Studio 打开一个 .class 文件并且无法反编译代码时,它只会显示 "compiled code" 消息。有很多东西可以阻止反编译,因为很多东西在字节码中是合法的,而在 Java 中是非法的。 (例如,具有名为 if
或 for
的方法是完全合法的字节码,但这些是 Java 关键字,不能用于命名 Java 方法。)当 ProGuard 处理 .class 文件时,这些事情很容易出现,并且可能由 APK 构建过程中的其他工具处理。