我在我的应用程序中使用Proguard,导出构建后,我在dex2jar的帮助下对其进行了逆向工程,但是一些java类名仍然是可读的格式,但方法名是混淆的。例如,如果我在混淆之前将类命名为TestClass.java,那么在混淆之后,它可能会出现a.java或b.java…
但它显示为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这样的混淆器可以删除调试信息,并用无意义的字符序列替换所有名称,这使得对代码进行反向工程变得更加困难。作为奖励,它进一步压缩了代码。除了异常堆栈跟踪中给出的类名、方法名和行号之外,程序在功能上保持相同。
因为在sdktoolsproguard proguard -android文件中,写了这样的东西*扩展android.app.Activity所以这意味着当proguard运行时,这些类将保留它们的customname。否则程序无法找到您的类