使用ProGuard进行混淆时,是否使用SourceFile和LineNumberTable属性来使得apk更容易反向工程?

我发现自己需要更多的细节在我的报告的堆栈跟踪,但我担心通过包括额外的数据(通过使用-keepattributes SourceFile,LineNumberTable)我让我的应用程序更容易反向工程。 是这样的,如果是这样,多less?

ProGuard手册>示例>生成有用的混淆堆栈跟踪

SourceFile属性是必需的,因为Oracle / Sun的Java虚拟机不包括堆栈跟踪中的行号,这是你真正想要的(而且它本身是无害的)。 我还没有检查Android的Dalvik虚拟机是否属实。

至于解决scheme,ProGuard可以保留SourceFile属性,但是用一个没有意义的stringreplace它的内容,例如

-renamesourcefileattribute SourceFile 

string的值对于解释堆栈跟踪并不重要。 select像“SourceFile”这样的string避免了增加类文件的大小,因为这个string已经按照定义存在了。

我不确定会发生什么,但是由于源文件名包含类的实际名称,因此有人可以使用它将混淆的类名映射到真实的类名。 鉴于obfsucation已经一切为什么保持源文件呢? 所有东西都应该运行,运行时不需要debugging细节,所以保留它们是没有意义的。 给你的目标越多,越好。