【问题标题】:How to retrace horizontally merged classes with ProGuard?如何使用 ProGuard 追溯水平合并的类?
【发布时间】:2012-07-04 21:57:09
【问题描述】:

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

我们刚刚遇到的一个特殊示例是一个静态辅助方法被合并到一个类中,该类是我们链接的第 3 方 JAR 的一部分——我们甚至没有源代码。由于 retrace 向我显示了该 3rd 方类中的行号(因为辅助方法已合并到其中),所以我无法继续。

有没有办法在优化过程中追溯合并到其他类中的方法?

【问题讨论】:

    标签: android proguard


    【解决方案1】:

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

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

    【讨论】:

    • 这很有趣——谢谢! ProGuard 编写的任何报告文件是否表明方法是否被内联?我们目前仅将映射文件保留在版本控制之下,以便为旧的构建标签重建堆栈跟踪。
    • 不,ProGuard 不会记录有关其优化的详细信息。这会很困难,因为优化可以以复杂的方式相互作用和积累。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 2013-12-03
    相关资源
    最近更新 更多