Из архива Linux16.net: WTK для "антеннщика" (разработка мобильных приложений на Java)
(Переопубликовываю по просьбе студентов Гуманитарно-технического колледжа)
Java — один из самых устойчивых и перспективных языков хотя бы потому, что используется для программирования портативных устройств, плодящихся в последнее время как тараканы. Причем не только сотовых телефонов и КПК. Java изначально проектировалась так, чтобы ее можно было установить абсолютно на любое устройство, обладающее процессором, вплоть до утюга и кофемолки. Не случайно Google выбрал именно Java для своей платформы Android. Поэтому многие из тех, кто начинает интересоваться этим языком, пытаются освоить сначала именно WTK (Wireless Tool Kit) — комплект ПО для создания мобильных приложений. Но, конечно же, новичков на этом пути подстерегают некоторые трудности…
Установить WTK несложно для каждого, кто имеет хоть какой-то опыт общения с консолью (речь пойдет, конечно же, о программировании в среде Linux). Скачивается архив с сайта java.sun.com, запускается на исполнение. Если по каким-то причинам он не является исполняемым (то есть «желтеньким таким» в Midnight Commander'e), то нужно его таковым сделать (cmod +x sun_java_wireless_*).
Самораспаковывающися скрипт устанавливается почти без вопросов, но на один из них очень важно ответить правильно. Когда вас спросят, где находится JDK (а WTK является не более чем надстройкой над великим и могучим) нужно указать путь, по которому реально находится бинарники Java. И лучше, если это будет не безликое /usr/lib/jre/jvm/bin, которое поселилось на вашей машине только потому, что так захотел создатель вашего дистрибутива, а путь к JDK последней версии, установленной вручную лично вами. Можно оставить все и по умолчанию. Java-окружение присутствует в любом приличном современном дистрибутиве. Но если заниматься программированием серьезно, то лучше делать всё как следует и располагать самой свежей версией JDK. Например, если JDK установлен в /opt/java/sun, то отвечая на вопрос дистрибутива WTK о местонахождении бинарников Java пишите /opt/java/sun/bin. Кстати, сам процесс инсталляции WTK я запускаю тоже в каталоге /opt/java, в результате чего файлы этого замечательного фреймворка лежат у мнея в /opt/java/wtk.
После установки WTK написать программу для мобильного телефона — пара пустяков для человека, у которого руки растут прямо и из плеч.Запускаем /opt/java/wtk/bin/ktoolbar и видим GUI-плюхалки, нажимая на которые получаем автоматически нужные каталоги и срипты, которые сами компилируют, сами jar- и jad-файлы создают. Знай успевай в каком-нибудь текстовом редакторе код набирать, да ошибки исправлять. Но разве это путь сурового консольщика?
За что я не люблю GUI IDE, так это за то, что они слишком много на себя берут. Сами решают, где будут храниться исходники, как код будет откомпилирован, куда выложен готовый бинарник и т.п. Создатели WTK, например, решили, что все проекты для мобильных устройств будут лежать в каталоге ~/jme2wtk (а в нем еще какая-то вложенная, полезная лишь им самим иерархия). Вот это и называется «без меня меня женили». А если я уже стопицот лет девелоплю проекты совершенно в другой директории? Что, если я хочу сделать мидлет частью клиент-серверного проекта, часть кода которого будет исполняться не на сотике, а на большом сервере? Что, если меня не устраивает создание в проекте маловразумительных подкаталогов tmpclasses, res,lib, tmplib и т.д. «Тогда, парень, крутись как знаешь, раз такой умный», — говорят разработчики WTK, не оставляя в настройках ktoolbar ни малейших шансов для выбора структуры каталогов. Посему, если вы установили WTK лишь для того, чтобы удивить подругу самолично написанным тетрисом, дальше можете не читать.
Теоретически, приложение для мобильного устройства ничем не отличается от приложения для «большой машины». Откомпилированный и разложенный по пакетам байт-код упаковывается в jar-архив, который и запускается на мобильном устройстве. Но это теоретически. На самом же деле есть несколько серьезных отличий кода «мобильного» и кода «классического».
Во-первых, к jar-файлу прилагается небольшой jad-файл, представляющий собой обычный тескт, описывающий некоторые характеристики приложения. Не особая проблема, но требует некоторого «разбирательства».
Во-вторых, (и это даже важнее, чем в первых) от версии к версии откомпилированный байт-код для Java отличается и не обладает обратной совместимостью. То есть код, созданный в рамках JDK 1.6 не запустится в JDK 1.3 (хотя наоборот — пожалуйста). Код для мобильных устройств — это, как правило, код версии 1.3. Можно, конечно, установить себе JDK 1.3, но это, имхо, путь извращенцев.
В-третьих, стандартные классы и пакеты WTK (java.lang, java.util) имеют те же названия, что и соответствующие сущности JDK, но это сходство обманчиво: на самом деле это сильно урезанные и упрощенные версии, оптимизированные для инсталляции в портативные устройства. Посему при их использовании компилятору нужно указывать параметр bootclasspath, над формированием которого приходится порой изрядно попыхтеть.
Здесь мы простимся еще с одной группой читателей — любителями докапываться до всего своим умом (я тоже принадлежу к ней и обязательно научился бы компилировать мидлеты стандартными средствами Java, будь у меня два-три свободных дня на экспериманты).
Поняв, что не удалось с наскоку решить проблему интеграции мидлетов в более комплексные приложения, я задался вопросом, которым наш человек задается в самую последнюю очередь: «А не почитать ли документацию?». Впрочем, очень скоро на смену этому вопросу приходит другой: «А как же люди-то добрые поступают в таких случаях?». Погуглив на тему «мидлеты средствами ant», я обнаружил замечательный проект Antenna. Как раз то, что нужно: я для сборки своих проектов использую ant (как, наверно, большинство java-разработчиков), так что сразу же скачал два jar-файла, которые тут же закинул в $JAVA_HOME/jre/lib/ext. Для тех, кто в java-танке: это такая волшебная папка, в которую что ни закинь — то интерпретатором найдется без всякой мутотени с CLASSPATH. Пользоваться этим каталогом нужно с огромной осторожностью, ничего лишнего туда не класть, но в данном случае — самое простое и эффективное решение.
Обнаружив в папке с исходниками примеры файлов build.xml, я выбрал один из них, скопировал в свой проект, подправил, и очень просто, одной командой ant получил работающий мидлет. Мой вариант см. здесь. При его анализе нужно учесть, что:
1. Каталог, куда помещаются откомпилированные классы, находится у меня по отношению к каталогу, где лежит исходник мидлета «по адресу» /_classes.
2. Результирующие файлы (jar, jad) ложатся в /output/midlet.
3. WTK находится в /_bin/java/wtk (используйте симлинки)
Замените эти значения, а также имя мидлета, имя его пакета и т.п. на свои и будет вам счастье. Естественно, для успешной работы нужен настроенный ant, но это другая история.
Java — один из самых устойчивых и перспективных языков хотя бы потому, что используется для программирования портативных устройств, плодящихся в последнее время как тараканы. Причем не только сотовых телефонов и КПК. Java изначально проектировалась так, чтобы ее можно было установить абсолютно на любое устройство, обладающее процессором, вплоть до утюга и кофемолки. Не случайно Google выбрал именно Java для своей платформы Android. Поэтому многие из тех, кто начинает интересоваться этим языком, пытаются освоить сначала именно WTK (Wireless Tool Kit) — комплект ПО для создания мобильных приложений. Но, конечно же, новичков на этом пути подстерегают некоторые трудности…
Установить WTK несложно для каждого, кто имеет хоть какой-то опыт общения с консолью (речь пойдет, конечно же, о программировании в среде Linux). Скачивается архив с сайта java.sun.com, запускается на исполнение. Если по каким-то причинам он не является исполняемым (то есть «желтеньким таким» в Midnight Commander'e), то нужно его таковым сделать (cmod +x sun_java_wireless_*).
Самораспаковывающися скрипт устанавливается почти без вопросов, но на один из них очень важно ответить правильно. Когда вас спросят, где находится JDK (а WTK является не более чем надстройкой над великим и могучим) нужно указать путь, по которому реально находится бинарники Java. И лучше, если это будет не безликое /usr/lib/jre/jvm/bin, которое поселилось на вашей машине только потому, что так захотел создатель вашего дистрибутива, а путь к JDK последней версии, установленной вручную лично вами. Можно оставить все и по умолчанию. Java-окружение присутствует в любом приличном современном дистрибутиве. Но если заниматься программированием серьезно, то лучше делать всё как следует и располагать самой свежей версией JDK. Например, если JDK установлен в /opt/java/sun, то отвечая на вопрос дистрибутива WTK о местонахождении бинарников Java пишите /opt/java/sun/bin. Кстати, сам процесс инсталляции WTK я запускаю тоже в каталоге /opt/java, в результате чего файлы этого замечательного фреймворка лежат у мнея в /opt/java/wtk.
После установки WTK написать программу для мобильного телефона — пара пустяков для человека, у которого руки растут прямо и из плеч.Запускаем /opt/java/wtk/bin/ktoolbar и видим GUI-плюхалки, нажимая на которые получаем автоматически нужные каталоги и срипты, которые сами компилируют, сами jar- и jad-файлы создают. Знай успевай в каком-нибудь текстовом редакторе код набирать, да ошибки исправлять. Но разве это путь сурового консольщика?
За что я не люблю GUI IDE, так это за то, что они слишком много на себя берут. Сами решают, где будут храниться исходники, как код будет откомпилирован, куда выложен готовый бинарник и т.п. Создатели WTK, например, решили, что все проекты для мобильных устройств будут лежать в каталоге ~/jme2wtk (а в нем еще какая-то вложенная, полезная лишь им самим иерархия). Вот это и называется «без меня меня женили». А если я уже стопицот лет девелоплю проекты совершенно в другой директории? Что, если я хочу сделать мидлет частью клиент-серверного проекта, часть кода которого будет исполняться не на сотике, а на большом сервере? Что, если меня не устраивает создание в проекте маловразумительных подкаталогов tmpclasses, res,lib, tmplib и т.д. «Тогда, парень, крутись как знаешь, раз такой умный», — говорят разработчики WTK, не оставляя в настройках ktoolbar ни малейших шансов для выбора структуры каталогов. Посему, если вы установили WTK лишь для того, чтобы удивить подругу самолично написанным тетрисом, дальше можете не читать.
Теоретически, приложение для мобильного устройства ничем не отличается от приложения для «большой машины». Откомпилированный и разложенный по пакетам байт-код упаковывается в jar-архив, который и запускается на мобильном устройстве. Но это теоретически. На самом же деле есть несколько серьезных отличий кода «мобильного» и кода «классического».
Во-первых, к jar-файлу прилагается небольшой jad-файл, представляющий собой обычный тескт, описывающий некоторые характеристики приложения. Не особая проблема, но требует некоторого «разбирательства».
Во-вторых, (и это даже важнее, чем в первых) от версии к версии откомпилированный байт-код для Java отличается и не обладает обратной совместимостью. То есть код, созданный в рамках JDK 1.6 не запустится в JDK 1.3 (хотя наоборот — пожалуйста). Код для мобильных устройств — это, как правило, код версии 1.3. Можно, конечно, установить себе JDK 1.3, но это, имхо, путь извращенцев.
В-третьих, стандартные классы и пакеты WTK (java.lang, java.util) имеют те же названия, что и соответствующие сущности JDK, но это сходство обманчиво: на самом деле это сильно урезанные и упрощенные версии, оптимизированные для инсталляции в портативные устройства. Посему при их использовании компилятору нужно указывать параметр bootclasspath, над формированием которого приходится порой изрядно попыхтеть.
Здесь мы простимся еще с одной группой читателей — любителями докапываться до всего своим умом (я тоже принадлежу к ней и обязательно научился бы компилировать мидлеты стандартными средствами Java, будь у меня два-три свободных дня на экспериманты).
Поняв, что не удалось с наскоку решить проблему интеграции мидлетов в более комплексные приложения, я задался вопросом, которым наш человек задается в самую последнюю очередь: «А не почитать ли документацию?». Впрочем, очень скоро на смену этому вопросу приходит другой: «А как же люди-то добрые поступают в таких случаях?». Погуглив на тему «мидлеты средствами ant», я обнаружил замечательный проект Antenna. Как раз то, что нужно: я для сборки своих проектов использую ant (как, наверно, большинство java-разработчиков), так что сразу же скачал два jar-файла, которые тут же закинул в $JAVA_HOME/jre/lib/ext. Для тех, кто в java-танке: это такая волшебная папка, в которую что ни закинь — то интерпретатором найдется без всякой мутотени с CLASSPATH. Пользоваться этим каталогом нужно с огромной осторожностью, ничего лишнего туда не класть, но в данном случае — самое простое и эффективное решение.
Обнаружив в папке с исходниками примеры файлов build.xml, я выбрал один из них, скопировал в свой проект, подправил, и очень просто, одной командой ant получил работающий мидлет. Мой вариант см. здесь. При его анализе нужно учесть, что:
1. Каталог, куда помещаются откомпилированные классы, находится у меня по отношению к каталогу, где лежит исходник мидлета «по адресу» /_classes.
2. Результирующие файлы (jar, jad) ложатся в /output/midlet.
3. WTK находится в /_bin/java/wtk (используйте симлинки)
Замените эти значения, а также имя мидлета, имя его пакета и т.п. на свои и будет вам счастье. Естественно, для успешной работы нужен настроенный ant, но это другая история.
Комментарии (3)
RSS свернуть / развернутьМир Java безграничен
Sergei_T
Скоро про JavaFX еще напишу. Вот это прорыв так прорыв. Сегодня студенты с лекций не хотели уходить — так увлеклись практической работой. Жаль, что передряги с продажей Sun затормозили развитие этой технологии. Но Oracle, кажется, будет ее развивать. Осенью посмотрим как повернется.
yababay
Markony
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.