Proguard и Netty на Android - PullRequest
       8

Proguard и Netty на Android

1 голос
/ 16 марта 2012

В основном я пытаюсь сделать то же самое, что и этот парень: Как я могу сказать proguard, что пакет не используется? , но я не могу добавлять комментарии.

Я продолжаю получатьтакие предупреждения:

Warning: org.jboss.netty.logging.Slf4JLogger: can't find referenced class org.slf4j.Logger

По сути, org.jboss.netty.logging.Slf4JLogger ссылается на сторонний библиотечный класс org.slf4j.Logger, который не является частью моего проекта.org.jboss.netty.logging.Slf4JLogger также не используется.

Поэтому я пытаюсь сказать proguard не загружать / использовать org.jboss.netty.logging.Slf4JLogger, как предложено Эриком Лафортуном, но постоянно терпеть неудачу при этом.Я добавил -injars libs/netty-3.3.1.Final.jar(!**Slf4JLogger) или -injars libs/netty-3.3.1.Final.jar(!**Slf4JLogger.class), но это, похоже, ничего не делает.Даже -injars libs/netty-3.3.1.Final.jar("!whatever is in here") дает те же результаты, поэтому я предполагаю, что эта опция ничего не делает ...

Как я могу сказать Proguard не рассматривать несколько конкретных классов в netty.jar?

1 Ответ

1 голос
/ 13 апреля 2012

Используя последнюю версию ADT (18.0), которая исправляет некоторые проблемы с интеграцией ProGuard (по сравнению с ADT 16.00), я смог успешно запустить свое приложение на основе Netty со следующими дополнительными настройками ProGuard:

 # Get rid of warnings about unreachable but unused classes referred to by Netty
-dontwarn org.jboss.netty.**

# Needed by commons logging
-keep class org.apache.commons.logging.* {*;}

#Some Factory that seemed to be pruned
-keep class java.util.concurrent.atomic.AtomicReferenceFieldUpdater {*;}
-keep class java.util.concurrent.atomic.AtomicReferenceFieldUpdaterImpl{*;}

#Some important internal fields that where removed     
-keep class org.jboss.netty.channel.DefaultChannelPipeline{volatile <fields>;}

#A Factory which has a static factory implementation selector which is pruned
-keep class org.jboss.netty.util.internal.QueueFactory{static <fields>;}

#Some fields whose names need to be maintained because they are accessed using inflection
-keepclassmembernames class org.jboss.netty.util.internal.**{*;}

Мои выводы о том, зачем нужна конкретная линия, могут быть не на 100% точными, и это определенно не обязательные решения, но, по крайней мере, это работает.Не стесняйтесь редактировать, если считаете, что можете это улучшить.

...