Как я могу сказать proguard, что пакет не используется? - PullRequest
5 голосов
/ 12 сентября 2011

Я пытаюсь настроить proguard для моего проекта Android. Мы используем некоторые части библиотеки netty в нашем коде, и я хотел бы использовать Proguard для полного удаления фрагментов кода, которые, я знаю, не используются.

Есть ли какой-нибудь способ сказать proguard, что пакет (или класс) никогда не используется и поэтому не должен включаться в выходные JAR-файлы? Обратите внимание, что я не говорю об исключении некоторого кода из обфускации (что и делают опции конфигурации -keep), я говорю о полном удалении класса из вывода .

Редактировать : Как подсказывает pst ниже, я попытался использовать аргумент -whyareyoukeeping, чтобы определить путь к коду, который Proguard использует для определения класса. Это не меняет вывод десятков предупреждений.

Я также попытался использовать фильтр файлов на -outjars, как это было предложено pst. Это также не привело к изменениям, так как алгоритм все еще предполагает, что класс будет загружен, и фильтр применяется только после того, как «используемые» классы определены неправильно.

Для ясности: предупреждения приходят от классов в сторонних библиотеках, которые мы включили в наш проект Android. Мы не выполняем никакого кода, который будет загружать эти классы, и если proguard находит путь к коду, где он предполагает, что эти классы загружены, я хотел бы прямо сказать, что он не использует эти классы.

1 Ответ

2 голосов
/ 18 сентября 2011

Альтернативой указанию фильтра на outjars может быть указание фильтра на инъекциях:

-injars in.jar(!unwanted/package/**)

Таким образом, вы не будете без необходимости перетаскивать какие-либо классы, на которые ссылается этот пакет, поскольку фильтрация выполняется перед любой обработкой.

ProGuard теперь будет предупреждать о пропущенных классах, поэтому вы должны указать, что все в порядке:

-dontwarn unwanted.package.**

Вы должны быть осторожны с этими опциями, поскольку подавление предупреждений не обязательно устраняет проблемы. Как писал pst, вы получите NoClassDefFoundsErrors, если отфильтруете классы, которые действительно необходимы.

...