android eclipse base64 apache-commons-codec

NoSuchMethodError usando el códec commonc en la aplicación de Android



eclipse base64 (4)

Agregué el códec de commons de apache.org (commons-codec-1.4.jar) en eclipse para mi aplicación de Android siguiendo las instrucciones here . No hay error en el código. Pero cuando ejecuto la aplicación y llamo a la función que usa el códec, la aplicación se detiene y necesita un primer plano.

En el logCat dice:

Tiempo de ejecución de Android: java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64String

la línea de código es: String tmpStr = Base64.encodeBase64String (msg); // msg es un byte []

La aplicación es para una versión mínima de SDK = 7 (Android 2.1), así que no puedo usar Android Base64

¿Alguna idea de cómo puedo solucionar el problema?


Creo que tiene algo que ver con los conflictos de nombres dentro de las bibliotecas de Android.

Copié el código fuente java de Base64 a mi proyecto en el espacio de nombres de org.apache.commons.codec.binary. El proyecto compilado sin ningún problema. Sin embargo, en el tiempo de ejecución en el simulador de Android, tuve el mismo error, java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64String.

Sin embargo, después de que cambié el espacio de nombres a com.apache.commons.codec.binary en lugar de org, la aplicación funciona como magia. Supongo que dentro de la implementación de Android, se usa org.apache.commons.codec.binary y no te permite usarlo en tu código nuevamente.


La razón por la que tiene un problema es porque esas instrucciones son incorrectas, pero debe haber una versión diferente de los comunes-códec o de la clase Base64 presente.

Mi entendimiento es que necesitas poner tu archivo jar en un directorio ''libs'' en la raíz de tu proyecto para asegurarte de que termine automáticamente dentro de la apk final. Una vez que lo coloques allí, haz clic derecho en el archivo jar y luego ve a Crear ruta-> Agregar para construir la ruta. Debería trabajar desde allí.


Tampoco pude hacer que el codec de commons se ejecute en un emulador 2.1. Al final me di por vencido e hice el mío, copiando el código de:

Codificador / decodificador Base64

Es sólo un poco más de cien líneas más o menos.


Experimenté exactamente el mismo problema. Así que comencé a buscar en el código fuente de Android, y resulta que la suposición de Don acerca de que Android tiene una implementación de org.apache.commons.code.binary es correcta. está equivocado acerca de la capacidad de acceder a él, puedes hacerlo, pero su versión 1.2 de apache commons, no la versión 1.4 o incluso 1.5. Puedes ver por ti mismo en la source Android.

También como nota, esta pregunta es un duplicado de esta publicación.