2

我是使用 Proguard 的新手(这似乎非常有用!)。我希望使用起点(例如公共接口)创建一个最小的 JAR(没有任何混淆),并希望 proguard 能够传递地获取依赖类。然而,依赖类似乎缺少私有成员,它的公共 getter/setter 和注释只有构造函数和 toString 方法可用。具体来说,我的 SpecialService 接口指的是 SpecialObject(可能还有许多其他接口)。我想知道是否可以仅将 SpecialService 作为一个保留类提及,并且应将其所有相关(非库)类(具有所有属性 - 没有混淆或优化)拉到输出 jar 中。

<options>
    <option>-keepattributes</option>
    <option>-keep @javax.ws.rs.Path public class com.kilo.SpecialService { private public protected *;}</option>
</options>

我已经尝试了所有配置,但它似乎不起作用。

特殊服务.java:

@GET
@Path("someComplexObjectsWithIntInputs")
List<SpecialObject> getSomeComplexObjectsWithIntInputs(
        @QueryParam("ids") List<Integer> ids);

特殊对象.java

public class SpecialObject {
private String name;
private Integer id;
private Date date;
public SpecialObject() {
}
public SpecialObject(String name, Integer id, Date date) {
    this.name = name;
    this.id = id;
    this.date = date;
}
public String getName() {
    return name;
}
public Integer getId() {
    return id;
}
public Date getDate() {
    return date;
}
public String getFoo() {
    return "foo";
}
public void setName(String name) {
    this.name = name;
}
public void setId(Integer id) {
    this.id = id;
}
public void setDate(Date date) {
    this.date = date;
}
@Override
public String toString() {
    return "SpecialObject [name=" + name + ", id=" + id + ", date=" + date
            + "]";
}

输出 SpecialObject.java:

/*    */ public class SpecialObject
/*    */ {
/*    */   public String toString()
/*    */   {
/* 56 */     return "SpecialObject [name=" + null + ", id=" + null + ", date=" + null + "]";
/*    */   }
/*    */ }

提前致谢!

如果有人想玩,我已经添加了一个示例设置@ https://github.com/kilokahn/proguard-tester/blob/master/proguard-tester-parent/proguard-tester-rs-api/pom.xml

4

1 回答 1

2

想出简单的配置来做到这一点。愚蠢的我!

<option>-keepclassmembers class * { *;}</option>

更新了设置以反映这一点。

于 2013-07-24T09:45:29.540 回答