Атрибуты, которые верификатор предварительной проверки записывает в файлы классов CLDC, называются атрибутами стековой карты. Атрибуты стековой карты определяются структурой данных StackMap_attribute. Эти атрибуты являются субатрибутами атрибута Code, определяемого и используемого обычной виртуальной машиной J2SE. Имя стековая карта отражает природу атрибута как описания типа локальной переменной или элемента стека операндов. Такое имя выбрано потому, что эти элементы всегда находятся в стеке интерпретатора.
Тип Code_attribute является другим типом, определяемым стандартной виртуальной машиной. Он определяет атрибут Code, используемый стандартной виртуальной машиной J2SE. Для получения полного описания этих структур, пожалуйста, смотрите спецификацию виртуальной машины Java «Java Virtual Machine Specification», которая отмечена в разделе ссылок в конце этой книги. Верификатор предварительной проверки CLDC определяет следующую структуру Stackmap_attribute, которая определяет производный тип стековой карты, как изложено ниже:
StackMap_attribute
{
u2 attribute_name_index; u4 attribute_length; u2.iumber_of_entries;
u4 byte_code_offset;
{
u2 number_of_locals;
cy types_of_locals[number_of_locals];
u2 number_of_stack_iteras;
ty types_of_stack_items[nuraber_of_stack_iterns];
} entries [number_of_entriesj;
}
Для получения дополнительной информации об описании и функционировании каждого из этих полей, пожалуйста, смотрите спецификацию Connected, Limited Device Configuration Specification.
Следующим этапом после предварительной проверки является упаковка приложения. Упаковка набора MID-летов включает 2 объекта:
— архивный файл Java файлов MID-лета;
— необязательный файл дескриптора приложения.
Хотя вы можете выбирать, упаковывать ли приложения J2SE для распаковки в дальнейшем, спецификация MIDP требует, чтобы вы упаковывали набор MID-летов с помощью утилиты архивации Java (JAR). В действительности спецификация MIDP требует, чтобы все наборы MID-летов переносились на устройства в сжатом файловом формате JAR. Обычно серверы, которые поддерживают перенос наборов MID-летов на устройства, хранят файлы наборов MID-летов в сжатом формате JAR. Либо сервер, либо компонент, который загружает файл на сервер, создает сжатый JAR-файл.
Архив JAR набора MID-летов может содержать несколько типов файлов, как показано в следующем списке:
— файл манифеста (manifest file) — файл, который описывает содержимое JAR-файла;
— файлы классов Java, которые содержат MID-леты из набора MID-летов архива;
— файлы ресурсов приложения, используемые MID-летами из набора MID-летов.
JAR Файл манифеста (manifest file) содержит атрибуты, которые описывают содержимое самого JAR-файла. Его наличие в JAR-файле необязательно.
Другой необязательный описательный файл, называемый файлом дескриптора приложения, содержит информацию о наборе MID-летов. Этот файл иногда называется дескриптором приложения Java (JAD). Каждый набор MID-летов может иметь связанный с ним файл описания.
Файл дескриптора приложения используется по двум причинам. Программное обеспечение управления приложениями устройства (AMS) использует информацию из этого файла для первоначальной проверки того, что все MID-леты в файле JAR соответствуют требованиям устройства, перед тем как оно загрузит полный файл JAR. AMS также использует эту информацию для управления MID-летом. AMS устройства отвечает за установку и удаление наборов MID-летов. Оно также обеспечивает MID-леты средой исполнения, требуемой спецификацией MIDP. Наконец, AMS управляет выполнением MID-летов, а именно запуском, приостановкой и закрытием всех MID-летов.
Наконец, сами MID-леты могут извлекать из конфигурации JAD-файла специфические атрибуты, которые представляют собой параметры MID-лета. Файл ресурсов приложения является основным механизмом для распаковки конфигураций MIDP-прило-жений.
ЕСЛИ вы хотите добавить файл Manifest к вашему заархивированному набору MID-летов, вам необходимо создать его прежде, чем вы создадите сам JAR-архив. Вы можете создать этот файл в любом текстовом редакторе. Потом создайте JAR-файл с помощью стандартной утилиты JAR J2SE. Утилита JAR включается в утилиты инструментария Wireless Toolkit.
Спецификация MIDP требует, чтобы в файле Manifest присутствовали определенные поля. Требуемые поля показаны в таблице 2.2.
Таблица 2.2. Обязательные атрибуты файла MANIFEST.MF
Имя атрибута — Описание
MIDlet-Name — Название набора MID-летов
MIDlet-Versiorv — Номер версии набора MID-летов в форме <major>.<minor>.<micro>, определяемой схемой спецификации управления версиями продукта JDK
MIDlet-Vendor — Разработчик приложения (компания или частное лицо)
MIDlet-<n> — По одному на MID-лет в данном наборе, содержит разделяемый запятой список из текстового имени MID-лета, значка и имени класса п-ного MID-лета в наборе
MicroEdition-Profile — Профиль J2ME, необходимый для исполнения MID-лета
MicroEdition-Configuration — Конфигурация J2ME, необходимая для исполнения MID-лета
Файл манифеста содержит строки атрибутов, один атрибут на строку. Каждый атрибут состоит из ключа и значения. После ключа ставится двоеточие, которое отделяет его от связанного с ним значения. Файл MANIFEST.MF программы HelloWorld находится в папке HelloWorld/bin/. Он выглядит следующим образом:
MIDlet-class="underline" HelloWorld, HelloWorld.png, HelloWorld
MIDlet-Narae: HelloWorld
MIDlet-Vendor: Vartan Piroumian
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-1.0
Обратите внимание на имя атрибута MIDlet-1: в файле MANIFEST.MF. Файл манифеста различает различные MID-леты, нумеруя их от MIDlet-l до MIDlet-/!. Число 1 должно идентифицировать первый MID-лет.
У атрибута MIDlet-1 существует три значения. Первое — название набора MID-летов, который содержит данный MID-лет. Это значение может быть именем, воспринимающимся человеком. Второе значение является именем файла изображения PNG, который AMS использует как значок, представляющий этот MID-лет. Последнее значение является именем файла класса MID-лета, который определяет входную точку исполнения MID-лета.
Наверное, самыми важными атрибутами являются атрибуты MicroEdition-Configuration и MicroEdition-Profile. AMS использует эти значения для определения того, подходит ли MID-лет для данного устройства.
Спецификация MIDP позволяет также создавать необязательные поля в файле манифеста. В таблице 2.3 показаны необязательные поля файла манифеста.
Таблица 2.3. Необязательные атрибуты файла MANIFEST.MF
Имя атрибута — Описание
MIDiet-Description — Описание набора MID-летов
MIDlet-Icon — Имя файла PNG, содержащегося в JAR
MIDlet-Info-URL — URL, который содержит дополнительную информацию об этом наборе MID-летов
MIDlet-Data-Size — Минимальное количество байт данных постоянного хранения, требуемое набором
Теперь, когда вы создали файл манифеста, вы готовы к созданию файла JAR приложения. Используйте следующую команду jar: