Palm (Pilot)
Клуб пользователей, Санкт-Петеpбуpг
 ENLiGHT Project. Новости об информационных технологиях, науке, авиации и космонавтике

ENLiGHT Project

оглавление | новости от ib/news | другие проекты | www.palmgear.com | письмо | win koi lat

Java на Palm
(данная страница - результат работы Eugen Kuleshov, с небольшими дополнениями других авторов.)

Хороший праздник Новый Год. Хотя бы потому, что ваши родные и близкие могут подарить вам по такому поводу что-нибудь вроде PalmPilot. Меня в этот раз осчастливили машинкой Visor. Сам я его врядли бы купил, а теперь уже просто не могу представить, как можно без него обходиться. :-)

Сейчас стало модным слово "buzzword". Трудно сказать что именно под этим подразумевается, но часто, произнося его, имеют ввиду Java и все, что с ней связано. В связи с тем, что джавой занимаются такие монстры как Sun, IBM и т.п., неудивительно, что сейчас она везде или как любит выражаться оппозиция - "пихают вовсюда" :-). Не минула сия участь и PalmOS.

Эта статья не претендует на руководство для Java-девелопера по разработке софта для Palm на Java. Сам я по долгу службы давно и надолго имею дело только с Java и меня, конечно же, интересовало как с ней обстоят дела на платформе Palm. Возможно, что вместо последующей болтологии следовало просто привести ссылки и позволить читателю самому исследовать предмет разговора (например при помощи эмулятора Palm для Windows или Linux), но по ряду причин мне показалось, что интереснее будет сделать краткий обзор всего, что есть.

Из-за того, что ресурсы PDA и особенно клонов Palm ограничены, понятно, что не может быть и речи о "большой" Java 2. Так и появилась J2ME (Java 2 Micro Edition). Спецификация была разработана примерно в начале 2000 года и рассчитана на пользовательские устройства (не только PDA). Да, да, та самая джава для чайников в прямом смысле этого слова. :-) Причем предоставляемый API может быть специализированным, чтобы с минимальными затратами (и потерями) удовлетворить потребности каждого конкретного типа устройств. При всем при том это остается тот же самый язык Java и практически та же самая JVM (разумеется с точки зрения языка и исполняемого байткода), то есть наработки для манипуляции данными в системах на базе "большой" Java работают (заметьте, не "легко переносятся", а именно работают) и в "маленькой" Java и разумеется здесь не идет речь о переносе GUI с рабочих станций на такие устройства (это просто не нужно).

Впрочем я несколько отвлекся. Посмотрим что же у нас есть для PalmOS.

KVM

 
KVM

Первым детищем этой волны наверное стала KVM. Виртуальная машина для устройств с ограниченной конфигурацией (Connected Limited Device Configuration или CDLC). Разработана Sun и не особо привередлива к памяти, как впрочем и к процессору, потому, как задачи, которые перед ней стоят, особой скорости не требуют. Здесь можно ознакомиться подробнее и бесплатно скачать тулкит для PalmOS:

Разработка ведется на PC, после чего Java-программа конвертируется в стандартный палмовский .PRC (поскольку он ничего больше и не понимает). Для ее работы на Palm должна быть установлена библиотека-рантайм KVM. Поскольку KVM раздается в исходниках, то энтузиасты не замедлили подхватить начинание и развить идею. Так появилась Color KVM (цветная KVM) и kAWT.

Как я уже говорил, ограниченные ресурсы устройств не позволяют полностью сохранить существующее API, поэтому AWT (низкоуровневый графический тулкит Java) в состав KVM не входит. Однако умельцев это не остановило и kAWT весьма неплохо работает на Palm.

J9

 

Затем на рынке появилась виртуальная машина J9 от IBM. Она поставляется вместе с IBM Visual Age Micro Edition и имеет рантайм (целевую платформу) для процессоров 68000, x86, MIPS, PowerPC, ARM, StrongARM, SH-3, SH-4 и для операционных систем PalmOS, Linux, Windows CE, QNX, Neutrino. Для QNX, кстати, раздается и realtime расширение Java. Подробнее ознакомиться и бесплатно скачать все это (вместе с IDE) можно на сайте IBM Visual Age Micro Edition.

Интересной особенностью J9 является то, что она может исполнять как обычный байткод (тот, который понимает "большая" Java), так и специализированный предкомпиленый (нечто вроде статической nаtive компиляции). Кстати сама оболочка-IDE IBM Visual Age Micro Edition запускается в J9. Впрочем на Palm этого выбора уже не остается и .PRC делаются как раз из предкомпиленых специально для Palm бинарников. Что-то вроде трехэтапной сборки - компиляция исходников на Java в обычный Java bytecode, компиляция полученного bytecode в нэйтив бинарник для конкретной целевой платформы и, наконец, сборка финального файла для установки на устройство (в нашем случае Palm). По субъективным ощущениям J9 работает несколько резвее KVM, и по функциональности ничуть не уступает ей. так, например, kAWT работает в J9.

Waba

 

