Использование jars, которые используют классы java.beans (Introspector, BeanInfo или PropertyDescriptor)

У меня есть сторонняя банка ( которую я не могу изменить ), которая использует java.beans.Introspector , java.beans.BeanInfo и java.beans.PropertyDescriptor .

Как я могу использовать эту банку в приложении для Android?

Он не загружает класс (который использует Introspector ) из 3-й партийной банки:

 WARN/dalvikvm(780): VFY: unable to resolve static method 6325: Ljava/beans/Introspector;.getBeanInfo (Ljava/lang/Class;)Ljava/beans/BeanInfo; WARN/dalvikvm(780): VFY: unable to resolve exception class 962 (Ljava/beans/IntrospectionException;) WARN/dalvikvm(780): Verifier rejected class Lorg/thirdpartyjar/SomeClass; 

Solutions Collecting From Web of "Использование jars, которые используют классы java.beans (Introspector, BeanInfo или PropertyDescriptor)"

Понятно, что пакет java.beans не работает на Android. И общим решением является переупаковка как java.beans, так и jar, зависящая от них, чтобы использовать другое имя пакета вместо java.beans. Это как раз то, что ранее упоминалось в openbeans. И интересный qoute из сообщения об ошибке android: If you find that you cannot do this, then that is an indication that the path you are on will ultimately lead to pain, suffering, grief, and lamentation.

Чтобы избежать этого пути, я бы начал с изучения вариантов использования openbeans и попыток заставить сторонних разработчиков использовать их. Из того, что вы пишете, неясно, нельзя ли изменить банку или не разрешить изменять (вы упомянули оба). Я не знаю юридических последствий изменения банок, но технически это всегда возможно, например, попробовать классы с обратным инженером, сделать некоторое время с инструментами с чем-то вроде aspectj. Если это не разрешено, я думаю, что можно использовать инструментарий runtime, например, dexmaker может создать прокси для вашего стороннего класса, который использует java.beans, и вы можете переопределить часть этого класса.

Также немного погулял по теме, я это увидел. Они просто используют пакет java.beans и компилируют его для Android. Это кажется хрупким для меня, но похоже, что он работает.

К сожалению, это не решение, просто идеи, которые я хотел бы поделиться. Надеюсь, вы найдете их полезными.

Единственное решение – кошмар для обслуживания: вилка всех 3-х партийных банок из источника и переписывание их, чтобы они не использовали java.beans. * Classes (возможно, заменив их для openbeans).

Затем каждый раз, когда один из этих 3-х партийных банок выпускает исправление (например, для критической ошибки безопасности), делайте это снова и снова .