4

I'm trying to run pdfbox.jar library on Android and seems like I do everything right. I use Eclipse pluging to deploy the project. The code is very simple just call for pdfbox.jar library.

All required jars are located in classpath in correct order and should be exported while dalvik recompiles the byte-code.

but all my attempts to get it work is failed, when I deploy the project I got the following error

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

it seems that dalvit doesn't know to export java.awt.* classes for some reason or there is still something that I missed in the classpath.

I'd like to know whether there is any solution or this is valid case and I can't use jars which are depend on jre libraries that dalvik doesn't know to use.

Cœur
  • 37,241
  • 25
  • 195
  • 267
Denis Voloshin
  • 768
  • 10
  • 32

5 Answers5

4

Android does not include most of the java.awt.* classes, and so third-party Java libraries that depend upon such classes would need to be rewritten to work on Android, or simply not used.

I can't use jars which are depend on jre libraries that dalvik doesn't know to use.

More accurately, you cannot use JARs which depend on classes that the Android SDK does not include.

CommonsWare
  • 986,068
  • 189
  • 2,389
  • 2,491
3

The problem is that Android has minimal support for AWT.

This is one of those areas where it is clear that Android is NOT a Java platform. Android has its own stack for doing graphics and GUIs.

I'd like to know whether there is any solution ...

This SO question - Using awt with android - has an answer mentions a commercial product that allows you to run Swing code on Android. I don't know for sure, but I imagine that this product supports AWT as well.

Community
  • 1
  • 1
Stephen C
  • 698,415
  • 94
  • 811
  • 1,216
1

The problem is due to the lack of AWT support in android, as others have indicated. A work-around for you could be to use the android port of PDFBox:

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

tldr; replace your gradle dependency on PDFBox with this: org.apache:pdfbox-android:latest version here, and consider adding MultiDex support to your app if you get a DexIndexOverflowException exception.

Nick Hamilton
  • 164
  • 11
0

The only part of AWT supported by Android is the fonts package.

Porting AWT graphics code to Android

Community
  • 1
  • 1
Billy Bob Bain
  • 2,894
  • 18
  • 13
0

This one works perfectly! ;-)

Birdbrain2/PdfBox-Android

Had the same problem, and it solved it. Hope this helps!

Steph68
  • 197
  • 4
  • 13