2016-05-18 5 views
0

Я разрабатываю приложение на устройстве JellyBean, и мне нравится новая функция мгновенного запуска студии Android. Однако использовать его на устройстве JellyBean требуется приложение, не поддерживающее мультисайты. Мне удалось сократить размер dex, удалив несколько аргументов.Как использовать библиотеку Android без log4j depency?

Проблема заключается в том, что мне бы очень хотелось опустить библиотеку log4j, которая принимает меня за ограничение dex, но мне нужно использовать другую библиотеку (gpxParser), которая вызывает вызовы log4j и сбой при этой ошибке во время во время выполнения.

Caused by: java.lang.NoClassDefFoundError: org.apache.log4j.Logger 

Я пробовал некоторые проварды сейчас, но безрезультатно. Приложение работает отлично, без включенного log4j, пока я не ударил вызов из библиотеки, которая его использует. Я искал по всему Интернету, но я не могу найти способ сделать это.

+0

Если эта библиотека открыта с открытым исходным кодом, вы можете попытаться создать свою собственную версию этой библиотеки там, где вы удалите все вызовы log4j. –

+0

В соответствующей библиотеке указано, что она лицензирована под LGPL, и автор предоставляет источник. Могу ли я внести эти изменения? Я планирую опубликовать приложение в Google с возможностью монетизации. – rxj

+0

Вы можете внести изменения для себя, чтобы убедиться, что log4j не работает. Если да, то вы будете рассматривать дальше, я не помню, что LGPL хочет, возможно, вам придется добавить имя автора где-то –

ответ

0

Существует файл gpxparser.properties и класс AndroidLogger.

Посмотрите, можете ли вы получить эти два вместе.

+0

Спасибо, я пытался выяснить, что делать с файлом, так как вы отправили свой ответ, но я в убыток. Я понимаю, что вы хотели, чтобы я понял это для себя, но я уже потратил слишком много времени на эту проблему, и я отправил ее в качестве последнего средства в надежде на прямой ответ. Должен ли я сам создавать библиотеку и каким-то образом предоставлять файл свойств? Или я помещаю файл где-то в свой проект, и пусть град знает об этом? Вы, кажется, знаете, что делать, и я бы с радостью по достоинству оценил более подробный ответ. – rxj

+0

Ну, я не знаю больше тебя. Имея еще один взгляд, кажется, что lib пытается загрузить файл конфигурации (https://sourceforge.net/p/gpxparser/code/HEAD/tree/trunk/GPXParser/src/org/alternativevision/gpx/ log/FacadeLogger.java # l72), и, если этого файла нет, следует вернуться к журналу no-op. Поэтому я думаю, что это действительно должно выполняться, когда нет 'gpxparser.properties'. – JimmyB

0

Вы можете настроить Proguard для удаления вызовов для фреймворков регистрации, таких как Log4j. Поскольку Proguard работает на уровне байтового кода, не имеет значения, есть ли у вас исходный код библиотеки или нет.

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

Существует пример на Stackoverflow для системы Android Log: Removing Log call using proguard

Вы можете адаптировать этот пример и изменить его в соответствии org.apache.log4j.Logger и другие классы от log4j вместо.