【问题标题】:Android JRE System library (java.awt.*) is missed缺少 Android JRE 系统库 (java.awt.*)
【发布时间】:2017-01-15 11:16:45
【问题描述】:

我正在尝试在 Android 上运行 pdfbox.jar 库,似乎我做的一切都是正确的。 我使用 Eclipse 插件来部署项目。 代码很简单,只需调用pdfbox.jar库即可。

所有需要的 jars 都以正确的顺序位于类路径中,并且应该在 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。

【问题讨论】:

  • 或者你没有勾选导出有PDDocument的jar文件。

标签: java android


【解决方案1】:

Android 不包含大部分 java.awt.* 类,因此依赖这些类的第三方 Java 库需要重写才能在 Android 上运行,或者干脆不使用。

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

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

【讨论】:

    【解决方案2】:

    问题在于 Android 对 AWT 的支持很少。

    这是很明显 Android 不是 Java 平台的领域之一。 Android 有自己的图形和 GUI 堆栈。

    我想知道有没有解决办法...

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

    【讨论】:

      【解决方案3】:

      正如其他人所指出的那样,问题是由于 android 中缺乏 AWT 支持。一种解决方法是使用 PDFBox 的 android 端口:

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

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

      【讨论】:

        【解决方案4】:

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

        Porting AWT graphics code to Android

        【讨论】:

          【解决方案5】:

          这个很完美! ;-)

          Birdbrain2/PdfBox-Android

          遇到了同样的问题,解决了。希望这会有所帮助!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-06-27
            • 1970-01-01
            • 2012-04-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-08-01
            • 1970-01-01
            相关资源
            最近更新 更多