Proguard и Netty на Android

В основном я пытаюсь сделать то же, что и этот парень: Как я могу сообщить 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?


person user462982    schedule 16.03.2012    source источник
comment
Сейчас я использую netty 4, и, как выяснилось выше, он не работает с netty 4, может ли кто-нибудь помочь? Большое спасибо.   -  person xeoshow    schedule 19.10.2013


Ответы (1)


Используя последнюю версию 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%, и это определенно не обязательное решение, но, по крайней мере, оно работает. Не стесняйтесь редактировать, если вы думаете, что можете улучшить это.

person user462982    schedule 13.04.2012