使用使用java.beans中的类(内部检查,BeanInfo的或PropertyDescripto

2019-07-20 12:15发布

我有一个使用第三方JAR( 我不能改变java.beans.Introspectorjava.beans.BeanInfojava.beans.PropertyDescriptor

我怎样才能用在我的Android应用程序,罐子?

它无法加载类(使用Introspector来自届党的jar):

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;

Answer 1:

很明显java.beans包是不完整的Android上。 和常见的解决方案是重新打包依赖于他们两个的java.beans和JAR使用不同的包名称,而不是java.beans中的。 这正是前面提到的openbeans做。 而从Android的错误消息,一个有趣的qoute规定: 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。 如果这是不允许的,我认为运行时间检测可以做,例如dexmaker可以为您的第三方类,它使用的java.beans创建代理,你可以重新实现这个类的一部分。

此外谷歌搜索上我看到的题目有点这个 。 他们只是使用java.beans包并编译它为Android。 这似乎是对我的脆弱,但看起来像它的工作。

不幸的是,这不是一个解决方案,只是想法,我想和大家分享。 希望你找到这些有用的。



Answer 2:

唯一的解决办法是维护的噩梦: 从叉来源的所有届党罐子和 (通过更换他们openbeans可能) 重写他们,所以他们不使用的java.beans *类。

然后,每那些届党罐子的一次发布修补程序(例如用于严重的安全漏洞),做一遍



文章来源: Using jars that use java.beans classes (Introspector, BeanInfo or PropertyDescriptor)