我在我的应用程序中使用了Proguard,在导出build之后,我在dex2jar的帮助下对它进行了逆向工程,但一些java类名称仍然是可读的格式,但方法名称是模糊的。例如,如果我在混淆之前将类命名为TestClass.java,那么在混淆之后,它应该是类似a.java或b.java的东西……
但它在我的项目中显示为Activity类的TestClass.java。
有没有人知道我哪里错了,活动类的名称是可读的格式?
提前感谢!
发布于 2013-04-12 20:00:08
ProGuard已集成到Android构建系统中,因此您不必手动调用它。只有在以发布模式生成应用程序时,ProGuard才会运行,因此在以调试模式生成应用程序时,不必处理混淆代码。让ProGuard运行是完全可选的,但强烈建议您这样做。
当您在发布模式中构建应用程序时,无论是通过运行ant release还是通过使用Eclipse中的导出向导运行,构建系统都会自动检查是否设置了proguard.config属性。如果是,则在将所有内容打包到.apk文件之前,ProGuard会自动处理应用程序的字节码。在调试模式下生成不会调用ProGuard,因为这会使调试变得更加麻烦。
http://developer.android.com/tools/help/proguard.html。
上面的引用来自文档。您的应用程序是否处于发布模式?
http://developer.android.com/tools/publishing/app-signing.html#releasemode
编辑:
什么是混淆?
默认情况下,编译后的字节码仍然包含许多调试信息:源文件名、行号、字段名、方法名、参数名、变量名、等。这些信息使得反编译字节码和对整个程序进行反向工程变得非常简单。有时,这并不可取。像ProGuard这样的混淆器可以删除调试信息,并将所有名称替换为无意义的字符序列,这使得对代码进行反向工程变得更加困难。作为奖励,它进一步压缩了代码。除了异常堆栈跟踪中给出的类名、方法名和行号之外,程序在功能上保持相同。
发布于 2015-02-17 16:33:19
因为在\sdk\tools\ proguard \proguar-android文件中,编写了类似-keep公共类*的内容扩展了android.app.Activity,所以这意味着当proguard运行时,这些类将保留它们的CustomNames。否则程序员将找不到您的类
https://stackoverflow.com/questions/15970246
复制相似问题