我剛剛發現ProGuard刪除了一個.wait()調用,我用它來同步線程,這導致了一個導致一天快樂調試的競爭狀態:)無論如何...Proguard吃了我的Object.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)。所以,我可以替換這段配置的proguard(但它不是這個問題的重點)。
我可以問你一個問題......你爲什麼使用ProGuard?爲了什麼? –
@AdamStelmaszczyk:主要是代碼混淆。但是,除了整體應用程序混淆之外,日誌刪除還不錯。你爲什麼要問? –
因爲我覺得這不值得花時間。檢查由ProGuard生成的代碼(反編譯apk)。您會看到您可以輕鬆閱讀「混淆」版本。您可以使用簡單的'boolean DEBUG = false'標誌刪除日誌。我扔掉了ProGuard,因爲它給了更多的問題而不是好處。 –