Исключить некоторые классы из правил хранения Proguard - PullRequest
4 голосов
/ 07 ноября 2011

У меня есть библиотека, которая должна быть запутана с помощью ProGuard.«Библиотечный режим» практически применим для моего случая использования, то есть почти нормально хранить все открытые и защищенные классы и их участников.Однако из-за требований видимости Java некоторые члены не могут быть сделаны пакетными или закрытыми, и поэтому они являются публичными классами, хотя их не должно быть в библиотеке.Я хотел бы, чтобы они были запутаны, чтобы было более ясно, что эти классы не принадлежат общедоступным API, а также чтобы получить лучшую запутанность и меньшие фляги библиотеки.Есть ли способ исключить некоторые элементы из правила "keep" proguard без указания каждого из этих элементов по имени (используя '!').В идеале я хотел бы аннотировать эти классы и члены с помощью пометки тегами, но насколько я понимаю, Proguard можно сказать только хранить элементов с определенными аннотациями.

1 Ответ

4 голосов
/ 08 ноября 2011

Вы можете только сохранить пунктов действительно. Если вы хотите исключить определенных учеников, вы должны сделать это, перечислив или пометив учеников, которых вы хотите сохранить. При указании имени класса, вы можете предоставить список, опционально с "!" исключить имена. При указании имени и типа члена класса это невозможно. Тем не менее, в обоих случаях вы можете использовать подстановочные знаки. Если вы выбираете специальные имена для своих внутренних классов, это может сработать:

-keep public class * {
  public protected *** !myInternalField*;
  public protected *** !myInternalMethod*(...);
}
...