ProGuard은 (안드로이드 SDK 코드 크기를 줄일 수와 예를 들어 선박한다), JAR 파일을 축소 조작의 모든 종류의 작업을 수행 할 수 있습니다
- 는 상수 식을 평가합니다.
- 불필요한 필드 액세스 및 메서드 호출을 제거하십시오.
- 불필요한 가지를 제거하십시오.
- 불필요한 비교 및 instanceof 테스트를 제거하십시오.
- 사용하지 않는 코드 블록을 제거하십시오.
- 동일한 코드 블록을 병합하십시오.
- 가변 할당을 줄입니다.
- 쓰기 전용 필드와 사용되지 않는 메소드 매개 변수를 제거하십시오.
- 인라인 상수 필드, 메서드 매개 변수 및 반환 값입니다.
- 짧거나 한 번만 호출되는 인라인 메서드.
- 꼬리 재귀 호출을 단순화합니다.
- 클래스와 인터페이스를 병합합니다.
- 가능한 경우 메서드를 비공개, 정적 및 최종 메서드로 만듭니다.
- 가능한 경우 클래스를 정적 및 최종화합니다.
- 단일 구현이있는 인터페이스를 바꿉니다.
- ... * 2를 (를) 대체하는 것과 같이 멍청한 최적화를 수행하십시오. < <
- 선택적으로 로깅 코드를 제거하십시오.
그들은 그 목록에서 디버그 정보를 제거하는 언급하지 않지만 그들은 또한 그렇게 할 수 있다고 생각합니다. 실제로 예 :
업데이트 기본적으로
는, 컴파일 된 바이트 코드는 여전히 디버깅 정보가 많이 포함되어 소스 파일 이름, 줄 번호, 필드 이름, 메소드 이름, 인수 이름, 변수 이름, 이 정보는 바이트 코드를 역 컴파일하고 전체 프로그램을 리버스 엔지니어링하는 것을 간단하게합니다. 때로는 바람직하지 않습니다. ProGuard와 같은 Obfuscator는 디버깅 정보를 제거하고 의미없는 문자 시퀀스로 모든 이름을 바꿀 수 있으므로 코드를 리버스 엔지니어링하는 것이 훨씬 어렵습니다. 보너스로 코드를 압축합니다. 예외 스택 추적에 제공된 클래스 이름, 메소드 이름 및 행 번호를 제외하고 프로그램은 기능적으로 동일합니다.
** javac -g : none ** 컴파일시 디버그 정보를 전혀 사용하지 않습니다. 그리고 첫 번째 구글 히트는 http : //blogs.sun입니다.com/ahe/entry/how_to_strip_debug_information – PeterMmm
블로그 Peter는'pack200 -r -G debug.jar'를 가리킨다. Pack200은 JDK와 함께 제공됩니다. – Thilo
strip은 디버깅 정보를 제거하지 않습니다. 필요하지 않은 항목을 기호 테이블에서 제거합니다. jar 파일에서 모든 심볼을 제거하면 작동하지 않습니다. – symcbean