android - 如果它包含一个在混淆器中带有注释的字段,如何保持类的成员不受影响

标签 android google-cloud-firestore proguard obfuscation android-r8

如果类包含带注释的字段,我如何配置 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's toObject 使用的 DTO 类
我不想根据类名进行匹配,因为此规则将适用于许多类。

最佳答案

I just read about -keepclasseswithmembers ,这将等同于基于类内容的推断 @Keep:

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

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

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

关于android - 如果它包含一个在混淆器中带有注释的字段,如何保持类的成员不受影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63162818/

相关文章:

android - MPAndroidChart 如何显示所有 xaxis 值

Android Proguard postgresql 和 ssl 连接

android - 如何使用 proguard 获取发布构建 apk 文件

android - 在 Android 中将一系列原始图像转换为电影帧

java - Android Canvas 检查点是否在线

Firebase:从之前的导出中导入 firestore 数据库会触发 Cloud Functions 吗?

javascript - 在 url 中传递查询的安全性如何

android - Apache Legacy 的 Proguard 问题(不使用该库时)

android - 错误 : "Cannot make a static reference to the non-static method findViewById(int) from the type Activity"

android - 没有连接时不调用插入/删除文档回调的 Firestore 数据库