我在我的应用程序中使用Proguard,在导出构建之后,我在dex2jar的帮助下对它进行了逆向工程,但是一些java类名仍然是可读格式,但是方法名称被混淆了。 例如如果我在混淆之后在混淆之前将类命名为TestClass.java,那么它会期望类似a.java或b.java ......
但它在我的项目中显示为TestClass.java用于Activity类。
有人知道我错在哪些活动类名称是可读格式吗?
提前致谢!
答案 0 :(得分:0)
ProGuard已集成到Android构建系统中,因此您无需手动调用它。 ProGuard仅在您以发布模式构建应用程序时运行,因此在以调试模式构建应用程序时不必处理混淆代码。运行ProGuard是完全可选的,但强烈建议。
在发布模式下构建应用程序时,通过运行ant发布或使用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这样的混淆器可以删除调试信息并用无意义的字符序列替换所有名称,这使得对代码进行反向工程变得更加困难。它进一步压缩代码作为奖励。除了异常堆栈跟踪中给出的类名,方法名和行号外,该程序在功能上保持等效。
答案 1 :(得分:0)
因为在\ sdk \ tools \ proguard \ proguar-android文件中,写了这样的东西 -keep public class *扩展android.app.Activity 所以这意味着当proguard运行时,这些类将保留其CustomNames。否则programm找不到你的班级