Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.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
Android 如何使用proguard.cfg保留我的测试方法_Android_Proguard - Fatal编程技术网

Android 如何使用proguard.cfg保留我的测试方法

Android 如何使用proguard.cfg保留我的测试方法,android,proguard,Android,Proguard,对于我的Android工具测试,我需要一些额外的入口点进入我的类。这些方法没有在实际应用中使用。我的想法是从test\uuu开始,并有一个一般规则,将它们排除在优化之外。这就是我取得的成绩: -keepclassmembers class com.xxx.**.* { public ** test_* (); public ** test_* (**); public static ** test_* (); public static ** test_* (**

对于我的Android工具测试,我需要一些额外的入口点进入我的类。这些方法没有在实际应用中使用。我的想法是从
test\uuu
开始,并有一个一般规则,将它们排除在优化之外。这就是我取得的成绩:

-keepclassmembers class com.xxx.**.* {
    public ** test_* ();
    public ** test_* (**);
    public static ** test_* ();
    public static ** test_* (**);
}
但它仍然不起作用
publicstaticvoidtest\u destroy(最终的android.content.Context上下文)
私有voiddroptables(最终的SQLiteDatabase db)
刚刚从代码中删除。我不知道为什么

它如何正确地用于通配符模式?

解决方案是

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

另一种方法是使用注释(即guava的@VisibleForTesting)来标记这些方法。然后在proguard中,您可以使用该注释保留所有入口点和成员:

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

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

请注意,您必须小心使用的@VisibleForTesting注释在.class文件中可用。例如,android.support.annotations.VisibleForTesting有一个源代码保留策略,因此它不会被保留,因此不能被proguard使用。