私はAndroidのサポート注釈ライブラリにある@VisibleForTesting
注釈を使用していて、それは次のようになります。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を設定すると、メソッドは保持され、テストは合格します。しかし、これを行うことで、すべてのメソッドに2つの注釈を付ける必要があります。
注釈プロセッサにフックして、@VisibleForTesting
の保存ポリシーを上書きすることはできますか?それとも、ビルドプロセスで既に遅すぎますか?
グアバの@VisibleForTesting
はRetentionPolicy.CLASS
を使用し、AndroidサポートアノテーションライブラリはRetentionPolicy.SOURCE
を使用します。私はポリシーを変更する要求を投稿することを検討していますが、それはおそらくパフォーマンスと非常にわずかに増加したファイルサイズのために、SOURCE
に設定されていると思いますか?
2つの注釈(@VisibleForTesting
および@Keep
)以外のオプションはありますか?