如何配置 ProGuard 以保留内部 class 成员的名称?

How to configure ProGuard to keep names of inner class members?

我想用 ProGuard 混淆我的应用程序,我还希望一些内部 classes 的成员保留他们的名字。这是因为我在 Jackson 中使用这些 classes 与 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$**

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

我很确定像这样的东西应该可以解决问题:

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

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