2017-02-28 93 views
0

我一直在使用「UI form validation library for Android」庫來驗證我的用戶界面。而我也實現了一些自定義的驗證規則,例如:progaurd不保留註釋

public class CellRule extends AnnotationRule<Cell, String> { 
    protected CellRule(Cell cell) { 
     super(cell); 
    } 

    @Override 
    public boolean isValid(String text) { 
     if(text.isEmpty()) { 
      return false; 
     } 

     String cellNumber = StringUtils.toStandard(text); 

     Pattern cellPattern = Pattern.compile("^(0|\\+98)9(1[0-9]|3[1-9]|2[1-9])-?[0-9]{3}-?[0-9]{4}$"); 
     Matcher cellMatcher = cellPattern.matcher(cellNumber); 

     return cellMatcher.matches(); 
    } 
} 

@ValidateUsing(CellRule.class) 
@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.FIELD) 
public @interface Cell { 
    int sequence()   default -1; 
    int messageResId()  default -1; 
    String message()  default "Invalid Cell!"; 
} 

,我用這個命令註冊它們:

Validator.registerAnnotation(Cell.class); 

,並預期它一直工作。直到我試圖生成簽名apk(啓用縮小),現在它給了我一些錯誤...當我檢查了apk(使用反編譯)看起來progaurd沒有保留註釋(@interface Cell)在apk中。

當我註釋掉註冊行都很好。

回答

0

我發現每個庫都有它自己的progaurd設置,它可能記錄在庫的README文件中!

爲saripaar的圖書館,這將這樣的伎倆:

-keep class com.mobsandgeeks.saripaar.** {*;} 
-keep @com.mobsandgeeks.saripaar.annotation.ValidateUsing class * {*;}