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. В конце концов я сдался и сделал свой собственный, скопировав код из:
Это всего лишь около ста строк или около того.
Я думаю, что это как-то связано с конфликтами имен внутри библиотек 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. Должен работать оттуда.