20

我使用 ProGuard 来优化我的 Android 应用程序。但是对于 Android 仪器测试,我需要一些(但不是全部)类来保留所有成员。我尝试了各种方法,最后一种是:

-keepclassmembers public class com.mycompany.myclass {
    *;
}

但令人惊讶的是我仍然得到

java.lang.NoSuchMethodError: com.mycompany.myclass.<init>

这里令人痛苦的部分是有两个构造函数,一个有很多参数。

有谁知道正确的语法来保持一个类完全不变并且不受 ProGuard 影响?

4

2 回答 2

23

嗯,到了告白时间。问题是胡说八道。-keepclassmembers是正确的。出现问题是因为一个队友破坏了代码,而构造函数确实不存在。

请注意,如果整个类都被优化掉了,那么您应该-keep按照 kharles 的建议使用,但{*;}需要确保所有方法都保持原位。

请注意,这{*;}仅用于测试。对于生产,应该使用更细粒度的方法。

我为任何有同样问题的人保留这个问题。

于 2011-04-08T09:25:52.203 回答
0

尝试

-keep public class com.mycompany.myclass

(使用保持,没有 {*;} )

于 2011-04-08T08:49:04.473 回答