我发现自己需要更多的细节在我报告的堆栈跟踪,但我担心,通过包括额外的数据(通过使用-keepattributes SourceFile,LineNumberTable),我使我的应用程序更容易逆向工程。是这样吗?如果是这样,差多少?
ProGuard手册>示例>生成有用的混淆堆栈跟踪
SourceFile属性是必需的,因为Oracle/Sun的Java虚拟机在堆栈跟踪中不包含行号,这是您真正想要的(并且它本身是相当无害的)。我还没有检查这是否适用于Android的Dalvik虚拟机。
作为解决方案,ProGuard可以保留SourceFile属性,但将其内容替换为您选择的无意义字符串,例如
-renamesourcefileattribute SourceFile
字符串的值对于解释堆栈跟踪并不重要。选择像"SourceFile"这样的字符串可以避免增加类文件的大小,因为这个字符串在定义中已经存在了。
我不太确定发生了什么,但是给定源文件名包含类的实际名称,有人可以使用它将混淆的类名称映射为实际的类名称。既然模糊化已经把所有东西都弄混了,为什么还要保留源文件呢?所有内容都应该并且将继续运行,运行时不需要调试细节,因此保留它们没有意义。考虑到你的目标,你删除的越多越好。
我想你可以直接使用:
-keepattributes LineNumberTable
-renamesourcefileattribute
-keepattributes SourceFile, LineNumberTable,Signature,Exceptions,InnerClasses,EnclosingMethod
或
-renamesourcefileattribute ''
-keepattributes SourceFile, LineNumberTable,Signature,Exceptions,InnerClasses,EnclosingMethod
让filename为空