2011-03-30 153 views
9

我想在Android應用程序中使用第三方jar文件。我已經可以使用jar文件中的一些類了。然而,其中一個類引用了一些看起來不受dalvik vm支持的Java類。這些都是一些我在logcat中看到的錯誤:有沒有解決Android錯誤「無法解析虛擬方法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. 

看來,有關內省和反思的Java類不被支持Dalvik的。我想找出兩件事。這是在不久的將來在達爾維克支持這個計劃嗎?其次,有沒有人有一個解決這個問題的解決方案的建議?

回答

9

似乎與反思和反思相關的Java類不受dalvik支持。

不是一概而論,AFAIK。核心Android團隊的一個目標是保持較小的固件,以降低設備成本。其中一個副作用是隻包括java.*javax.*的類別,他們認爲這些類別是必不可少的。原來,Android中沒有java.beans.*;現在,有幾個類和接口可用,但不是整個包。

這是在不久的將來在達爾維克支持這個計劃嗎?

你會知道我們其他人何時知道,也就是說,只有當它顯示在發佈中。

其次,有沒有人有解決這個問題的解決方案的建議?

如果第三方JAR是一個開源項目:

  1. 抓住必要java.beans Apache的和諧類,並把它們在你的項目
  2. 重構它們放入一個單獨的包(例如, bondy.beans),因爲如果您嘗試將java.beans類加載到您的項目中,Android不會太喜歡它
  3. 修改第三方JAR以使用重構版本的類

有可能jarjar可以做一些這方面的工作 - 我還沒有使用這個工具,也不知道它的能力範圍。

+0

這個建議是完美的。下面介紹更多的jarjar技術細節:http://code.google.com/p/dalvik/wiki/JavaxPackages – 2011-04-01 06:16:20

+1

修改第三方jar只是爲了討好android非常痛苦(你基本上必須從源代碼重建它們)。很遺憾Android不支持BeanInfo這樣的基本功能。 – 2013-02-24 11:51:58

1

阿帕奇和諧已經退休很久了。我正在使用openbeans。它爲我解決了所有問題。

相關問題