如何在混淆内部类时保留外部类

时间:2013-09-25 02:42:59

标签: proguard

我有一个看起来像这样的课程:

public class MyClass {
  private class MyInnerClass {
    public void someFunc() { }
  }

  public void usefulMethod() {
    ... some stuff...
    nativeUsefulMethod();
  }

  private native void nativeUsefulMethod();
}

我需要保留所有本机函数的方法名称以及包含它们的类,以便本机代码正常工作。好像没问题:

-keepnames class * {
  native <methods>;
}

当我查看生成的jar时,我看到MyClass和nativeUsefulMethod()仍然存在,而UsefulMethod()已被混淆。好。但是,内部类仍然被命名为“MyClass $ MyInnerClass”。它不包含本机方法,所以我希望它被称为“MyClass $ a”或只是“a”。

我测试过将“-keepnames”更改为“-keepclassmembernames”,并且两者的类名都被混淆了。肯定是这个指令保留了内部类名。有没有办法混淆外部名称,而不是内部类名称?

1 个答案:

答案 0 :(得分:1)

本机方法的正确配置是:

-keepclasseswithmembernames class * {
    native <methods>;
}

请参阅ProGuard手册&gt;例子&gt; Processing native methods