-assumenosideeffects class android.util.Log { <methods>; } は使っちゃダメ


この設定をすると、Logクラスのメソッドすべてが副作用がないものとして扱われます。すべてのメソッドとは、継承元のメソッドも含みます。

その結果 Object#wait() なども副作用なしとしてdead code eliminationの対象になり、すべての Object#wait() が素通りするようになります。

これを防ぐためには下記のように <methods> じゃなく個別に指定しないといけません。

-assumenosideeffects class android.util.Log {
    public static int v(...);
    public static int d(...);
    public static int i(...);
    public static int w(...);
    public static int e(...);
    public static int wtf(...);
}

最小確認コード: https://github.com/gfx/ProguardRemovesObjectWait