正确的 Proguard 配置以保持静态内部类
Posted
技术标签:
【中文标题】正确的 Proguard 配置以保持静态内部类【英文标题】:Proper Proguard configuration to keep static inner class 【发布时间】:2013-10-22 11:31:18 【问题描述】:我有以下几点:
public class A extends B
static class C
Object field1;
int field2;
boolean field3;
我无法通过反射获得 C 类!
我尝试了以下方法:
-keep class com.path.to._class.A$** *;
-keep class com.path.to._class.A$* *;
-keep class com.path.to._class.A$C *;
-keep class com.path.to._class.A$C
<fields>;
-keep class com.path.to._class.A$C
Object field1;
int field2;
boolean field3;
以上都不起作用。我在这里做错了什么吗?
也许值得一提的是 B 扩展了 View...
【问题讨论】:
不用说,不运行 Proguard 就可以了... 【参考方案1】:所有这些都应该有效(仅 Object -> java.lang.Object)。您可以检查 bin/proguard/seeds.txt 以查看它们是否已列出。否则,您可能正在修改错误的配置文件,或者名称中可能存在拼写错误。
【讨论】:
由于某种原因,添加 -keepattribute InnerClasses 完成了工作,但为什么呢?它也搞砸了其他内部类。 -keep 选项保留类的原始名称,这足以正常反射。选项 -keepattributes InnerClasses 保留仅在不太常见的反射类型中需要的可选属性。所以这取决于你的代码和你得到的错误。【参考方案2】:-keep public class com.path.to._class.A$C *;
这对我有用,发布得很晚,但仍然可以帮助其他面临这个问题的人
【讨论】:
以上是关于正确的 Proguard 配置以保持静态内部类的主要内容,如果未能解决你的问题,请参考以下文章
Android proguard,保持Inner class的inner class
如果在proguard中包含带有注释的字段,如何保持类的成员不受影响