我使用ProGuard优化我的Android应用程序。但是对于Android检测测试,我需要一些(但不是全部)类来保留所有成员。我尝试了各种方法,最后一个是:
-keepclassmembers public class com.mycompany.myclass {
*;
}
但令人惊讶的是我仍然得到了
java.lang.NoSuchMethodError: com.mycompany.myclass.<init>
这里痛苦的部分是有两个构造函数,一个有很多参数。
有没有人知道正确的语法来保持类完全不变并且不受ProGuard的影响?
答案 0 :(得分:19)
-keepclassmembers
是正确的。出现问题是因为团队伙伴破坏了代码而构造函数确实不存在。
请注意,如果有一个更改,整个类已被优化,那么您应该使用-keep
作为kharles建议,但需要{*;}
以确保所有方法都保留在原位。
请注意,{*;}
仅用于测试。对于生产,应该使用更精细的方法。
我对任何遇到同样问题的人都提出质疑。
答案 1 :(得分:0)
试
-keep public class com.mycompany.myclass
(使用keep,而不是{*;})