2011-06-01 49 views
0

对于我的Android仪器测试,我需要一些额外的入口点到我的课。这些方法并未在实际应用中使用。我的想法是用test_开始他们,并有一个通用的规则,排除他们优化。这是我得到了多少:如何保持我的测试方法与proguard.cfg

-keepclassmembers class com.xxx.**.* { 
    public ** test_*(); 
    public ** test_* (**); 
    public static ** test_*(); 
    public static ** test_* (**); 
} 

但它仍然无法正常工作。 public static void test_destroy (final android.content.Context context)private void dropTables (final SQLiteDatabase db)刚刚从代码中删除。我不知道为什么。

如何正确使用通配符模式?

回答

4

的解决方案是

-keepclassmembers class com.XXX.**.* { 
    *** test_* (...); 
} 
2

另一种方式来做到这一点是利用一个注释(即番石榴的@VisibleForTesting)来标记的那些方法。然后在ProGuard的,你可以把所有的切入点和成员与注释:

-keep @com.google.common.annotations.VisibleForTesting class * 

-keepclasseswithmembers class * { 
    @com.google.common.annotations.VisibleForTesting *; 
} 
+3

请注意,你必须要小心,您所使用的@VisibleForTesting注释是在.class文件可用。例如,android.support.annotations.VisibleForTesting具有SOURCE的RetentionPolicy,所以它不会被保留,因此不能被proguard使用。 – 2015-09-10 07:34:03