错过了Android JRE系统库(java.awt。*)

时间:2012-05-10 14:35:51

标签: java android

我正在尝试在Android上运行pdfbox.jar库,看起来我做的一切都是正确的。 我使用Eclipse pluging来部署项目。 代码非常简单,只需调用pdfbox.jar库。

所有必需的jar都以正确的顺序位于类路径中,并且应该在dalvik重新编译字节代码时导出。

但我尝试使其工作失败,当我部署项目时出现以下错误

05-10 13:53:42.590: I/dalvikvm(14009): Failed resolving Lorg/apache/pdfbox/pdmodel/PDDocument; interface 911 'Ljava/awt/print/Pageable;'
05-10 13:53:42.590: W/dalvikvm(14009): Link of class 'Lorg/apache/pdfbox/pdmodel/PDDocument;' failed
05-10 13:53:42.590: E/dalvikvm(14009): Could not find class 'org.apache.pdfbox.pdmodel.PDDocument', referenced from method com.ibm.ext.pdf.PDFExtractor.extractText

05-10 13:53:54.881: E/AndroidRuntime(14009): FATAL EXCEPTION: main
05-10 13:53:54.881: E/AndroidRuntime(14009): java.lang.NoClassDefFoundError: org.apache.pdfbox.pdmodel.PDDocument
05-10 13:53:54.881: E/AndroidRuntime(14009):    at com.ibm.ext.pdf.PDFExtractor.extractText(PDFExtractor.java:52)
05-10 13:53:54.881: E/AndroidRuntime(14009):    at com.ibm.ext.pdf.PDFBoxActivity.onCreate(PDFBoxActivity.java:14)
05-10 13:53:54.881: E/AndroidRuntime(14009):    at android.app.Activity.performCreate(Activity.java:4465)
05-10 13:53:54.881: E/AndroidRuntime(14009):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
05-10 13:53:54.881: E/AndroidRuntime(14009):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
05-10 13:53:54.881: E/AndroidRuntime(14009):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
05-10 13:53:54.881: E/AndroidRuntime(14009):    at android.app.ActivityThread.access$600(ActivityThread.java:123)
05-10 13:53:54.881: E/AndroidRuntime(14009):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
05-10 13:53:54.881: E/AndroidRuntime(14009):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-10 13:53:54.881: E/AndroidRuntime(14009):    at android.os.Looper.loop(Looper.java:137)
05-10 13:53:54.881: E/AndroidRuntime(14009):    at android.app.ActivityThread.main(ActivityThread.java:4424)
05-10 13:53:54.881: E/AndroidRuntime(14009):    at java.lang.reflect.Method.invokeNative(Native Method)
05-10 13:53:54.881: E/AndroidRuntime(14009):    at java.lang.reflect.Method.invoke(Method.java:511)
05-10 13:53:54.881: E/AndroidRuntime(14009):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-10 13:53:54.881: E/AndroidRuntime(14009):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-10 13:53:54.881: E/AndroidRuntime(14009):    at dalvik.system.NativeStart.main(Native Method)

org/apache/pdfbox/pdmodel/PDDocument implements java/awt/print/Pageable

似乎dalvit不知道出于某种原因导出java.awt。*类,或者在类路径中仍然遗漏了一些东西。

我想知道是否有任何解决方案或这是有效的案例,我不能使用依赖于dalvik不知道使用的jre库的jar。

5 个答案:

答案 0 :(得分:4)

Android不包含大多数java.awt.*类,因此需要重写依赖此类的第三方Java库才能在Android上运行,或者根本不使用。

  

我不能使用依赖于dalvik不知道使用的jre库的jar。

更准确地说,您不能使用依赖于Android SDK不包含的类的JAR。

答案 1 :(得分:3)

问题是Android对AWT的支持很少。

这是Android显然不是Java平台的领域之一。 Android有自己的堆栈用于执行图形和GUI。

  

我想知道是否有任何解决方案......

这个问题 - Using awt with android - 有一个答案提到了一个允许您在Android上运行Swing代码的商业产品。我不确定,但我想这个产品也支持AWT。

答案 2 :(得分:1)

问题是由于其他人已经表明,Android中缺乏AWT支持。解决方法可能是使用PDFBox的android端口:

https://github.com/Birdbrain2/PdfBox-Android

tldr; 用以下内容替换您对PDFBox的gradle依赖: org.apache:pdfbox-android:最新版本,如果您收到DexIndexOverflowException异常,请考虑为您的应用添加MultiDex支持。

答案 3 :(得分:0)

Android支持的AWT的唯一部分是fonts包。

Porting AWT graphics code to Android

答案 4 :(得分:0)

这个完美无缺! ; - )

Birdbrain2/PdfBox-Android

有同样的问题,它解决了它。希望这有帮助!