我想知道是否可以保留公共静态内部类的名称,但重命名父类名。
我的代码如下所示:
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等
我想使用通配符。
答案 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;
}
我已经使用了通配符来实现内部类。