Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

java - Keep specific Annotation with proguard

I have two types of annotation in my project: Annotation1 and Annotation2. Both are runtime annotations. So, my question is how to keep only Annotation1 and strip Annotation2?

Example:

class Test {
    @Annotation1
    @Annotation2
    String name;
}

I want Annotation2 to be removed from all fields and Annotation1 to be kept everywhere.

I can't find whether this is possible. I only know how to keep all annotations using:

-keepattributes *Annotation*

Is this possible? If not, why?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

ProGuard automatically removes annotations from the classes/fields/methods if the corresponding annotation classes are not used (retrieved, cast, invoked,...) elsewhere. You can't force ProGuard to remove annotations, but you can tell it to keep seemingly unused annotations:

-keep @interface com.example.MyAnnotation

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...