2016-09-30 1 views
4
public class AssetsHelper { 

    @StringDef({ScreenDensity.XHDPI,ScreenDensity.HDPI, ScreenDensity.XXHDPI}) 
    @Retention(RetentionPolicy.SOURCE) 
    public @interface ScreenDensity { 
     String HDPI = "HDPI"; 
     String XHDPI = "XHDPI"; 
     String XXHDPI = "XXHDPI"; 
    } 
} 

Android SDK의 tools 폴더에서 기본 프로 가드 규칙을 사용할 때 ScreenDensity 오류가 발생합니다. 이것을 유지하기위한 프로 가이드 규칙은 무엇입니까? StringDefScreenDensity이 난독 화되는 것을 막으시겠습니까?android의 StringDef 주석에 대한 프로 가드 규칙은 무엇입니까?

+0

먼저 당신이 RetentionPolicy.SOURCE''에 대해 읽은 다음 난독 –

+0

@BartekLipinski에 대해 걱정해야 - 나는 RetentionPolicy.CLASS하지만 같은 오류가 발생을했습니다. 어떤 생각이 잘못되었을 수 있습니까? –

+0

실제로 오류를 게시 할 수 있습니까? –

답변

2

시도 :

-keepclassmembers class ** { 
    @your.package.AssetsHelper.ScreenDensity public *; 
} 
+0

이것이 저에게 효과적이었습니다. -keepclassmembers class ** { @ com.citruspay. graphics.AssetsHelper.ScreenDensity public *; }' –

+0

필드뿐만 아니라 클래스에 @Keep 주석을 추가했습니다. 감사합니다. –

0

오류를 수정하고 ProGuard가 특정 코드를 유지하도록하려면 ProGuard 구성 파일에 -keep 줄을 추가하십시오. 예를 들면 다음과 같습니다.

-keep public class MyClass 

또는 보존하려는 코드에 @Keep 주석을 추가 할 수 있습니다. 클래스에 @Keep을 추가하면 전체 클래스가 그대로 유지됩니다. 메소드 나 필드에 추가하면 메소드/필드 (및 이름)와 클래스 이름이 그대로 유지됩니다. 이 주석은 주석 지원 라이브러리를 사용할 때만 사용할 수 있습니다.

확인 proguard

+1

해결책을 찾지 못했습니다. : –

0

StringDef 자료 보존 정책 주석이다. 따라서 컴파일 된 코드에서 자동으로 제거됩니다.

소스 주석은 promgrammer가 "마법"숫자 또는 문자열 대신 특정 상수를 사용하도록 규칙을 시행하기위한 것으로 코드에 익숙하지 않은 사용자에게는 아무런 의미가 없습니다. 이 난독 규칙을 추가

+0

내 코드는 프로 가드 규칙이 적용되지 않았을 때 디버그 모드에서 잘 작동하므로 공개 모드에서도 작동 할 것입니다. –

관련 문제