Android proguard:保留内部类的内部类

5

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

我的问题涉及到内部类的内部类

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

public class A{
  ....

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

  }

  static class C{
    ...
  }
}

我的proguard文件看起来像这样:
-keepattributes Exceptions, InnerClasses
-keep class com.xxx.A
-keep class com.xxx.A$*

这可以防止类B、C被混淆,但对于类D没有效果。我也尝试了-keep class com.xxx.A$**,但仍然不行。


@TGMCians 不起作用。 - Mahendran
尝试使用-keep class com.xxx.*$* - Ajay S
$ 也不起作用,但是 -dontwarn com.xxx.** 让我的构建成功了。我想我应该稍后处理这个问题。 - Mahendran
你需要使用通配符表达式吗?还是只需要针对一个类的特定答案? - Nicolás Carrasco-Stevenson
1个回答

1
我认为你忘了在ProGuard手册manual中所示的类规范。
尝试替换为:
-keep class com.xxx.A

With:

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

我正在使用这个规则和以下文件,在Android Studio 2.2.3上,使用构建工具25.0.1时正常工作(以防万一这些可能会影响正在使用的ProGuard版本)

A.java

package com.xxx;

public class A {
  ....

  public class B {
    ....

    public class C {
    ....
    }
  }
}

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

如果那不起作用

您总是可以使用没有通配符的规则。以下内容可以解决问题:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接