我刚刚发现 ProGuard 删除了一个我用来同步线程的 .wait() 调用,这导致了一个竞争条件,这导致了一天愉快的调试:) 无论如何......
我将其追踪到以下 proguard 配置:
-assumenosideeffects public class android.util.Log {
<methods>;
}
我想了解为什么会这样。我不确定为什么假设删除 Log 类没有副作用会导致在不同的类/对象上删除 .wait() 。
我看到ProGuard 优化还删除了 #wait() 调用,Eric 解释说这样的事情可能会发生。不过,他没有解释原因。
另外,我在这里找到了如何删除日志的示例(http://proguard.sourceforge.net/index.html#manual/examples.html)。所以,我可以替换这个配置的proguard(但这不是这个问题的重点)。