2 min read

DalvikVM и Nokia N9

скромный перевод того что было найдено в интернетах =)
Тут быстрое описание того как запустить на Java приложение «Hello World» в виртуальное машине  Dalvik VM на MeeGo Harmattan. Для этого потребуется открытое ядро(Nitdroid Open Mode Kernel), файлы nitdroid и немного терпения.

1. Если вы хотите избежать  предупреждения о потере гарантии при каждой загрузке, уберите его (это нужно сделать до того как вы прошьете открытое ядро т.к.  в open mode это предупреждение переходит в режим только для чтения  и удалить его можно только перепрошивкой устройства, а так же вы на сможете установить код блокировки) – это не обязательный шаг а только косметическое изменение.
2. Прошейте открытое ядро (стоит также почитать раздел «известные ограничения» в посте) – это работает на N950 и N9.
3. Включите аппарат и замените загрузочный (preinit) скрипт который позволяет загрузку Nitdroid (и снова почтите предупреждение)
4. Теперь скачайте архив с Nitdroid (на данный момент последняя альфа 5 но мне больше повезло с альфой 4) и извлеките содержимое в /home/nitdroid – в этом посте очень подробно описан процесс установки, а так же прошивки и замена загрузчика.
5. Перезагрузитесь в Nitdroid (вообще это опционально, но это проверит работоспособность Nitdroid)
6. Перезагрузитесь обратно в Harmattan – все дальнейшие команды следует выполнять с правами суперпользователя (используйте devel-su)
7. Монтируем /dev и/sys в Nitdroid:

mount --bind /dev/ /home/nitdroid/dev/
mount --bind /sys/ /home/nitdroid/sys/

8. Делаем chroot в Nitdroid:

/usr/sbin/chroot /home/nitdroid

9. Настроим некоторые переменные окружения (не все из них необходимы, их можно найти в разделе «setup the global environment» в  init.rc – сохраним  setupenv.sh в /home/nitdroid/ это сохранит нам немного нажатий)

 export PATH=/system/bin:/system/xbin:/usr/sbin:/usr/bin:/sbin:/bin
 export LD_LIBRARY_PATH=/system/lib
 export ANDROID_BOOTLOGO=1
 export ANDROID_ROOT=/system
 export ANDROID_ASSETS=/system/app
 export ANDROID_DATA=/data
 export EXTERNAL_STORAGE=/mnt/sdcard
 export ASEC_MOUNTPOINT=/mnt/asec
 export LOOP_MOUNTPOINT=/mnt/obb
 export BOOTCLASSPATH=/system/framework/core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar:/sys

10. Стартуем Dalvik VM:

/ # /system/bin/dalvikvm

Dalvik VM requires a class name

Окей, этой были 10 шагов для старта Dalvik VM, но мы забыли про Hello World. Для этого нам будет нужен Android SDK(и соответствующий Java SDK) и следуйте интсрукции «Basic Dalvik VM Invocation»

11. Создайте в редакторе файл Foo.java со следующим содержимым

 public class Foo {
 public static void main(String [] args) {
 System.out.println("Hello, world");
 }
 }

12. Теперь компилируем:

Javac Foo.java

13. Используем утилиту “dx” (из Android SDK) для упаковки Foo.class (сгенерированный с помощью javac) в .jar

dx --dex --output=foo.jar Foo.class

14. Посмотрим что у нас получилось:

% less foo.jar
 Archive:  foo.jar
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
 --------  ------  ------- ---- ---------- ----- --------  ----
 72  Defl:N       70   3% 2012-10-23 15:51 1294a38f  META-INF/MANIFEST.MF
 732  Defl:N      404  45% 2012-10-23 15:51 b6e3654e  classes.dex
 --------          -------  ---                            -------
 804              474  41%                            2 files

15. Копируем то что получилось на ваш Harmattan девайс

16. Подключаемся по SSH к аппарату заходим как root и копируем .jar файл в директорию Nitdroid:

cp /home/user/MyDocs/foo.jar /home/nitdroid/

17. Делаем chroot в Nitdroid  и настраиваем окружение.

18. Наконец запускаем Dalvik VM запускаем класс “Foo” из “foo.jar”:

/ # /system/bin/dalvikvm -cp foo.jar Foo

19. Profit =)

2012-10-23_16-06-29