2011-06-01 50 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