Android proguard, держи внутренний класс Inner class

Основной вопрос: Android Proguard, держать внутренний класс

Моя проблема с внутренним классом внутреннего класса

Один из SDK в моем проекте Android имеет класс 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 ответ

Я думаю, что вам не хватает спецификации класса, как показано в руководстве ProGuard.

Попробуйте заменить:

-keep class com.xxx.A

С:

-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
Другие вопросы по тегам