2013-08-26 2 views
5

내역/컨텍스트 크기가 정말로 중요한 부분이 있습니다 - 최근에 공유 라이브러리 [2]로 옮겨졌고 proguard가 사용되지 않는 클래스를 처리하고 제거 할 것이라고 생각했습니다. 나는 크기를 대폭 줄이는 설정을했기 때문에 lib를 사용하여 100kb 마술을 조사 했으므로 다음과 같은 결과를 보았습니다. 사용하지 않는 클래스는 결과 dex 파일에 있습니다. 단일 문자로) - eg 나는 SquareView를 dex로 보았습니다. 나는이 앱에서 절대로 사용하지 않습니다.안드로이드 용 proguard로 사용하지 않는 클래스를 제거합니다.

은 놀랍게도 나는 다음 난독 문서에있는 질문 :

The library jars themselves always remain unchanged. 

은 어떻게 든 말할 수/트릭 난독을 처리하는 (에)? 나는 .. 나는 더 많은 물건이 앱 자체보다 lib에 이동식 것으로 예상 특히 때문에 정말 이상한 찾을

[1] https://github.com/ligi/FAST [2] 당신이 -injars를 사용해야 할 생각 https://github.com/ligi/AndroidHelper

답변

8

이클립스/개미/Gradle을 자동으로 안드로이드 SDK에서 프로세스를 구축 할 수있는 옵션 -injars와 (bin/classes에서) 코드와 (libs)에서 그 라이브러리를 지정합니다. 이는 완전한 어플리케이션이 압축되고 최적화되고 난독 화되었음을 의미합니다 (ProGuard가 활성화되었다고 가정 할 때 릴리즈 빌드에서).

빌드 프로세스는 의 -libraryjars 인 Android 런타임 만 지정합니다. 코드를 처리해야하지만 처리 된 apk에 이미 코드가 있어야하므로 코드가 처리되어야합니다.

그래서 자동으로 모두 작동해야합니다. proguard-project.txt의 구성에 -keep class org.mylibrary.** { *; }과 같은 행이 포함되어있는 경우 처리 된 apk에서 원래 이름의 전체 라이브러리를 여전히 볼 수 있습니다. 이러한 구성은 대개 반영을 고려한 보수적 인 솔루션입니다. 몇 가지 연구와 실험을 통해 구성을 수정하고 더 나은 결과를 얻을 수 있습니다. -whyareyoukeeping 옵션을 사용하여 클래스가 유지되는 이유를 파악할 수 있습니다.

3

:

-injars class_path 처리 할 응용 프로그램의 입력 항아리 (또는 전쟁, 귀, 지퍼 또는 디렉토리)를 지정합니다. 이 jar 파일의 클래스 파일은 으로 처리되어 출력 항아리에 기록됩니다. 기본적으로 비 클래스 파일은 변경없이 복사됩니다. 임시 파일 (예 : IDE에서 생성)을 알고 있어야합니다. 특히 입력 파일 을 디렉토리에서 바로 읽는 경우에주의하십시오. 필터 섹션에서 설명한대로 클래스 경로의 항목은 일 수 있습니다. 가독성을 높이기 위해클래스 경로 항목을 여러 개의 -injars 옵션을 사용하여 지정할 수 있습니다.

출처 :http://proguard.sourceforge.net/index.html#manual/usage.html

+0

감사합니다 - 맞습니다 - 받아 들여지는 이유는 - 아직 테스트하지 못했지만 지금 내가 여기에 걸려 있기 때문에 http://stackoverflow.com/questions/18460982/how-to-specify-injars-for-proguard-within -android-gradle-build-files-for-librari – ligi

관련 문제