Java 2 Micro Edition (J2ME)
Язык программирования Java был создан в 1995 году компанией Sun Microsystems. Разработан он для того, чтобы программы написанные программистами один раз могли бы работать на разных типах мобильных устройств. В 1998 году произошло разделение языка Java на Standard Edition (J2SE), который предназначается для обычных компьютеров, Enterprise Edition (J2EE), используемый на серверах, и Micro Edition (J2ME), который и устанавливается в мобильные устройства.
Как уже говорилось в первой главе, основным отличием мобильных телефонов от смартфонов и коммуникаторов является то, что все они работают не под управлением полноценной мобильной ОС, а под управлением прошивки и установка каких-либо новых программ невозможна. Однако решение было найдено именно с помощью Java ME.
Идея Java состоит в том, что команды отдаются не напрямую процессору, а виртуальной Java-машине (JVM – Java Virtual Machine). Вместо команд процессора программа на Java представляет собой байт-код – команды, которые должна выполнять Java-машина. Соответственно, для работы программы достаточно, чтобы в системе была установлена Java-машина. Решением поддержки приложений в сотовых телефонах стала установка в прошивки виртуальной Java ME машины под названием KVM – Kilobyte Virtual Machine.
Для программ, которые рассчитаны на Java ME, есть особое название – мидлет. Мидлеты распространяются не в виде разрозненных файлов, а в виде специальных архивов JAR – Java Archive. В нем хранятся все файлы программы: .class (они содержат байт-код), файлы ресурсов например, картинки или звуки) и файл-манифест, описывающий программу: название, производитель, версия и другие данные.
Функционал телефонов может серьезно отличаться, поэтому для Java ME существует целый ряд различных API. Базовый API, на котором строятся все остальные, – это либо CDC (Connected Device Configuration), либо CLDC (Connected Limited Device Configuration). Для смартфонов, коммуникаторов и КПК предназначен CDC, как более функциональный; для мобильников – CLDC.
Поскольку сотовые телефоны отличаются по устройству от компьютеров, потребовался API, обеспечивающий работу GUI и хранение настройки приложений и поддержку других специфических для мобильников возможностей. Эту задачу берет на себя API под названием Mobile Information Device Profile (MIDP). На данный момент существует несколько версий: MIDP 1.0 был создан еще в 2000 году и накладывал ряд серьезных ограничений, поэтому в 2002 была выпущена новая версия – MIDP 2.0, использующаяся до сих пор.
Необходимо отметить, что список встраиваемых в телефоны API не ограничивается CLDC и MIDP. Существует целый ряд спецификаций мобильных стандартов Java, разработанных по запросам на спецификацию (JSR – Java Specification Request), которые также реализованы в качестве API и обычно носят номер соответствующего им запроса.
Возможности Java ME
Возможности каждого отдельного телефона можно описать несколькими параметрами, самым главным из которых будут поддерживаемые API. Основные API – это уже описанные CLDC и MIDP.
Но кроме них есть и множество других. Некоторые используются широко, некоторые – не очень.
Например, заявленная поддержка Java 3D для телефона означает поддержку JSR 184 – Mobile 3D Graphics API (сокращенно M3G), а за возможности работы java-мидлета с видео и аудио отвечает JSR 135 – Mobile Media API.
Преимущества и недостатки Java ME
Java обладает следующими достоинствами:
· Один из главных плюсов Java ME – полное отсутствие вирусов и червей и очень небольшие возможности для троянских программ. Если исключить случаи некорректной реализации Java-машин, существование вирусов и червей на Java ME принципиально невозможно. Дело в том, что для всех Java-машин на современных телефонах такие действия, как посылка sms или передача данных через Bluetooth должны подтверждаться пользователем, что практически блокирует любые возможности по работе на java-машине вредоносного кода.
· Другой плюс Java ME – гибкость реализации. Каждый производитель решает, какой именно функционал поддерживается тем или иным телефоном. С другой стороны, это создает определенные сложности для разработки мидлетов из-за большого разнообразия аппаратов.
Недостатки Java:
· Работа с устройством через API. В обычной программе, которая выполняется через API операционной системы, команды выполняются процессором, и тут контроль над действиями программы никто не осуществляет. Возможности Java сильно ограничены заложенными API и если аппарат не обладает нужной функциональностью, то сделать ничего нельзя.
· Другой минус кроется в CLDC, являющейся сокращенной версией API Java SE. Этот API был разработан как набор базовых функций для телефонов, поэтому функциональность API была серьезно урезана. В настоящее время практически все телефоны поддерживают MIDP 2.0, заметно более требовательный к аппаратному обеспечению, однако это не привело к появлению новых версии CLDC.
С этим связан и еще один недостаток: в отличие от Java SE, где постоянно совершенствуются сами возможности языка, добавляются новые средства, мобильная Java не изменяется со времени создания версии 3.·