2011-03-10 4 views
4

/usr/bin/strip은 Linux의 C/C++ 오브젝트 파일에서와 마찬가지로 Java .class 파일에서 디버그 정보를 제거 할 수있는 도구가 있습니까?`/ usr/bin/strip`에 자바가 대응하고 있습니까?

EDIT : 나는 Thilo와 Peter Mmm의 대답을 모두 좋아했습니다. Peter의 답변은 짧았고 JDK와 함께 배송되는 것에 대한 나의 무지가 드러났습니다. Thilo의 ProGuard 제안은 내가 제공하는 모든 추가 기능에 대해 확실히 확인할 것입니다. Thilo와 Peter 감사합니다!

+2

** javac -g : none ** 컴파일시 디버그 정보를 전혀 사용하지 않습니다. 그리고 첫 번째 구글 히트는 http : //blogs.sun입니다.com/ahe/entry/how_to_strip_debug_information – PeterMmm

+2

블로그 Peter는'pack200 -r -G debug.jar'를 가리킨다. Pack200은 JDK와 함께 제공됩니다. – Thilo

+1

strip은 디버깅 정보를 제거하지 않습니다. 필요하지 않은 항목을 기호 테이블에서 제거합니다. jar 파일에서 모든 심볼을 제거하면 작동하지 않습니다. – symcbean

답변

3

ProGuard은 (안드로이드 SDK 코드 크기를 줄일 수와 예를 들어 선박한다), JAR 파일을 축소 조작의 모든 종류의 작업을 수행 할 수 있습니다

  • 는 상수 식을 평가합니다.
  • 불필요한 필드 액세스 및 메서드 호출을 제거하십시오.
  • 불필요한 가지를 제거하십시오.
  • 불필요한 비교 및 ​​instanceof 테스트를 제거하십시오.
  • 사용하지 않는 코드 블록을 제거하십시오.
  • 동일한 코드 블록을 병합하십시오.
  • 가변 할당을 줄입니다.
  • 쓰기 전용 필드와 사용되지 않는 메소드 매개 변수를 제거하십시오.
  • 인라인 상수 필드, 메서드 매개 변수 및 반환 값입니다.
  • 짧거나 한 번만 호출되는 인라인 메서드.
  • 꼬리 재귀 호출을 단순화합니다.
  • 클래스와 인터페이스를 병합합니다.
  • 가능한 경우 메서드를 비공개, 정적 및 최종 메서드로 만듭니다.
  • 가능한 경우 클래스를 정적 ​​및 최종화합니다.
  • 단일 구현이있는 인터페이스를 바꿉니다.
  • ... * 2를 (를) 대체하는 것과 같이 멍청한 최적화를 수행하십시오. < <
  • 선택적으로 로깅 코드를 제거하십시오.

그들은 그 목록에서 디버그 정보를 제거하는 언급하지 않지만 그들은 또한 그렇게 할 수 있다고 생각합니다. 실제로 예 :

업데이트 기본적으로

는, 컴파일 된 바이트 코드는 여전히 디버깅 정보가 많이 포함되어 소스 파일 이름, 줄 번호, 필드 이름, 메소드 이름, 인수 이름, 변수 이름, 이 정보는 바이트 코드를 역 컴파일하고 전체 프로그램을 리버스 엔지니어링하는 것을 간단하게합니다. 때로는 바람직하지 않습니다. ProGuard와 같은 Obfuscator는 디버깅 정보를 제거하고 의미없는 문자 시퀀스로 모든 이름을 바꿀 수 있으므로 코드를 리버스 엔지니어링하는 것이 훨씬 어렵습니다. 보너스로 코드를 압축합니다. 예외 스택 추적에 제공된 클래스 이름, 메소드 이름 및 행 번호를 제외하고 프로그램은 기능적으로 동일합니다.

+0

안녕하세요, 꽤 멋졌습니다. 감사합니다. 감사합니다! (바로 +1이 있습니다.) 한편, Oracle JDK에서 기본적으로 제공되는 것 외에도, 속도/메모리 벤치마킹 및 튜닝, 모니터링 (JVM)과 같은 것들을위한 javac 및 java (JVM) 용 * 모든 * 시스템 수준 도구의 포괄적 인 목록이 있습니다. , 정적/동적 코드 분석 등. 기본적으로, 나는 Java (정규, 고수준 프로그래밍 이외의)와 모든 것을 처리 할 수있는 모든 종류의 도구에 대해 무엇이 가능한지 알지 못한다 !! – Harry

+1

공식 문서가 있습니다. http://download.oracle.com/javase/6/docs/technotes/tools/index.html – Thilo

+0

또한 많은 타사 도구가 있습니다. 지금까지 내가 찾은 가장 쉬운 방법은 그걸 발견하는 것입니다 ... –