Всё для мобильных телефонов
Audio:
1. Разница между MIDI и цифровым звуком
2. Оркестр в телефоне
3. Инструкция по созданию качественных MMF из MP3
4. Описание формата SMAF
5. Наиболее часто встречающиеся вопросы на MIDI.ru
Java:
6. Java для мобильных устройств
7. Эмуляторы J2ME
8. Создание аркадных Java-игр для мобильного телефона
9. Java в телефоне
10. Инструкция по установке Java-игр для мобильных телефонов
11. Инструкция по созданию Jad из Jar-файла
Gif-анимация:
12. Рисуем анимашку
13. Один из лучших аниматоров
Synchronization:
14. Соединяем мобильный телефон с компьютером
15. Фрикинг: Bluetooth-Хакерство только начинается
16. Технология Bluetooth
Video:
17. Современные мобильные видеоформаты (часть 1)
18. Мобильные видеоформаты (часть 2)
19. Мобильные видеоформаты (часть 3)
Soft:
20. Программы для мобильных телефонов
21. Игры для мобильных телефонов
Java для мобильных устройствВведениеПлатформа Java 2 Micro Edition (J2ME) была разработана для потребительского рынка устройств с ограниченными ресурсами памяти и процессора таких как: мобильные телефоны, пейджеры, смарт-карты, органайзеры и миникомпьютеры. J2ME позволяет запускать Java на ресурсо-ограниченных вычислительных устройствах. Для данных целей J2ME адаптирует существующую Java-технологию. Рассмотрим два ключевых момента J2ME: конфигурацию и профайлы. КонфигурацияКонфигурация определяет среду выполнения J2ME. Она включает в себя виртуальную машину, ограниченную по сравнению с стандартной, VM и набор основных классов, в основном заимствованных из J2SE. В настоящий момент определены 2 конфигурации: Конфигурации коммуникационных устройств с ограниченными ресурсами (Connected Limited Device Configuration, CLDC) и Конфигурация коммуникационных устройств (Connected Device Configuration, CDC). Первая конфигурация ориентированна на микроустройства, оснащенные 16- или 32-битовыми процессорами с минимальным объемом памяти около 128 КБ. Сердцем J2ME CLDC является виртуальная машина K Virtual Machine (KVM), специально разработанная для сетевых устройств с небольшим объемом памяти и ограниченными ресурсами. Вторая конфигурация J2ME, CDC, ориентирована на более сложные электронные и встроенные устройства, такие как смарт-коммуникаторы, сложные "интеллектуальные" пейджеры, персональные цифровые помощники (PDA) и интерактивные цифровые телевизионные приставки. Как правило, такие устройства комплектуются 32-битовым микропроцессором/контроллером и оснащены более 2 МБ памяти, используемой для хранения виртуальной машины и библиотек. CDC работает с виртуальной машиной C Virtual Machine (CVM). CDC включает в себя все классы из CLDC и еще больше классов из J2SE. Главным отличием между CDC и CLDC является то, что CDC VM поддерживает все возможности J2SE VM, включая native programming interfaces ПрофайлПрофайл расширяет конфигурацию, добавляя специфичные классы к набору основных классов определенных в конфигурации. Другими словами, профайл обеспечивает необходимой функциональностью, которая отсутствует в основной конфигурации. Это может быть пользовательский интерфейс, механизм хранения и т. д. Помимо MIDP-профайла существуют и другие профайлы. Foundation Profile - добавляет набор классов из J2SE к CDC, но не вводит пользовательского интерфейса. Данный профайл используется для построения на нем других профайлов.jsr-46 Personal Basic Profile - обеспечивает Java API для устройств, требующих сетевой доступ и графическую презентацию. Данный профайл является подходящим для интерактивного телевидения и содержит API для поддержки Multimedia Home Platform. (JSR129) Personal Profile - обеспечивает Java API для устройств, требующих надежный сетевой доступ. Построен на Personal Basic Profile и Foundation Profile (JSR62) Рисунок 1. Архитектура J2ME. CLDC (Конфигурации коммуникационных устройств с ограниченными ресурсами)CLDC является результатом работы Java Community Process (JSP) экспертной группы JSR-30, которую составили следующие компании:
CLDC технология используется для построения на ней различных профайлов. Цель данной технологии - определить стандарт использования Java на устройствах с ограниченными ресурсами: 160-500 КБ памяти, доступной для Java-платформы, 16-32-битовый процессор, низкое потребление энергии, сетевое соединение 9600 bps или меньше. Ниже представлены аспекты, которые попадают под "юрисдикцию" CLDC: Java-язык и виртуальная машина KVM , основные Java библиотеки (java.lang.*, java.util.*) , Нижеследующие вещи не входят в область рассмотрения CLDC: (Как правило, они определяются профайлами): пользовательский интерфейс, обработка событий, жизненный цикл приложений, взаимодействие пользователя и приложения/ Java-язык и виртуальyная машина KVMОсновная цель для JVM, поддерживающей CLDC, быть совместимой с Java Language Specification насколько это возможно. За исключением различий, приведенных ниже, JVM которая поддерживает CLDC, совместима с Java Language Specification. Нет поддержки floating point. Это связано с тем, что в устройствах с ограниченными ресурсами отсутствует поддержка floating point. Поддержка же на программном уровне была бы слишком дорогим удовольствием. Отсутствует метод finalize() и нет weak references. Это требование связано с необходимостью упрощения механизма сборки мусора. CLDC поддерживает exception механизм, однако, его арсенал является ограниченным. Это связано с двумя причинами: - восстановление после ошибок достаточно специфично для каждого устройства. К тому же многие устройства просто перезагружаются после некоторых своих ошибок, и приложение не может заботиться о таких ошибках; - полная реализация механизма является слишком дорогим удовольствием для микроустройств. KVMНет поддержки floating point. Это связано с тем, что в устройствах с ограниченными ресурсами отсутствует поддержка floating point. Поддержка же на программном уровне была бы слишком дорогим удовольствием. В JVM которая поддерживает CLDC отсутствуют байт-код, связанный с типами float и double. KVM не реализует Java Native Interface (JNI). Поддержка JNI была отклонена по двум причинам: - ограничения, накладываемые security-моделью CLDC (данная модель запрещает использовать native вызовы), - полная реализация JNI была признана слишком дорогой для устройств с ограниченными ресурсами. KVM не позволяет создавать свой class loader. Это ограничения накладываемое security моделью. KVM не поддерживает Reflection-механизм. Java-приложения не могут инспектировать классы, объекты, методы, поля, нитки, выполняемые стеки в виртуальной машине. Как следствие сериализация, JVMDI (Debugging Interface), JVMPI (Profiler Interface) и другие технологии J2SE, основанные на Reflection-механизме, отсутствуют в CLDC. KVM реализует многопоточность, но не поддерживает Thread group и daemon thread. Операции, такие как запуск и остановка, могут быть применены только над отдельной ниткой. Отсутствует метод finalize() и нет weak references. Это требование связано с необходимостью упрощения механизма сборки мусора. Ограниченный еrror handling механизм по сравнению с J2SE. Преверификация. CLDC библиотекиCLDC библиотеки можно разделить на две категории: В первую категорию входят классы, наследованные из J2SE. Во вторую – классы, которые вводит CLDC. Классы, принадлежащие к первой категории, находятся, в пакетах java.lang.*, java.util.* и java.io.*. Эти классы производные из Java 2 Standard Edition версии 1.3. Данные классы являются идентичными соответствующим классам J2SE. Семантика классов и их методов не будет изменяться. К классам не будут добавляться любые public- или protected-методы, которые не являются доступными в J2SE. Системные классыДанные классы внутренне связаны с виртуальной машиной. Некоторые Java-приложения требуют наличия данных классов. Например, J2SE Java compiler (javac), генерируя код, требует наличия определенных функций String и StringBuffer классов. java.lang.Object java.lang.Runtime java.lang.System java.lang.Thread java.lang.Runnable (interface) java.lang.String java.lang.StringBuffer java . lang . Throwable Классы, представлющие типыКаждый из этих классов представляют собой подмножество соответствующих классов из J2SE. java.lang.Boolean java.lang.Byte java.lang.Short java.lang.Integer java.lang.Long java.lang.Character Collection классыjava.util.Vector java.util.Stack java.util.Hashtable java.util.Enumeration (interface) Классы ввода - выводаjava.io.InputStream java.io.OutputStream java.io.ByteArrayInputStream java.io.ByteArrayOutputStream java.io.DataInput (interface) java.io.DataOutput (interface) java.io.DataInputStream java.io.DataOutputStream java.io.Reader java.io.Writer java.io.InputStreamReader java.io.OutputStreamWriter Классы Reader, Writer, InputStreamReader и InputStreamWriter обеспечивают поддержку интернализации . Механизм их работы такой же, как и в J2SE. Последние два класса имеют точно такие же конструкторы, как и в J2SE. new InputStreamReader (InputStream is); new InputStreamReader (InputStream is, String name); new OutputStreamWriter (OutputStream os); new OutputStreamWriter (OutputStream os, String name); В случаях , где присутствует String- параметр , используется заданный character encoding, иначе используется character encoding, имя которого содержится в переменной microedition.encoding. Если конвертер не доступен , выкидывается UnsupportedEncodingException. Следует заметить, что CLDC не поддерживает локализацию. Это говорит о том, что все решения, связанные с форматирование даты, времени и т. д. находятся вне рамок рассмотрения CLDC. Календарь и время. CLDC, включает небольшое подмножество стандартных J2SE классов: java.util.Calendar, java.util.Date, and java.util.TimeZone. По умолчанию одна временная зона поддерживается. java.util.Calendar 'Вспомогательные' классы. Exception & Error. java.lang.Error Propety. microedition.encoding Классы, принадлежащие ко второй категории, находятся в пакетах javax.microedition.*. Пакет javax.microedition.io вводит новый механизм сетевой поддержки. CLDC Connection Frameworkjava.io.* и java.net.* пакеты J2SE не подходят для микро устройств с их ограниченными ресурсами. Поэтому был разработан новый пакет javax.microedition.io. Данный пакет имеет только один класс: Connector, 8 интерфейсов и ConnectionNotFoundException. Класс Connector - это сердце Connection Framework, он имеет ряд статических методов для получения Connection-объекта. Если операция происходит успешно, метод возвращает объект, реализующий Сonnection- интерфейс, иначе выкидывается IOException. На рисунке 2 представлена иерархия интерфейсов. Рисунок 2. Иерархия интерфейсов Объект, реализующий Connection интерфейс, может быть получен при помощи класса Connector, как уже было сказано выше. Интерфейс Connection имеет единственный метод close. Данный метод закрывает сетевое соединение. InputConnection-интерфейс "представляет" устройство, из которого можно прочитать данные. Методы openInputStream и openDataInputStream возвращают поток для чтения. OutputConnection-интерфейс "представляет" устройство, в которое можно записать данные. Методы openOutputStream и openDataOutputStream возвращают поток для записи. StreamConnection- интерфейс сочетает в себе IntputConnection и OutputConnection. ContentConnection - подинтерфейс StreamConnection. StreamConnectionNotified ждет, пока соединение будет установлено. Метод acceptAndOpen() возвращает объект StreamConnection. DatagramConnection-интерфейс определяет дейтаграммное соединение. ConnectionNotFoundException выкидывается, когда соединение не может быть утсановлено. ConnectorПараметр String метода open класса Connector имеет следующий формат. "protocol:address;parameters". Вот несколько примеров: HTTP Connection Connector.open("http://java.sun.com/developer"); Socket Sockets: Connector.open("socket://129.144.111.222:9000"); Datagram Connection Connector.open("datagram://address:port#"); Communicate with a Port Connector.open("comm:0;baudrate=9600'); Open Files Connector.open("file:/myFile.txt"); Network file systems: Connector.open("nfs:/foo.com/foo.dat"); SecurityОдно из огромных преимуществ Java - динамическая загрузка приложений через сеть к клиенту, используя надежный security-механизм. Реализация данного механизма в J2SE превышает возможности доступного бюджета памяти для JVM, поддерживающей CLDC. Для CLDC был разработан иной механизм, который можно разбить на два уровня: уровень виртуальной машины и уровень приложения. Уровень виртуальной машины подразумевает, что запускаемое приложение в VM не должно иметь способность каким-либо образом повредить устройство. Данное требование должно обеспечиваться Java classfile verifier, который должен гарантировать, что загружаемый байт-код не содержит ссылок к недействительным областям памяти или памяти, находящейся вне Java Heap. Verifier должен отклонить загрузку таких классов. Уровень приложения. Verifier не есть спасение от всех бед, он только проверяет байт-код, но он не может гарантировать, что загруженное приложение не нанесет вред устройству. В J2SE SecurityManager обеспечивает контроль над тем, чтобы приложение не смогло несанкционировано обратиться к файловой системе, установить соединение и т. д. Но реализация такого контроля невозможна для мини-устройств с их ограничениями. В JVM поддерживающая CLDC реализована sandbox security-модель. В данной модели предполагается, что приложение должно выполняться в ограниченном окружении, в котором приложение может иметь доступ только к тем API, которые определены в конфигурации, профайлах и линензированных классах. Более точно sandbox модель означает: Загружаемые Java класс файлы должны пройти верификацию. Приложение может иметь доступ только к тем, API, которые определены в конфигурации, профайлах и линензированных классов. Загрузка приложений может выполняться только native-кодом виртуальной машины и не может осуществляться class loader определенным пользователем. Поэтому в CLDC нельзя создать свой class loader. Приложение не может загрузить native-библиотеку, приложение не может иметь доступ к native-функциям, которые доступны виртуальной машине, и иметь доступ к native-библиотекам, которые не являются Java-библиотеками, обеспечиваемые CLDC, профайлами или линензированными классами. CLDC-реализация должна обеспечивать невозможность перезагрузки системных пакетов java.*, javax.microedition.* Помимо этого, профайлы могут добавлять свои ограничения к вышесказанным. MIDPMobile Information Device Profile расширяет CLDC, добавляя три новых пакета : javax.microedition.rms Выдвигает требования к инсталляции мидлетов, которые должны содержаться в MIDlet Suites . Добавляет несколько классов в уже имеющиеся пакеты, определенные в CLDC : javax . microedition . io к java . io -пакету добавляет Http Connection-интерфейс. java.lang К java.lang - пакету добавляет IllegalStateException (java.lang.IllegalStateException). java.util добавляет функциональность, которая позволяет приложениям создавать таймеры. Для этих целей были добавлены классы java.util.Timer и java.util.TimerTask из J2SE. |