android-Proguard吃了我的Object.wait()
作者:互联网
我只是发现ProGuard删除了一个我用来同步线程的.wait()调用,这导致了竞争状况,导致一天的调试愉快:)无论如何…
我将其追溯到以下Proguard配置:
-assumenosideeffects public class android.util.Log {
<methods>;
}
我想了解为什么会这样.我不确定为什么假设删除Log类没有副作用会导致删除其他类/对象上的.wait()的原因.
我看到ProGuard optimization also remove #wait() calls处的Eric解释了这种情况可能发生.但是,他没有解释原因.
此外,我在此处找到了如何删除日志的示例(http://proguard.sourceforge.net/index.html#manual/examples.html).因此,我可以替换此配置保护程序(但这不是这个问题的重点).
解决方法:
您的原始配置与所有Log方法(显式或继承)匹配,包括Object#wait().它告诉ProGuard,wait()方法没有副作用,可以删除它而不会损害程序.您已经注意到,这显然是不正确的.使用-assumenosideeffects,您应该始终明确列出可以安全删除的方法.
标签:proguard,obfuscation,android 来源: https://codeday.me/bug/20191030/1970941.html