gpt4 book ai didi

android - Proguard 吃了我的 Object.wait()

转载 作者:太空宇宙 更新时间:2023-11-03 13:27:55 27 4
gpt4 key购买 nike

我刚刚发现 ProGuard 删除了我用来同步线程的 .wait() 调用,这导致了竞争条件,导致了一天愉快的调试:)无论如何......

我追踪到以下混淆器配置:

-assumenosideeffects public class android.util.Log {
<methods>;
}

我想了解为什么会发生这种情况。我不确定为什么假设删除 Log 类没有副作用会导致删除不同类/对象上的 .wait()。

我看到了ProGuard optimization also remove #wait() calls埃里克解释说这样的事情可能会发生。但是,他没有解释原因。

另外,我在此处找到了如何删除日志的示例 (http://proguard.sourceforge.net/index.html#manual/examples.html)。所以,我可以替换这段配置的proguard(但这不是这个问题的重点)。

最佳答案

您的原始配置匹配 Log 的所有方法(显式或继承的),包括 Object#wait()。它告诉 ProGuard wait() 方法没有副作用,可以在不损害程序的情况下将其删除。正如您所注意到的,这显然不是真的。使用 -assumenosideeffects,您应该始终明确列出可以安全删除的方法。

关于android - Proguard 吃了我的 Object.wait(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16846691/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com