2012-07-04 4 views
1

우리는 ProGuard를 사용하여 Android 앱을 난독 화하고 최적화했습니다. 지금까지 모든 클래스/병합 최적화를 활성화했습니다. 이 문제는 다음과 같습니다. 다른 클래스에 수평으로 병합 된 메서드에서 오류가 발생하면 리 트레이스 도구가 해당 단계를 되돌릴 수 없으므로 줄 번호가 쓸모 없게되고 오류를 추적하는 것이 불가능합니다.ProGuard와 수평으로 병합 된 클래스를 되 돌리는 방법은 무엇입니까?

정적 헬퍼 메소드가 우리가 링크 한 제 3 자 JAR의 일부인 클래스로 병합되는 특별한 예가 하나 있습니다. 우리는 소스 코드조차 가지고 있지 않습니다. retrace는 제 3 자 클래스의 라인 번호를 보여주기 때문에 (헬퍼 메소드가 병합 되었기 때문에) 진행할 수 없습니다.

최적화 중에 다른 클래스로 병합 된 메서드를 다시 추적 할 수있는 방법이 있습니까?

답변

1

표준 Java 클래스 파일 형식은 단일 클래스 파일로 끝나는 여러 소스 파일에 대한 디버그 정보를 표시하는 방법을 제공하지 않습니다 (dalvik 형식이 그렇지만). 따라서 ProGuard는 클래스를 병합 할 수 있지만 모든 디버그 정보를 병합 할 수는 없습니다. 스택 추적에서 병합 된 클래스를 참조하는 줄은 이러한 클래스 중 하나의 이름을 가져옵니다. 줄 번호는 원본 소스 파일을 계속 참고하지만 도움이 될 수 있습니다.

그러나 사물을 더 복잡하게 만들기 위해 인라인 된 메소드는 호출의 행 번호를 가져옵니다. 이러한 디버그 정보 손실은 스택 추적 및 디버깅 난독 화에 영향을 미칠 수 있습니다.

+0

재미 있습니다. - 감사합니다! ProGuard에서 작성한 보고서 파일 중 어떤 것이 메소드가 인라인되었는지 여부를 나타냅니다. 우리는 현재 맵핑 파일을 버전 제어하에 유지하기 때문에 이전 빌드 태그에 대한 스택 추적을 재구성합니다. – Matthias

+1

아니요, ProGuard는 최적화에 대한 세부 정보를 기록하지 않습니다. 최적화가 복잡한 방식으로 상호 작용하고 누적 될 수 있기 때문에 어렵습니다. –

관련 문제