2011-03-30 16 views
9

Estoy tratando de usar un archivo jar de terceros dentro de una aplicación de Android. He podido usar algunas de las clases en el archivo jar muy bien. Sin embargo, una de las clases hace referencia a algunas clases de Java que no parecen ser compatibles con dalvik vm. Estos son algunos de los errores que estoy viendo en LogCat:¿Existe una solución para el error de Android "No se puede resolver el método virtual java/beans/PropertyDescriptor"?

Unable to find class referenced in signature java/beans/PropertyDescriptor. 
Unable to resolve virtual method java/beans/PropertyDescriptor.getName(). 
Unable to resolve virtual method java/beans/PropertyDescriptor.getReadMethod(). 
Unable to resolve static method java/beans/Introspector.getBeanInfo(). 
Unable to resolve exception class java/beans/IntrospectionException. 

Parece ser que las clases de Java relacionados con la introspección y la reflexión no son compatibles con Dalvik. Me gustaría descubrir dos cosas. ¿Es ese un plan para apoyar esto en Dalvik en el futuro cercano? En segundo lugar, ¿alguien tiene una sugerencia para un trabajo alternativo que solucione este problema?

Respuesta

9

Parece que las clases de Java relacionadas con la introspección y la reflexión no son compatibles con dalvik.

No sobre una base, AFAIK. Uno de los objetivos del equipo central de Android es mantener el firmware pequeño para reducir el costo de los dispositivos. Un efecto secundario de esto es incluir solo las clases de java.* y javax.* que consideren esenciales. Originalmente, ninguno de java.beans.* existía en Android; ahora, algunas clases e interfaces están disponibles, pero no todo el paquete.

¿Es ese un plan para apoyar esto en Dalvik en el futuro cercano?

Sabrá cuando el resto de nosotros sepa, es decir, solo si aparece en un lanzamiento.

En segundo lugar, ¿alguien tiene una sugerencia para un trabajo que evitaría este problema?

si el frasco de terceros es un proyecto de código abierto:

  1. agarre las necesarias java.beans clases de Apache Harmony y los puso en su proyecto
  2. ellos Refactor en un paquete separado (por ejemplo, bondy.beans), ya que a Android no le va a gustar mucho si intenta cargar las clases java.beans en su proyecto
  3. Modifique el archivo JAR de terceros para usar su edición refactorizada de las clases

Es posible que jarjar también pueda hacer algo al respecto: aún no he usado la herramienta y no conozco el alcance de sus capacidades.

+0

Este consejo es perfecto. Otros detalles técnicos de Jarjar se describen aquí: http://code.google.com/p/dalvik/wiki/JavaxPackages –

+1

Modificar tarros de 3ª parte solo para complacer a Android es muy doloroso (básicamente tienes que reconstruirlos desde la fuente). Es una pena que Android no admita algo básico como BeanInfo. –

1

Apache harmony se retiró hace mucho tiempo. Estoy usando openbeans. Y soluciona todo el problema para mí.

Cuestiones relacionadas