Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在带有proguard的Android生产代码中使用Hamcrest匹配器时出现运行时错误_Java_Android_Validation_Proguard_Hamcrest - Fatal编程技术网

Java 在带有proguard的Android生产代码中使用Hamcrest匹配器时出现运行时错误

Java 在带有proguard的Android生产代码中使用Hamcrest匹配器时出现运行时错误,java,android,validation,proguard,hamcrest,Java,Android,Validation,Proguard,Hamcrest,我正在写一个应用程序,它有一个带有数字文本字段的表单。为了检查输入是否有效,我决定使用Hamcrest匹配器。我定义: public static <T> boolean checkThat(T actual, Matcher<? super T> matcher) { return matcher.matches(actual); } 现在,这在调试模式下工作得非常好,但当我启用proguard for production release时,应用程序立即崩溃

我正在写一个应用程序,它有一个带有数字文本字段的表单。为了检查输入是否有效,我决定使用Hamcrest匹配器。我定义:

public static <T> boolean checkThat(T actual, Matcher<? super T> matcher) {
    return matcher.matches(actual);
}
现在,这在调试模式下工作得非常好,但当我启用proguard for production release时,应用程序立即崩溃,并显示以下消息(通过retrace获得):

其中,
parsesToDouble
是我编写的一个简单匹配器。我认为这是一种非常灵活和清晰的方式来表达我的意图,我只是对如何让它与proguard一起工作感兴趣


因为Hamcrest使用反射,所以在收缩阶段删除了一些不应该删除的方法。我可以通过添加

-keepclasseswithmembers class org.hamcrest.number.** { *** matchesSafely(...); }
遵守前进的规则。如果你不关心稍微大一点的apk,你可以添加

-keep class org.hamcrest.** { *; }
确保不会删除hamcrest中的任何内容

checkThat(textIn(myEditText),parsesToDouble(greaterThan(0.0)));
-keepclasseswithmembers class org.hamcrest.number.** { *** matchesSafely(...); }
-keep class org.hamcrest.** { *; }