如何使用 ProGuard 回溯水平合并的类



我们正在使用 ProGuard 来混淆和优化我们的 Android 应用程序,到目前为止,我们一直保持所有类/合并优化处于活动状态。这样做的问题是:如果在水平合并到不同类的方法中发生错误,则回溯工具不会还原该步骤,因此行号变得无用,并且无法跟踪错误。

我们刚刚有一个特殊的例子,一个静态帮助程序方法被合并到一个类中,该类是我们链接的第三方JAR的一部分 - 我们甚至没有源代码。由于 retrace 向我显示了该第三方类中的行号(因为帮助程序方法已合并到其中),因此我无法继续。

有没有办法在优化期间回溯合并到其他类中的方法?

标准的 java 类文件格式不提供一种方法来表示有关最终在单个类文件中的不同源文件的调试信息(尽管 dalvik 格式确实如此)。因此,ProGuard 可以合并类,但不能合并其所有调试信息。引用堆栈跟踪中合并类的行获取其中一个类的名称。不过,行号继续引用原始源文件,这可能会有所帮助。

但是,更复杂的是,内联方法获取调用的行号。这种调试信息的丢失也会影响堆栈跟踪及其去混淆。

最新更新