プロガードが注釈に基づいて物事を保持するのに問題があります(Androidの下)。
com.example.Keep という注釈があります。
@Target({ ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.CONSTRUCTOR })
public @interface Keep {
}
私はリフレクションによってのみ構築されるクラスを持っています:
public class Bar extends Foo {
@com.example.Keep
Bar(String a, String b) { super(a, b); }
//...
}
期待どおりに動作します(難読化されたクラス名を使用しても、クラスはコンストラクターを保持します)私のプロガード構成に以下が含まれている場合:
-keepattributes Signature,*Annotation*,SourceFile,LineNumberTable
-keepclassmembers class ** extends com.example.Bar {
<init>(...);
}
それを次のように変更しようとすると、コンストラクターが削除されます。
-keepattributes Signature,*Annotation*,SourceFile,LineNumberTable
-keepclassmembers class ** extends com.example.Bar {
@com.example.Keep <init>(...);
}
私自身の注釈とプロガードのannotation.jar注釈の両方で同じ動作が見られます。Foo の のインポートから注釈名をコピーして貼り付けたKeep
ので、タイプミスや不適切なインポートではないと確信しています。
私が欠けているかもしれないものを誰かが考えることができますか?