NoSuchMethodError с использованием обычного кодека в приложении Android - PullRequest
16 голосов
/ 01 марта 2011

Я добавил кодек commons из apache.org (commons-codec-1.4.jar) в eclipse для своего приложения для Android, следуя инструкции здесь .Там нет ошибки в коде.Но когда я запускаю приложение и вызываю функцию, использующую кодек, приложение останавливается и требует закрытия.

В logCat написано:

Среда выполнения Android: java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64String

строка кода: StringtmpStr = Base64.encodeBase64String (msg);// msg - это байт []

Приложение для минимальной версии SDK = 7 (Android 2.1), поэтому я не могу использовать Android Base64

AnyИдея, как я могу решить проблему?

Ответы [ 4 ]

8 голосов
/ 05 мая 2011

У меня возникла точно такая же проблема. Поэтому я начал просматривать исходный код Android, и, как выяснилось, Дон догадывается, что в Android есть реализация org.apache.commons.code.binary. он ошибается насчет возможности доступа к нему, вы можете, но его версия Apache Common 1.2, а не версия 1.4 или даже 1.5. Вы можете увидеть для себя в Android источник .

Также в качестве примечания, этот вопрос является дубликатом этого сообщения.

8 голосов
/ 01 марта 2011

Я не смог заставить работать кодек Commons на эмуляторе 2.1. В конце концов я сдался и сделал свой собственный, скопировав код из:

Кодер / декодер Base64

Это всего лишь около ста строк или около того.

4 голосов
/ 02 марта 2011

Я думаю, что это как-то связано с конфликтами имен внутри библиотек Android.

Я скопировал исходный код Java Base64 в свой проект в пространство имен org.apache.commons.codec.binary. Проект скомпилирован без проблем. Однако во время выполнения в симуляторе Android у меня была та же ошибка, java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64String.

Однако после того, как я изменил пространство имен на com.apache.commons.codec.binary вместо org, приложение работает как по волшебству. Я предполагаю, что в реализации Android используется org.apache.commons.codec.binary, и это не позволяет вам снова использовать его в своем коде.

0 голосов
/ 01 марта 2011

Причина, по которой у вас возникла проблема, заключается в том, что эти инструкции неверны, но должна присутствовать другая версия кодека commons-codec или Base64.

Насколько я понимаю, вам нужно поместить файл jarв каталог 'libs' в корне вашего проекта, чтобы убедиться, что он автоматически окажется в последнем apk.Как только вы поместите его туда, щелкните правой кнопкой мыши по файлу jar и перейдите в Build Path-> Add to build path.Должен работать оттуда.

...