如何告诉 ProGuard 保留私有字段而不指定每个字段

Posted

技术标签:

【中文标题】如何告诉 ProGuard 保留私有字段而不指定每个字段【英文标题】:How to tell ProGuard to keep private fields without specifying each field 【发布时间】:2014-06-15 09:53:35 【问题描述】:

这是我的课:

package com.tools.app.holiday;

public class Holiday   

    private String name;

    private Calendar dateFrom = Calendar.getInstance();

    private Calendar dateTo = Calendar.getInstance();

    ...

我可以通过将以下内容放入我的 ProGuard 规则文件中来保留这些私有字段:

-keepclassmembers class com.tools.app.holiday.Holiday 
    private java.lang.String name;    
    private java.util.Calendar dateFrom;
    private java.util.Calendar dateTo;

但我不想单独指定每个字段。我该怎么做?

附:我从Proguard keep classmembers 窃取了大部分内容,因为这个问题与我要问的问题很接近。

【问题讨论】:

【参考方案1】:

根据ProGuard documenation,通配符<fields> 匹配任何字段。因此它应该是这样的:

-keepclassmembers class com.tools.app.holiday.Holiday 
    private <fields>;    

如果您想在所有类中保留私有字段,请使用:

-keepclassmembers class * 
    private <fields>;    

【讨论】:

-keepclasseswithmembers class * @com.activeandroid.annotation.Column &lt;fields&gt;; 怎么样

以上是关于如何告诉 ProGuard 保留私有字段而不指定每个字段的主要内容,如果未能解决你的问题,请参考以下文章

如何使 ProGuard 保留整个(整个)类(带有字段和方法)而不使用“-keep”

如何告诉 ProGuard 保留用于 onClick 的函数?

如何将枚举类型字段保留在 proguard 中?

如何防止proguard完全混淆方法

使用 ProGuard 混淆私有字段

使用 ProGuard 进行文件混淆