HelloWorld не может работать под dalvikvm - PullRequest
6 голосов
/ 27 мая 2011

Я пробую пример Hello World из https://android.googlesource.com/platform/dalvik/+/gingerbread/docs/hello-world.html

Однако моя программа Foo не запускалась; далвиквм пожаловался на следующее:

Dalvik VM не может найти класс 'Foo' java.lang.NoClassDefFoundError: Foo в dalvik.system.NativeStart.main (собственный метод) Вызывается: java.lang.ClassNotFoundException: Foo в загрузчике dalvik.system.PathClassLoader [/mnt/sdcard/foo.jar] в dalvik.system.PathClassLoader.findClass (PathClassLoader.java:243) в java.lang.ClassLoader.loadClass (ClassLoader.java:573) в java.lang.ClassLoader.loadClass (ClassLoader.java:532) ... еще 1

Logcat дал больше информации во время вызова dalvikvm:

D / dalvikvm (1361): создание таблицы ширины instr E / dalvikvm (1361): не удается открыть кэш dex '/data/dalvik-cache/mnt@sdcard@foo.jar@classes.dex': нет такого файла или каталога I / dalvikvm (1361): невозможно открыть или создать кэш для /mnt/sdcard/foo.jar (/ data /dalvik-cache/mnt@sdcard@foo.jar@classes.dex) W / dalvikvm (1361): threadid = 1: поток завершается с необработанным исключением (группа = 0x4 001e9a8)

Кто-нибудь знает, что я сделал не так?

Ответы [ 2 ]

10 голосов
/ 27 мая 2011

Автор статьи Энди Макфадден, дайте мне совет:

Он пытается создать файл .odex в / data / dalvik-cache. Вы будете должен быть запущен от имени пользователя root или иметь незащищенный /data/dalvik-cache.

Как только я рутировал свое устройство (например, с помощью SuperOneClick), оно работало!


Комментарий @domen: На самом деле вам не нужно быть пользователем root. Вы можете установить переменную среды ANDROID_DATA, и она поместит туда кеш. То есть mkdir /data/local/tmp/dalvik-cache, export ANDROID_DATA=/data/local/tmp.

0 голосов
/ 27 мая 2011

Кажется, вы пытаетесь запустить его как файл JAR с SDCard. Вам нужно использовать инструменты, чтобы собрать его как файл apk. Это преобразует байт-коды Java в коды Dalvik и реорганизует содержимое файла.

...