我发现自己在报告的堆栈跟踪中需要更多详细信息,但我担心通过包含额外数据(通过使用-keepattributes SourceFile,LineNumberTable)我使我的应用程序更容易进行逆向工程。是这种情况,如果是这样,那么多少?
答案 0 :(得分:38)
ProGuard manual > Examples > Producing useful obfuscated stack traces
SourceFile属性是必需的,因为Oracle / Sun的Java虚拟机在堆栈跟踪中不包含行号,这是您真正想要的(并且它本身非常无害)。我还没有检查Android的Dalvik虚拟机是否属实。
对于解决方案,ProGuard可以保留SourceFile属性,但用您选择的无意义字符串替换其内容,例如
-renamesourcefileattribute SourceFile
字符串的值对于解释堆栈跟踪并不重要。选择像“SourceFile”这样的字符串可以避免增加类文件大小,因为根据定义,此字符串已经存在。
答案 1 :(得分:2)
我不确定会发生什么,但鉴于源文件名包含类的实际名称,有人可以使用它将混淆的类名映射到实际的类名。鉴于obfsucation已经混淆了为什么要保留源文件?一切都应该并且仍将运行,运行时不需要调试细节,因此保留它们是没有意义的。根据你的目标,越多越好。
答案 2 :(得分:0)
我认为您可以只使用-keepattributes LineNumberTable
答案 3 :(得分:0)
-renamesourcefileattribute
-keepattributes SourceFile, LineNumberTable,Signature,Exceptions,InnerClasses,EnclosingMethod
或
-renamesourcefileattribute ''
-keepattributes SourceFile, LineNumberTable,Signature,Exceptions,InnerClasses,EnclosingMethod
让文件名为空就可以了