Android proguard,保留Inner类的内部类

时间:2016-09-23 06:10:47

标签: java android android-proguard

家长提问:Android proguard, keep inner class

我的问题在于内部类的内部类

我的android项目中的一个SDK 有一个A类,它有两个静态内部类。发现它们在应用proguard后被剥离。

public class A{
  ....

  static class B{
    ...
    static class D {
        ....
    }

  }

  static class C{
    ...
  }
}

我的节目看起来像这样

-keepattributes Exceptions, InnerClasses
-keep class com.xxx.A
-keep class com.xxx.A$*

这可以防止B级,C级来自proguard。但是D级没有运气。我也试过-keep class com.xxx.A$**

1 个答案:

答案 0 :(得分:1)

我认为您缺少ProGuard manual中显示的Class规范。

尝试更换:

-keep class com.xxx.A

使用:

-keep class com.xxx.** {*;}

我正在将该规则与以下文件一起使用,并且在带有构建工具25.0.1的Android Studio 2.2.3上运行正常(以防这些可能影响正在使用的ProGuard版本)

<强> A.java

package com.xxx;

public class A {
  ....

  public class B {
    ....

    public class C {
    ....
    }
  }
}

正如您所看到的,我的文件和您的文件之间唯一真正的区别在于我的内部类是公共的和非静态的。

如果不起作用

您始终可以使用不带通配符的规则。以下将解决这个问题:

-keep class com.xxx.A$B$D