0

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

我的代码如下所示:

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(类名)

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 *;
}

但这不起作用。类名没有被混淆。

// 编辑我忘了说有几个像 MyDao 这样的类。例如。MyDao1、MyDao2 等

我想使用通配符。

4

2 回答 2

2

参照。ProGuard 手册 > 使用 >保留选项

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

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

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

于 2013-01-29T20:57:42.013 回答
0

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

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

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

我在内部类中使用了通配符,这很有效。

于 2015-02-05T10:53:48.943 回答