0

I have written a program to login to a website with HTMLUnit, wich works great. Now I want to use it in the Android app I am building but it doesn't work. I am getting this error:

Conversion to Dalvik format failed with error 1

Once I remove a few jars, like the Jetty jars, I keep coming across this error

Could not find class 'com.gargoylesoftware.htmlunit.html.HtmlDivision', referenced from method com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.init

and a few seconds later this one:

11-19 13:47:26.485: E/AndroidRuntime(18991): FATAL EXCEPTION: AsyncTask #1
11-19 13:47:26.485: E/AndroidRuntime(18991): java.lang.RuntimeException: An error occured while executing doInBackground()
11-19 13:47:26.485: E/AndroidRuntime(18991):    at android.os.AsyncTask$3.done(AsyncTask.java:299)
11-19 13:47:26.485: E/AndroidRuntime(18991):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
11-19 13:47:26.485: E/AndroidRuntime(18991):    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
11-19 13:47:26.485: E/AndroidRuntime(18991):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
11-19 13:47:26.485: E/AndroidRuntime(18991):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
11-19 13:47:26.485: E/AndroidRuntime(18991):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
11-19 13:47:26.485: E/AndroidRuntime(18991):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
11-19 13:47:26.485: E/AndroidRuntime(18991):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
11-19 13:47:26.485: E/AndroidRuntime(18991):    at java.lang.Thread.run(Thread.java:856)
11-19 13:47:26.485: E/AndroidRuntime(18991): Caused by: java.lang.NoClassDefFoundError: org/w3c/dom/css/CSSCharsetRule
11-19 13:47:26.485: E/AndroidRuntime(18991):    at java.lang.Class.getDeclaredMethods(Native Method)
11-19 13:47:26.485: E/AndroidRuntime(18991):    at java.lang.Class.getDeclaredMethods(Class.java:703)
11-19 13:47:26.485: E/AndroidRuntime(18991):    at com.gargoylesoftware.htmlunit.javascript.configuration.JavaScriptConfiguration.processClass(JavaScriptConfiguration.java:444)
11-19 13:47:26.485: E/AndroidRuntime(18991):    at com.gargoylesoftware.htmlunit.javascript.configuration.JavaScriptConfiguration.buildUsageMap(JavaScriptConfiguration.java:409)
11-19 13:47:26.485: E/AndroidRuntime(18991):    at com.gargoylesoftware.htmlunit.javascript.configuration.JavaScriptConfiguration.<init>(JavaScriptConfiguration.java:365)
11-19 13:47:26.485: E/AndroidRuntime(18991):    at com.gargoylesoftware.htmlunit.javascript.configuration.JavaScriptConfiguration.getInstance(JavaScriptConfiguration.java:381)
11-19 13:47:26.485: E/AndroidRuntime(18991):    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.<init>(JavaScriptEngine.java:130)
11-19 13:47:26.485: E/AndroidRuntime(18991):    at com.gargoylesoftware.htmlunit.WebClient.init(WebClient.java:218)
11-19 13:47:26.485: E/AndroidRuntime(18991):    at com.gargoylesoftware.htmlunit.WebClient.<init>(WebClient.java:193)
11-19 13:47:26.485: E/AndroidRuntime(18991):    at com.gargoylesoftware.htmlunit.WebClient.<init>(WebClient.java:184)
11-19 13:47:26.485: E/AndroidRuntime(18991):    at com.cofely.VPNProfileLogin.doInBackground(VPNProfileLogin.java:28)
11-19 13:47:26.485: E/AndroidRuntime(18991):    at com.cofely.VPNProfileLogin.doInBackground(VPNProfileLogin.java:1)
11-19 13:47:26.485: E/AndroidRuntime(18991):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
11-19 13:47:26.485: E/AndroidRuntime(18991):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
11-19 13:47:26.485: E/AndroidRuntime(18991):    ... 5 more
11-19 13:47:26.485: E/AndroidRuntime(18991): Caused by: java.lang.ClassNotFoundException: org.w3c.dom.css.CSSCharsetRule
11-19 13:47:26.485: E/AndroidRuntime(18991):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
11-19 13:47:26.485: E/AndroidRuntime(18991):    at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
11-19 13:47:26.485: E/AndroidRuntime(18991):    at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
11-19 13:47:26.485: E/AndroidRuntime(18991):    ... 19 more

Can anyone tell what is going on here? Thanks

Black Magic
  • 2,706
  • 5
  • 35
  • 58
  • You've mentioned two issues. Regarding the second one, if you `remove a few jars` and then you get a `Could not find class` error then I'm pretty sure you've removed more jars than you should have :) – Mosty Mostacho Nov 19 '13 at 14:29
  • Yes I realize that, but I need to find some way in between. Since I need the classes, but I can't use thos jars – Black Magic Nov 19 '13 at 14:34

2 Answers2

1

Have a look at this: "Conversion to Dalvik format failed with error 1" on external JAR

Not 100% sure about this, but you might need to convert some jars referenced in your project to dalvik format using:

dx --dex --output="c:\temp\dx.dex" "c:\temp\in.jar"

You get NoClassDefFoundError errors probably because you removed necessary jars from project.

Community
  • 1
  • 1
Caner
  • 57,267
  • 35
  • 174
  • 180
0

There's an dependency missing. You don't have the JAR in your APK which contains the org.w3c.dom.css.CSSCharsetRule definition.

After a short Google search I found this posts: Getting HtmlUnit to run under Android how to use htmlunit with my android project

It seems to be much easier to rewrite your scraper to use jSoup instead of HtmlUnit if you need it to work on Android too.

schlingel
  • 8,560
  • 7
  • 34
  • 62