HelloWorld cannot run under dalvikvm
Asked Answered
P

2

6

I'm trying the Hello World example from https://android.googlesource.com/platform/dalvik/+/gingerbread/docs/hello-world.html

However, my Foo program did not run; dalvikvm complained about the following:

Dalvik VM unable to locate class 'Foo' java.lang.NoClassDefFoundError: Foo at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.ClassNotFoundException: Foo in loader dalvik.system.PathClassLoader[/mnt/sdcard/foo.jar] at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243) at java.lang.ClassLoader.loadClass(ClassLoader.java:573) at java.lang.ClassLoader.loadClass(ClassLoader.java:532) ... 1 more

Logcat gave more information during the dalvikvm invocation:

D/dalvikvm( 1361): creating instr width table E/dalvikvm( 1361): Can't open dex cache '/data/dalvik-cache/mnt@[email protected]@classes.dex': No such file or directory I/dalvikvm( 1361): Unable to open or create cache for /mnt/sdcard/foo.jar (/data /dalvik-cache/mnt@[email protected]@classes.dex) W/dalvikvm( 1361): threadid=1: thread exiting with uncaught exception (group=0x4 001e9a8)

Does anyone out there know what I did wrong?

Patsis answered 27/5, 2011 at 1:40 Comment(0)
P
10

The author of the article, Andy McFadden, give me a tip:

It's trying to create a .odex file in /data/dalvik-cache. You'll need to be running as root, or have an unprotected /data/dalvik-cache.

Once I rooted my device (e.g. using SuperOneClick), it worked!


Comment by @domen: You don't actually have to be root. You can set ANDROID_DATA environment variable and it will put cache there. I.e. mkdir /data/local/tmp/dalvik-cache, export ANDROID_DATA=/data/local/tmp.

Patsis answered 27/5, 2011 at 16:26 Comment(1)
You don't actually have to be root. You can set ANDROID_DATA environment variable and it will put cache there. I.e. mkdir /data/local/tmp/dalvik-cache, export ANDROID_DATA=/data/local/tmp.Pentup
T
0

It seems like you are trying to run it as a jar file from the sdcard. You need to use the tools to build it as an apk file. This converts from Java bytecodes to Dalvik codes, and reorganizes the contents of the file.

Terrellterrena answered 27/5, 2011 at 1:44 Comment(5)
If I'm not wrong, Android's dalvikvm can allow the execution of the converted dex file which I have JARed, following the Hello World example in the link that I've provided. So this should not be the reason.Patsis
Hm. I just ran that example. I had to move the .class file to the platform-tools directory for dx to find it (on a Windows machine). But other than that, no problems. It sounds like your .jar file is corrupt somehow.Terrellterrena
Hi Ted, thanks for trying to help me here... I wish to ascertain whether it's my jar file that's problematic, or is it my android device (Creative Ziio 8). Can you send me your email address at [email protected] so that I can send to you my jar file so you can test for me? Also, what terminal emulation application are you using to access android command line?Patsis
I just open a command prompt and run adb shell. That gives me a shell session on the emulator. It works on a real device as well. (Email on the way.)Terrellterrena
I see. When you said it worked earlier, did you try on a real device? I got the above results on a real device.Patsis

© 2022 - 2024 — McMap. All rights reserved.