Судя по всему авторы этой виртуальной машины не были довольны производительностью существующих для PalmOS JVM и разработали свою, но быструю. Я не случайно сказал "этой виртуальной машины", так как Waba к джаве имеет весьма косвенное отношение. Да она использует синтаксис Java для программ, но и только. Стандартные библиотеки классов у нее свои, в языке, да и в виртуальной машине из простых числовых типов остался только Integer, нет эксепшнов, тредов и синхронизации. То есть все по минимуму. Вы резонно спросите зачем нужен такой обрубок? Хитрость в том, что "большая" Java может исполнять программы для Waba (но не наоборот) и вы можете без изменений поместить свою waba-программку в Java апплет и запустить из веб-браузера с поддержкой Java, да и разрабатывать такую программу попроще, чем на C или ассемблере (для отладки даже эмулятор палма не нужен). Кстати, на PalmGear предприимчивые буржуины во всю продают shareware софт, написанный на Waba.

Jump

Jump компилирует Java байткод в исходные тексты ассемблера 68000, которые потом могут быть скомпилированы обычным транслятором Pila. Эту вещь я сам не пробовал, но она, как это ни странно, и самая древняя. Последняя бэта датируется 1997 годом. Исходники открыты. Jump не позволяет работать с HTTP и писать Java аплеты для Palm. Скачать его можно здесь и здесь. Интересующимся могу так же порекомендовать ознакомиться со статьей на Earthweb.

IDE's

Как и любой большой бизнес (мы ведь о buzzword говорим), разработка для Palm на Java просто не могла обойтись без IDE. А где есть IDE для Java, просто не может не быть таких грандов как IBM Visual Age for Java и JBuilder. Первый я уже упоминал, когда говорил о J9, а второй присутствует на этом рынке в виде дополнения к "большому" JBuilder 4. Не буду на них останавливаться подробно, просто привелу ссылки: Подробнее хочется остановиться на IDE, разработанном фирмой Data Representations - Simplicity for PalmOS Platform. Этот IDE предоставляет полный цикл разработки для PalmOS на Java, то есть ведение проектов, редактор исходных текстов, визуальный редактор экранных форм с поддержкой генерации стабов для обработки событий от контролов, отладчик, эмулятор Palm (тоже, кстати, написанный на Java) и линкер .PRC. Правда вся эта красота стоит $700, но это достойная цена за такие возможности. На сколько я знаю, аналогичного продукта для C или ассемблера не существует.

 Следует заметить, что все вышеупомянутые IDE тоже написаны на Java.

JBuilder

Хочу добавить о JBuilder и Palm. Собственно палмом я обзавелся недавно (с неделю назад) но сразу захотелось написать софт на яве для него :)
Так вот поскольку я привык пользоваться JBuilder'ом то возможность пользовать его меня естьественно привлекла. Сразу скажу заставить всё "это" заработать было не просто... С первого "прохода" неудалось. Но хочу отметить, что при внимательном чтении инструкций данных на http://www.palmos.com/dev/tech/tools/  можно таки заставить всё дружить. Теперь собственно о том, что это "всё"? Решение предлагаемое состоит из 3-х частей: JBuidler MobileSet, Nokia Edition это раз. J2ME собственно ява - это два. И некий Нокиа Девелопер Сьют это три. Заполучив все это (всё бесплатно) можно что-то делать. Но в качестве 4-го компонента выступает некий конвертер который конвертит собраные билдером jar файлы в .prc файлы. Так вот загвоздка (для меня) произошла именно в этом месте. Я не смог сконвертировать ни один пример данный к тому Нокиа Девелопмент Сьют. Может это потому что примеры для телефонов или ещё что но конвертер на них бранится. Хотя jar файл данный к конвертеру конвертится со свистом.

MIDP

Включает в себя Java машину и тулсу для конверции jad , jar файлов в prc. теперь сотни игр с мобильников спецификации J2ME идут на палме, игры можно найти хотя бы на www.midlet.org 

Делать надо так, для начала надо установить jdk c java.sun.com java среда собственно нужна для запуска конвертера converter.jar,
Теперь находим нужную игрушку и скачиваем 2 файла *.jar b *.jad (Dragon island похоже коммерческий и для него нет этих файлов, но если зайти на сам сайт, то там много freeware игрушек) в некоторых случаях файл *.jad надо подправить любым текстовым редактором в строке MIDlet-jar-URL оставить только имя jar файла, убрав URL ссылку теперь запускаем converter.bat (его, кстати, надо подправить - переменную среды) находим скачанный jad файл и конвертим в prc. Устанавливаем на палм java машину MIDP.prc и сконверченную игрушку и все.
 

Lite XML parsers

В начале этой статьи я говорил о buzzword. Говоря о Java, нельзя не вспомнить XML. Какой же настоящий buzzword может обойтись без этой парочки? :-) А раз тема нашей беседы Java на PalmOS, то без XML на PalmOS нам ну никак не обойтись. Я совершенно серьезно. Возможно на автономных PDA такое и даром не нужно, но если вы в онлайне общаетесь с большой системой, то применение XML сразу себя оправдывает. Не буду приводить аргументов, просто взгляните на список реальных XML парсеров (в скобках приведены размеры байткода):

Links

В заключение приведу несколько ссылок по теме:

--

Если вы хотите дополнить FAQ - пожалуйста пишите. Ваши вопросы и ответы по e-mail могут быть помещены в форум или опубликованы в FAQ.

design/collection/some content by Frog,
PALM FAQ (C) Frog 2000-2003,
"PALM FAQ, http://www.enlight.ru/pilot/".