如果类的成员包含带有 proguard 注释的字段,如何保持类成员不变



如果类包含带注释的字段,我如何配置proguard/R8以保留该类的所有字段和方法?

我有一个类

public class MyDocument {
@DocumentId
private String foo;
private String bar;
public getFoo() { .. }
public getBar() { .. }
}

我能够使它不删除带有的foo

-keepclassmembers class * {
@a.b.c.DocumentId <fields>;
@a.b.c.DocumentId <methods>;
}

但它仍然删除了getBar((

有没有办法说";如果同一类中的某个字段包含注释,则不要删除该类中的任何方法或字段?

这里的用例是它们是firestore的toObject
使用的DTO类。我不想根据类的名称进行匹配,因为这个规则将应用于许多类。

您应该能够使用这样的条件规则:

-if class * {
@a.b.c.DocumentId *** *;
}
-keep class <1> {
*;
}

确切地说,如果一个类有一个带注释的字段,那么保留该类的所有成员。

我刚刚读到关于-keepclasseswithmembers的文章,它相当于根据类的内容推断出的@Keep

-keepclasseswithmembers class * { 
@a.b.c.DocumentId <fields>;
}

真正归结为-keepclassmembers的一个更严格的替代方案是用r8可以检测到的东西来注释DTO(例如,retention=runtime的注释(,然后只针对规则中的注释:

-keepclassmembers @a.b.c.Dto class *

相关内容

  • 没有找到相关文章

最新更新