如何配置 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$** { *; }
所以请仔细检查。
测试表明 { *; } 部分是必要的。虽然我无法解释为什么。
请有识之士详细说说。
我想用 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$** { *; }
所以请仔细检查。 测试表明 { *; } 部分是必要的。虽然我无法解释为什么。 请有识之士详细说说。