【问题标题】:Proper Proguard configuration to keep static inner class正确的 Proguard 配置以保持静态内部类
【发布时间】: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 就可以了...

标签: java android proguard inner-classes


【解决方案1】:

所有这些都应该有效(仅 Object -> java.lang.Object)。您可以检查 bin/proguard/seeds.txt 以查看它们是否已列出。否则,您可能正在修改错误的配置文件,或者名称中可能存在拼写错误。

【讨论】:

  • 由于某种原因,添加 -keepattribute InnerClasses 完成了工作,但为什么呢?它也搞砸了其他内部类。
  • -keep 选项保留类的原始名称,这足以正常反射。选项 -keepattributes InnerClasses 保留仅在不太常见的反射类型中需要的可选属性。所以这取决于你的代码和你得到的错误。
【解决方案2】:
-keep public class com.path.to._class.A$C {*;}

这对我有用,发布得很晚,但仍然可以帮助其他面临这个问题的人

【讨论】:

    猜你喜欢
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多