ProGuard가 스레드를 동기화하는 데 사용한 .wait() 호출을 제거한 것을 발견했습니다. 이는 경쟁 디버깅의 날로 이어지는 경쟁 조건으로 이어집니다 :) 어쨌든 ... Proguard가 내 Object.wait()를 먹었습니다.
나는 난독 구성의 조각을 다음에 그것을 아래로 추적 :-assumenosideeffects public class android.util.Log {
<methods>;
}
내가 이런 일이 왜 이해하고 싶다. Log 클래스를 제거해도 부작용이 없다고 가정하면 다른 클래스/객체에서 .wait()를 제거하게됩니다.
나는 Eric이 그런 일이 일어날 수 있다고 설명하는 ProGuard optimization also remove #wait() calls을 보았습니다. 그러나 그는 이유를 설명하지 않습니다.
또한 여기에서 로그를 제거하는 방법을 발견했습니다 (http://proguard.sourceforge.net/index.html#manual/examples.html). 그래서, 나는 구성의 프로 가드 (proguard of configuration)를 대체 할 수 있습니다 (그러나이 질문의 요지는 아닙니다).
질문 있습니다 ... 왜 ProGuard를 사용하고 있습니까? 무엇 때문에? –
@AdamStelmaszczyk : 주로 난독 화 코드입니다. 그러나 로그 제거는 전반적인 응용 프로그램 난독 화에 대한 좋은 추가 사항입니다. 왜 묻는거야? –
나는 그럴 가치가 없다고 생각하기 때문에. ProGuard (decompile apk)에 의해 생성 된 코드를 확인하십시오. "난독 화"버전을 쉽게 읽을 수 있습니다. 간단한'boolean DEBUG = false' 플래그로 로그를 제거 할 수 있습니다. 나는 ProGuard를 버렸습니다. ProGuard는 이익보다 더 많은 문제를 안고 있기 때문입니다. –