숫자를 사용하는 텍스트 필드가있는 양식을 가진 앱을 작성하고 있습니다. 입력이 유효한지 확인하기 위해 Hamcrest Matchers를 사용하기로 결정했습니다. 처럼 물건을 사용할 수 있습니다안드로이드 프로덕션 코드에서 Hamcrest Matchers를 사용하는 런타임 오류가 발생했습니다
public static <T> boolean checkThat(T actual, Matcher<? super T> matcher) {
return matcher.matches(actual);
}
있도록 : 나는 정의 지금이 디버그 모드에서 완벽하게 잘 작동
if(checkThat(doubleFromText,greaterThan(0.0)) doSomething();
을, 그러나 나는 다음과 같은 메시지가 응용 프로그램이 충돌 즉시 생산 릴리스에 대한 난독을 사용할 때 (리 트레이스로 획득) :
java.lang.Error: Cannot determine correct type for matchesSafely() method.
at org.hamcrest.internal.ReflectiveTypeFinder.findExpectedType(Unknown Source)
canObtainExpectedTypeFrom
at org.hamcrest.TypeSafeMatcher.<init>(Unknown Source)
at org.hamcrest.TypeSafeMatcher.<init>(Unknown Source)
at org.hamcrest.number.OrderingComparison.<init>(Unknown Source)
at org.hamcrest.number.OrderingComparison.greaterThan(Unknown Source)
matchesSafely
at org.hamcrest.Matchers.greaterThan(Unknown Source)
어떻게 해결할 수 있습니까? 이 컴파일 얻을
- 내 난독 규칙에
-dontwarn java.beans.**
추가 : https://github.com/burgerga/HamcrestMatchersWithProguard
주 :
나는이 문제를 보여주는 최소한의 예를했다. 나는 단지
if(doubleFromText > 0)
을 사용해야한다고 말하기 전에 내가 준 예제를 단순화했습니다. 내 코드에서 나는parsesToDouble
가 내가 쓴 간단한 정규이다checkThat(textIn(myEditText),parsesToDouble(greaterThan(0.0)));
같은 것을 사용합니다. 나는 이것이 내 의도를 진술하기위한 매우 유연하고 분명한 방법이라고 생각한다. 나는 프로 가드와 함께 일하는 방법에 관심이있다.