关于java:Android proguard,保持内部类的内部类

Android proguard, keep inner class of Inner class

父问题:Android proguard,保持内部类

我的问题是内部阶级的内部阶级

我的android项目中的一个SDK包含一个类A,该类具有两个静态内部类。 发现在使用proguard后将其剥离。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class A{
  ....

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

  }

  static class C{
    ...
  }
}

我的护卫看起来像这样

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

这阻止了B,C类的保护。 但是D类没有运气。我也尝试过-keep class com.xxx.A$**


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

尝试更换:

1
-keep class com.xxx.A

带有:

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

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

A.java

1
2
3
4
5
6
7
8
9
10
11
12
13
package com.xxx;

public class A {
  ....

  public class B {
    ....

    public class C {
    ....
    }
  }
}

如您所见,我的文件与您的文件之间唯一真正的区别是我的内部类是公共的并且是非静态的。

如果那不起作用

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

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