Cuando intento exportar mi apk con Proguard tengo una gran cantidad de errores (más de 400) similares a:Proguard problemas con archivos jar, ¿cómo encontrar el jar faltante?
Warning: org.codehaus.jackson.jaxrs.JsonMappingExceptionMapper: can't find superclass or interface javax.ws.rs.ext.ExceptionMapper
y
org.codehaus.jackson.xc.DataHandlerJsonDeserializer$1: can't find superclass or interface javax.activation.DataSource
estoy usando el Jackson Json library, y los errores parecen estar relacionados a ese.
investigando este error me encontré con lo siguiente de Proguards FAQ:
Si hay referencias no resueltas a clases o interfaces, es muy probable que se olvidó de especificar una biblioteca esencial. Para un procesamiento adecuado, se deben especificar todas las bibliotecas a las que hace referencia su código, incluida la biblioteca de tiempo de ejecución de Java. Para especificar bibliotecas, use la opción -libraryjars.
Buscando en el SO me encontré con un montón de preguntas sin respuestas relacionadas con este, pero la sensación general era que el archivo jar que estoy usando (en este caso Jackon JSON) se apoya en más bibliotecas y necesitan ser agregado al archivo de configuración de Proguard de alguna forma.
Sin embargo, no puedo encontrar la manera de determinar qué frascos se necesitan y dónde se encuentran. Las advertencias mencionar una gran cantidad de diferentes paquetes como javax.ws.rs.ext, org.joda.time, org.codehaus.stax2, javax.xml.stream, etc.
- ¿Cómo determino lo tarros contener esos paquetes? Por ejemplo, ¿qué jar se requiere para las clases javax.ws.rs.ext. **?
- ¿Cómo averiguo dónde están esos frascos y qué ruta usaría con -libraryjars en Proguard?
Gracias mucho
Editar: que deben también mencionar que estoy usando una configuración Android Library Project. Los archivos jar están en el proyecto principal de la Biblioteca, y el proyecto real de trabajo tiene sus rutas de compilación incluidas las jarras en el proyecto de la Biblioteca. No sé si eso hace una diferencia, pero pensé que debería mencionarlo.
actualización sólo para probar, que elimina por completo los Jackson lejos de la trayectoria de la estructura y de mi código y ahora Proguard finaliza correctamente. Las preguntas siguen siendo ... ¿Cuál es el enfoque correcto para manejar estos errores?
¿El asistente de exportación de Android en Eclipse agregar automáticamente el directorio/lib/frascos de PROGUARD o hacer que todos tienen que ser añadido manualmente en el archivo de configuración Proguard así:
-libraryjars C:/Project/lib/somjar.jar
Yo probé que para el jackson uno pero no hizo ninguna diferencia. ¿Esto significa que también tengo que encontrar todos los frascos que se necesitan para las clases mencionadas en las advertencias y agregarlas? ¿Estarían en el SDK o en la instalación de Java?
Lo siento si estas son preguntas estúpidas, pero he estado tratando de resolver esto durante las últimas dos horas y no tengo ni idea de qué hacer.
Gracias de nuevo
actualización de nuevo
Así que más la búsqueda, combinado con la sugerencia de Benjamín, he encontrado algunas de las clases que faltan estaban en rt.jar, que está en carpeta de la liberación del JDK . Así que acabé añadiendo
-libraryjars <java.home>/lib/rt.jar
Para el archivo proguard.cfg y traje de las advertencias de 485 a 204. Hey, yo supongo que es algo ... Las advertencias restantes describen las clases que no puedo encontrar en absoluto. La aplicación funciona bien sin ejecutar proguard, por lo que estas clases deben estar en algún lugar ¿verdad? ¿O son estas advertencias con las que debería usar -dontwarn
?
Las restantes clases son en estos paquetes:
org.joda.time.
org.codehaus.stax2.
javax.ws.rs.
Así que ahora sólo necesito una manera de averiguar:
- Lo frascos tienen estas clases
- ¿Dónde están estos frascos por lo que puede incluirlos en el archivo de configuración proguard
La primera página de Jackson que enlazas especifica que Jackson tiene ** dependencia ** externa. ¿Estás seguro de que el problema es con Jackson JSON? – SyntaxT3rr0r
@Syntax, eso es lo que pensé, pero las 485 advertencias son * org.codehaus.jackson.something: no se puede encontrar la clase referenciada something.else * Ninguna de las otras bibliotecas que estoy usando da advertencias. Sin embargo, en respuesta a tu pregunta, no, no estoy seguro de que el problema sea con Jackson. Simplemente no tengo otras pistas en este punto. – cottonBallPaws