我在我的应用程序中使用 Proguard,在导出构建后,我在 dex2jar 的帮助下对其进行了逆向工程,但一些 java 类名仍然是可读格式,但方法名被混淆了。例如,如果我在混淆之后的混淆之前有一个名为 TestClass.java 的类,它期望像 a.java 或 b.java 之类的东西......
但它在我的项目中显示为 Activity 类的 TestClass.java。
有人知道我错在哪里活动类名称是可读格式吗?
提前致谢!
ProGuard 已集成到 Android 构建系统中,因此您不必手动调用它。ProGuard 仅在您以发布模式构建应用程序时运行,因此您在以调试模式构建应用程序时不必处理混淆代码。运行 ProGuard 是完全可选的,但强烈推荐。
当您在发布模式下构建应用程序时,无论是通过运行 ant release 还是使用 Eclipse 中的导出向导,构建系统都会自动检查是否设置了 proguard.config 属性。如果是,ProGuard 会在将所有内容打包成 .apk 文件之前自动处理应用程序的字节码。在调试模式下构建不会调用 ProGuard,因为它使调试更加麻烦。
http://developer.android.com/tools/help/proguard.html。
以上引用来自文档。您的应用程序是否处于发布模式?
http://developer.android.com/tools/publishing/app-signing.html#releasemode
编辑:
什么是混淆?
默认情况下,编译后的字节码仍然包含大量调试信息:源文件名、行号、字段名、方法名、参数名、变量名等。这些信息可以直接反编译字节码和对整个程序进行逆向工程。有时,这是不可取的。诸如 ProGuard 之类的混淆器可以删除调试信息并用无意义的字符序列替换所有名称,从而使对代码进行逆向工程变得更加困难。它进一步压缩代码作为奖励。除了在异常堆栈跟踪中给出的类名、方法名和行号之外,该程序在功能上保持相同。
因为在 \sdk\tools\proguard\proguar-android 文件中,写了这样的东西 -keep public class * extends android.app.Activity 所以这意味着当 proguard 运行时,这些类将保留它们的 CustomNames。否则程序找不到你的类