NoSuchMethodError с использованием кодека commonc в приложении для Android

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

В logCat говорится:

Android Runtime: java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64String

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

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

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

Ответ 1

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

Кодировщик/декодер Base64

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Я понимаю, что вам нужно поместить ваш файл jar в каталог "libs" в корне вашего проекта, чтобы он автоматически попадал в конечный apk. После того, как вы разместите его, щелкните правой кнопкой мыши файл jar, а затем перейдите в "Путь сборки" → "Добавить для сборки". Должен работать оттуда.