【问题标题】:How to configure ProGuard to keep names of inner class members?如何配置 ProGuard 以保留内部类成员的名称?
【发布时间】:2015-05-13 14:00:17
【问题描述】:

我想用 ProGuard 混淆我的应用程序,我还希望一些内部类的成员保留他们的名字。这是因为我在 Jackson 中使用这些类来转换 JSON。 我的来源:

// this class mainly serves as a container for a group of related inner classes
public class MyOuterClass
{
    public class IDontWantToKeepThisClassName1
    {
        public String IWantToKeepThisName1;
        public float IWantToKeepThisName2;
    }

    public class IDontWantToKeepThisName2
    {
        public IDontWantToKeepThisClassName1 IWantToKeepThisName3;
        public float    IWantToKeepThisName4;
    }

}

我希望上面的代码是不言自明的。我试图在 proguard-project.txt 中使用这个命令来实现这一点

-keepclassmembernames class com.myapppackage.MyOuterClass$**

但这不起作用。内部类成员仍然被混淆。 测试各种选项以尝试猜测正确的选项或语法需要花费大量时间,因为每次更改都需要包导出以查看它是否有效。

【问题讨论】:

    标签: android proguard


    【解决方案1】:

    我很确定这样的事情应该可以解决问题:

    -keepclassmembernames class com.myapppackage.MyOuterClass$** { *; }
    

    所以请仔细检查。 测试表明 { *; } 部分是必要的。虽然我无法解释为什么。 请有见识的人详细说明一下。

    【讨论】:

    • 谢谢。是的,我查过了。 { *; } 必须包括在内。虽然我觉得这很直观。也许有人可以添加解释。
    • 这是一个要保留的通配符,表示条件适用于所有行,您可以使用其他通配符来指定所有字段和所有方法。但从技术上讲,两者是相同的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 2012-06-13
    • 2014-10-28
    • 2013-10-22
    • 1970-01-01
    • 2013-03-06
    相关资源
    最近更新 更多