ProGuard:保留内部静态类,但重命名父类

时间:2013-01-29 16:58:48

标签: android proguard

我想知道是否可以保留公共静态内部类的名称,但重命名父类名。

我的代码如下所示:

public class MyDao extends AbstractDao {

    public static final String TABLENAME = "BOX_DOWNLOAD";

    public static class Properties {
        public final static Property ID = new Property(0, Long.class, "ID", true, "ID");
        public final static Property Name = new Property(1, String.class, "name", false, "NAME");
        public final static Property Done = new Property(2, Boolean.class, "done", false, "DONE");
        // SOME MORE CONSTANTS
    };

    // SOME CODE WHICH CAN BE OBFUSCATED

}

我希望ProGuard取代: MyDao(className)

the PROPERTIES' variables (ID, Name, Done)

我希望ProGuard不要替换:

TABLENAME (variable name)
PROPERTIES (className only) 

我试过这个

-keepclassmembers class * extends de.greenrobot.dao.AbstractDao {
  public static <fields>;
  public static class *;
}

但这不起作用。 classNames没有混淆。

//编辑 我忘了说像MyDao这样的课程。例如。 MyDao1,MyDao2等

我想使用通配符。

2 个答案:

答案 0 :(得分:2)

(CFR)。 ProGuard手册&gt;用法&gt; Keep Options

-keepclassmembers class de.greenrobot.dao.MyDao {
    String TABLENAME;
}

-keep class de.greenrobot.dao.MyDao$Properties

更新:当保留名称“MyDao $ Properties”时,ProGuard的当前版本似乎也保留了名称“MyDao”(即使未保留InnerClasses属性)。这比严格必要的要保守一些。

答案 1 :(得分:0)

我制作了以下脚本,对我有用。

-keep class my.dao.package.*$Properties {
    public static <fields>;
}

-keepclassmembers class my.dao.package.** {
    public java.lang.String TABLENAME;    
}

我已经使用了通配符来实现内部类。