我使用@VisibleForTesting
註釋坐落於Android的支持Annotation庫,它看起來像這樣:是否可以讓ProGuard使用RetentionPolicy.SOURCE保留元素?
@Retention(SOURCE)
public @interface VisibleForTesting {
}
據我瞭解,ProGuard的上.class文件,自經營這批註不可用在編譯時由於其保留策略,所有註釋的方法都被刪除。我想在我的應用程序上運行自動化測試,並使用公開的測試方法來驗證ProGuard配置不會破壞任何用例。
是否可以配置ProGuard以某種方式保留這些元素?到目前爲止,我已經試過:
-keep @android.support.annotation.VisibleForTesting class *
-keep class android.support.annotation.** {
@**.VisibleForTesting *;
}
-keep interface android.support.annotation.** {
@**.VisibleForTesting *;
}
和:
-keep interface android.support.annotation.VisibleForTesting
-keepclasseswithmembers class * {
@android.support.annotation.VisibleForTesting *;
}
-keepclassmembers class ** {
@android.support.annotation.VisibleForTesting *;
}
這兩種配置不起作用。如果我也使用@Keep
註釋方法,並配置ProGuard以保留這些方法,則會保留這些方法並通過測試。但是,通過這樣做,我必須用兩個註釋來註釋所有方法。
是否可以掛鉤註釋處理器並覆蓋@VisibleForTesting
的保留策略?或者在構建過程中已經太遲了?
番石榴的@VisibleForTesting
使用RetentionPolicy.CLASS
,而Android支持註釋庫使用RetentionPolicy.SOURCE
。我正在考慮發佈更改政策的請求,但由於某種原因,我認爲它設置爲SOURCE
,可能是由於性能和文件大小略有增加?
除了使用兩個註釋(@VisibleForTesting
和@Keep
)之外是否還有其他選擇?