ProGuard 不会对对象的方法进行混淆

Mik*_*mov 3 obfuscation android proguard

为了了解ProGuard它是如何工作的,我创建了一个小Android示例,添加了一些示例jar,编写了几行代码,启用ProGuard等等。

接下来是我的 ProGuard 选项

-assumenosideeffects class android.util.Log {
public static boolean isLoggable(java.lang.String, int);
public static int v(...);
public static int i(...);
public static int w(...);
public static int d(...);
public static int e(...);
}
-optimizationpasses 5
-optimizations !class/unboxing/enum
Run Code Online (Sandbox Code Playgroud)

因此,在对我的 APK 名称进行逆向工程后,所有Object方法(例如toString()hashCode()、 )equals()保持不变。除了Object的方法之外,Externalizable方法的名称也保留

那么您知道为什么会发生这种情况吗?是否可以解决?

Com*_*are 5

ProGuard 无法混淆并非源自您的类的方法(其中“您的”包括您编译的 JAR/AAR)。

您从框架提供的类重写的任何内容都需要保持不变。否则,框架无法调用这些方法,因为 ProGuard 不会混淆约 15 亿 Android 设备上固件安装的框架类。

  • @MikeHerasimov:黑客无论如何都可以找到该代码。鉴于现代逆向工程工具,ProGuard 混淆的用途有限。 (2认同)