2016-09-30 70 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'再擔心proguard的 –

+0

@BartekLipinski - 我試圖RetentionPolicy.CLASS但得到同樣的錯誤。任何想法可能是錯的? –

+0

你真的可以發佈你收到的錯誤嗎? –

回答

2

嘗試加入這個proguard的規則:

-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

)我的代碼在調試模式下工作正常,但沒有應用pro-guard規則,所以我想它也可以在發佈模式下工作 –