Lovesuper
@Lovesuper
pyhon, java, swift программист

Android. Почему репортится странная ошибка в runtime'е приложения?

Понадобилось подключить в проект библиотеку по работе с BitTorrent протоколом. Работаю на Android Studio 1.0.2 (osx), JDK8. Подключил через gradle maven-репозиторий ttorrent:1.4 и только начал радоваться жизни, как внутри ttorrent возникла потрясающая ошибка:
java.lang.NoSuchMethodError: No static method encodeHex([BZ)[C in class Lorg/apache/commons/codec/binary/Hex; or its super classes (declaration of 'org.apache.commons.codec.binary.Hex' appears in /system/framework/ext.jar)

Пошел смотреть исходные коды dependency библиотеки org.apache.commons.codec (куда и ходит ttorrent за Hex) на которые ссылается студия, там на меня смотрит мой "не найденный" метод. У меня разрыв шаблона: в исходном коде библиотеки метод есть (доступный, все дела), а runtime ругается, мол нет такого метода. Как такое может быть? И что прикажете делать? UPD: Попробовал подключить другую библиотеку -- jBittorrentAPI, там та же история. При попытке исполнить хекс, валится с той же ошибкой. Что не так с моим окружением?
  • Вопрос задан
  • 2613 просмотров
Решения вопроса 1
Lovesuper
@Lovesuper Автор вопроса
pyhon, java, swift программист
На самом деле решение оказалось более сложным, чем я думал. Итак, начнем с того, что я наткнулся в интернете на статью Dieser Beitrag'a, из которой понятно, что не у одного меня были похожие проблемы. Все дело оказалось в том, что внутри самой операционной системы Android УЖЕ есть некоторые библиотеки, которые имеют больший приоритет использования, нежели загружаемые с зависимостями вместе с приложением. Среди них присутствует и моя org.apache.commons.codec. Да-да, такие дела. Решить проблему можно двумя способами, либо выкачать сорцы необходимой вам библиотеки и при помощи сборщика переименовать проект (например org.apache.commons.codec в org.apache.commons.codec.android), собрать из него .jar-ник, включить его в проект и в коде импортировать нужные классы только из "нашей" библиотеки, либо просто вытащить необходимый класс в свой проект и не тащить за собой ненужные мегабайты кода. Впрочем, я поступил именно так.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Losted
@Losted
Software Architect
Проверьте нету ли у вас нескольких jar-ников с Hex в classpath. Вероятнее всего класс подгружается не оттуда, откуда вы ожидаете.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы