NoSuchMethodError с использованием обычного кодека в приложении Android

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

В logCat написано:

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

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

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

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

4 ответа

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

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

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

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

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

Я думаю, что это как-то связано с конфликтами имен внутри библиотек 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, и это не позволяет вам снова использовать его в своем коде.

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

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

Другие вопросы по тегам