Сотовый фрикинг Подробнее про Java2me (обзор).

Discussion in 'Электроника и Фрикинг' started by [Alteza], 22 Apr 2010.

  1. [Alteza]

    [Alteza] Banned

    Joined:
    21 Apr 2010
    Messages:
    64
    Likes Received:
    113
    Reputations:
    16
    В общем пишу эту статью специально для античата, так как вижу что направление это на этом форуме не развито, а оно довольно таки интересное.
    Сейчас модно иметь простые мобильники или навороченные смартфоны. Но владельцы часто даже и не представляют, какие возможности представляют эти устройства их владельцам. Я не буду рассказывать о коммуникаторах, не буду затрагивать кпк. Оставим в сторонке и платформу симбиан - о ней, как я вижу, и так много сказано. Мы попробуем рассмотреть технологию j2me компании Sun (которую купила компания Оракул, если мне память не изменяет, но это не столь важно).

    Я думаю что не все знают что это такое и откуда это берет начало. Поэтому пожалуй сделаю вступительную историческую часть, а так же в нескольких словах опишу саму технологию. Так же мы коснемся парой слов Java, это будет как точкой опоры в нашем ликбезе.

    Часть 1. Когда это началось.
    Началось для мобильных устройств все это в 1999 году. Компания Sun представила программную технологию, с помощью которой можно было создавать приложения для мобильных устройств (сотовых телефонов). Основной задачей было обеспечение возможности создания приложений, работавших на устройствах с ограниченной конфигурацией. Кроссплатформенность была на одном из самых первых мест. По сути взяли туже технологию Java2SE, упростили и адаптировали под мобильные устройства.
    Изначально сам язык Java предназначался для программирования бытовых устройств (ну или холодильников, тостеров, кофеварок), но энтузиазм создателей и мудрость принятых решений по развитию языка верхушкой компании сделали свое дело.

    Часть 2. Что такое технология Java?
    Java это не только язык программирования, но и среда исполнения программ, написанных на одноименном языке. Синтаксисом этот язык похож на с++, но в отличии от си, программы написанные на Джава кроссплатформенные, так как они выполняются в специальной виртуальной машине, которая может быть запущена под любой популярной и современной ОС. Для обеспечения гибкости существует 3 "версии" (корректнее даже сказать направления языка):
    1) Java 2 Enterprise Edition (J2EE) - данная ветка предназначена специально для реализации сложных серверных проектов.
    2) Java 2 Standard Edition (J2SE) - данная ветка для написания приложений для "настольных" пк.
    3) Java 2 Micro Edition (J2ME) - данная ветка как раз и предназначена для создания и запуска приложений для мобильных устройств с ограниченными ресурсами. Именно ее мы и рассмотрим более подробно.

    Часть 3. Подробнее про Java 2 Micro Edition (J2ME).
    В первую очередь это набор спецификаций и технологий, предназначенных для различных типов портативных устройств. Существуют 2 основных направления: Connected Device Configuration (CDC) и Connected Limited Device Configuration (CLDC). Направление определяет тип конфигурации центральных библиотек Java, а так же параметров виртуальной машины Java (в которой будут исполняться приложения). Логично предположить что устройства CDC будут более "развитыми", в качестве примера можно привести коммуникаторы. К устройствам CLDC относятся обычные мобильные телефоны, аппаратно обладающие более скромными возможностями (ресурсами). Специальные режимы позволяют определять функциональность конфигураций для различных типов устройств. Режим Mobile Information Device Profile (MIDP) предназначен для CLDC портативных устройств с возможностью коммуницировать. Режим MIDP определяет функциональность - работу пользовательского интерфейса, сохранение настроек, работу в сети и модель приложения. CLDC и MIDP закладывают основу реализации J2ME.

    Рассмотрим спецификации мидлетов. Их на данный день всего 2: MIDP 1.0 и MIDP 2.0.
    Начнем с MIDP 1.0, это набор функций (классов), которые должны поддерживать телефоны с Java. В нем нет функций по работе с музыкой и подсветкой и т.д. Эти функции в каждом телефоне реализуются отдельно. Поэтому, в большинстве случаев приложения пишутся под конкретную модель (модельный ряд). Другими словами приложения предназначенные для одних моделей зачастую не совместимы с другими. То есть приложение может не только не запуститься, но и если запустится - то вполне возможны сбои в работе приложения.
    Теперь скажем пару слов о MIDP 2.0 - это более новая спецификация, более совместимая с мобильными платформами (в данном случае это телефоны разных фирм). То есть в большинстве случаев приложение будет работать на "чужих" телефонах, хотя возможны и сбои при работе приложений. Так же хочу отметить что телефоны со второй версией поддерживают расширенные мультимедийные функции, которых не было в первой версии. Большинство современных телефонов идет именно с этой версией спецификаций.

    Часть 4. Что это дает простым пользователям обычных телефонов.
    Как известно большинство телефонов поставляется с ограниченным функционалом, или не очень хорошей реализацией встроенного софта. Технология j2me позволяет частично решить эту проблему путем установки соответствующего софта. К примеру в вашем телефоне нет e-mail клиента. Если телефон поддерживает j2me то эта проблема решается установкой соответствующего приложения. Тут я не упоминаю об огромном количестве игр, которые так же позволяют в каком-то смысле превратить из телефона мини игровую консоль.

    Часть 5. Что представляют собой java приложения для мобильной платформы.
    Ну раз речь пошла об j2me приложениях, давайте сейчас рассмотрим очень поверхностно их структуру. В первую очередь это 2 файла (обычно 2, в зависимости от модели может требоваться и только один) с расширениями .jad и .jar.
    .jad - это файл с описанием (дескриптор) к приложению в котором содержится всякая полезная информация о приложение, а если точнее, то например: путь к архиву, размер архива, тип конфигурации издания, версия и т.д.
    .jar - это сам файл с приложением. Как устанавливать: тут все зависит от устройства. Для некоторых моделей требуется оба файла, для некоторых только .jar. Но обычно схема выглядит так: размещаем оба файла в один каталог и запускаем .jad. Если для установки .jad файл не требуется, то нужно запустить .jar.
    Кстати, с этим связанна некоторая хитрость в части телефонов марки Samsung. Дело в том что размер устанавливаемых приложений программно ограничен 300 кб. Но так как на Samsung установка приложения стационарно возможна только через .jad файл, то мы этим и воспользуемся. Допустим что наше приложение "весит" 450 кб (а максимум 300кб). Открываем .jad файл в блокноте (открыть с помощью блокнота) и ставим где размер 299999. Пример приведен на скрине 1.
    [​IMG]
    И просто запускаем.

    Часть 6. Способы загрузки и установки на мобильное устройство.
    1) Через кабель для связи с ПК (в зависимости от телефона - либо сервисный, либо Data).
    2) Через ИК (Инфракрасный порт, олдскул помнит =)).
    3) Через Bluetooth (довольно распространенная технология).
    4) Через интернет (gprs/cdma семейство, или wap (вынесем отдельно, по понятным причинам)).
    Хочу при этом подчеркнуть что не все устройства поддерживают все представленные типы установок приложений, даже если такая возможность есть в телефоне. Пример: Возьмем Samsung e250. Телефон поддерживает bluetooth, но установить приложения можно только через интернет (дело не касается патченных моделей, но что такое патчинг, для чего он нужен и что позволяет выжать из телефона - я расскажу в одной следующих статей).

    Часть 7. Обзоры некоторых j2me приложений.
    Небольшое вступление:
    1) При работе с файловой системой телефона/ карты памяти следите что бы путь к файлу, директориям состоял только из символов английского алфавита. Иначе программы будут ругаться и не предоставят вам доступа к фс устройства.
    2) Необходимо разрешить доступ к файловой системе (В этом и преимущество Java2me платформы перед остальными - вероятность повреждений от вирусов сводится к человеческому фактору, то есть каждый запрос к аппаратным ресурсам проходит через пользователя).

    Подчасть 7.1. Opera mini (Интернет браузер).
    Данная программа довольно известна пользователям мобильных телефонов. Это полноценный java браузер для мобильных устройств, позволяет просматривать не только wap, но и обычные сайты. Для работы используется прокси сервер оперы. Тем самым контент предварительно обрабатывается и сжимается (степень сжатия картинок можно указать в настройках). Существуют сборки позволяющие сохранять файлы (со встроенным загрузчиком). Так же возможна более тонкая подстройка браузера под себя. Существует альбомная ориентация при просмотре, а так же меню закладок. Есть опция синхронизации с другой оперой, установленной на компьютере. В настоящее время полноценных аналогов не имеет. Последняя доступная версия 5.0. Но больше 4.1 лично не ставил. В 5 версии появилась возможность работать с вкладками.

    [​IMG]
    [​IMG]

    Подчасть 7.2. MiniCommander.
    Это много функциональный файловый менеджер для мобильника в ностальгическом стиле Norton Commander. Программа приятно удивляет своими возможностями. С файловой системой телефона работать довольно просто и имеется множество опций (список сравним с возможностями файл менеджеров для пк). Имеется встроенная справка по различным операциям (точнее описание). Имеется возможность просмотра и масштабирования графических изображений (масштабирование зависит от версии) и прослушивания mp3 файлов. Изначально программа предназначалась для телефонов Motorola, но как выяснилось, она прекрасно работает и на Samsung'ах, и на Nokia, и на SE.

    [​IMG]
    [​IMG]
    [​IMG]

    Подчасть 7.3. JZipMan.
    Из названия данного приложения не трудно сообразить что оно является архиватором. Причем это довольно не плохой архиватор, поддерживающий форматы zip, zip.gif, rar, jar. И как логично предположить имеется встроенный файловый менеджер, который уступает miniCommander'у, но не стоит забывать что это скорее архиватор, а миниКоммандер это скорее файловый менеджер.

    [​IMG]
    [​IMG]

    Подчасть 7.4. wikibook.
    Довольно хорошее приложение, в котором можно в режиме онлайн получать информацию из википедии, пользоваться словарем (онлайн), есть возможность использования переводчика, телепрограммы, гороскопа, новостей, а так же чтения Баш (что такое баш орг не мне вам объяснять =)). В общем это такой информационный комбайн. Обязательно рекомендую к установке. Программе необходимо разрешить доступ в сеть, так как данные она берет оттуда.

    [​IMG]
    [​IMG]
    Подчасть 7.5. Jimm.
    Для чего это приложение думаю подробно объяснять не стоит. Оно используется для использования протокола icq (ну или просто - что бы сидеть в аське, кстати, не только в аське). Останавливаться подробно не буду. Скажу только что существует множество разновидностей. Сам использую самодельные сборки aspro (имхо, все устраивает) для протоколов icq и jabber (есть версия и для мобильного агента, но она не используется мной). Отличия тут только в типе протокола и в его реализациях. Для работы приложения необходим доступ в сеть, так как программа работает через gprs.


    /* На этом моя статья временно приостанавливается. С вами был [Alteza]. По мере возможности будет продолжение статьи, в котором будут рассматриваться (добавляться) обзоры приложений, а так же некоторые другие "стороны" Java2me. Файлы приложений не выкладываю по причине безопасности. Но их не трудно найти.
    */

    /* Так как работа над статьей будет вестись серьезная (обзоры и дополнения), а j2me не достаточно освещен здесь, просьба модераторов раздела прикрепить данную тему.
    */

    /*Скриншоты приложений будут добавляться по мере возможности.
    */
     
    #1 [Alteza], 22 Apr 2010
    Last edited: 22 Apr 2010
    10 people like this.
  2. [Alteza]

    [Alteza] Banned

    Joined:
    21 Apr 2010
    Messages:
    64
    Likes Received:
    113
    Reputations:
    16
    Часто мы слышим про непонятные понятия, такие как jsrxxx (где ххх это число).
    Хочу расписать что это такое, чтобы прояснить картину, что бы поняли что это, с чем его едят.
    У каждого телефона есть свои аппаратные ресурсы. Поддержку их осуществляют опциональные пакеты (это как API).

    Вот мы сейчас и рассмотрим их, а именно:
    • JSR 75 – PDA Optional Packages for the J2MEtm Platform
    • JSR 82 – Javatm APIs for Bluetooth
    • JSR 120 – Wireless Messaging API
    • JSR 135 – Mobile Media API
    • JSR 179 – Location API for J2MEtm
    • JSR 177 – Security and Trust Services API for J2MEtm
    • JSR 229 – Payment API
    • JSR 239 – OpenGL ES

    Начнем с JSR 75. Этот опциональный пакет позволяет манипулировать с данными адресной книги, календаря, списка задач и работать с файловой системой телефона. Используется для синхронизации данных, для органайзеров, а так же частично мультимедиа (электронные книги, музыкальные плееры).

    Опциональный пакет JSR 82 отвечает за Bluetooth. А именно позволяет предоставлять доступ к различным функциям Bluetooth
    (L2CAP, RFCOMM, OBEX). Применяется в современных аппаратах довольно широко. В качестве различных сервисов "синезубой" связи: управление другим устройством, печать фотографий и документов, обмен данными, синхронизация органайзера, заметок и адресной книги. И прочими доступными сервисами. Зависит от самого устройства.

    Опциональный пакет JSR 120 отвечает за работу по приему и отправке коротких сообщений (смс). Дополнительно, в зависимости от устройства, возможен запуск приложений при приеме смс, а так же прием CBS (Cell Broadcast Service. С помощью службы CBS сотовый оператор может рассылать массовые сообщения на все мобильные станции в заданном регионе. Это может быть информация о погоде, спортивные новости или сообщения о бедствии. Не все операторы поддерживают CBS, но в некоторых случаях использование этой технологии может быть очень полезно. С точки зрения программиста Java ME CBS выглядят в точности как SMS, кроме того, что их можно только принимать, а послать нельзя. Точно так же открывается соединение на определенном порту, точно так же принимаются и обрабатываются текстовые сообщения.)

    Теперь рассмотрим мультимедиа, а именно JSR 135. Позволяет: воспроизводить аудио, видео, вести запись с микрофона, использовать функции фото и видео съемки, поддержка MIDI, тоны Page 28.
    Поддержка форматов:
    Аудио: WAV, AMR, MP3, WMA, запись с микрофона.
    Видео: MPEG-4, 3GPP, WMV, Animated GIF
    Камера: фото, видео
    Протоколы: File, HTTP(S), RTSP.

    Довольно интересные опции предлагает пакет JSR 179, который позволяет получать координаты (GPS, базовые станции ...), вести базу данных объектов с координатами,отслеживать приближение к заданному объекту. Применение тоже довольно интересно: навигация, регистрация маршрута. (сразу лезут параноидальные мысли =)).

    JSR 184 отвечает за трехмерные эффекты в приложениях (чаще всего в играх). Возможности и требования: Пакет для работы с 3d-графикой, может быть реализован на OpenGL ES. Применение - логично предположить что в основном в 3d играх.

    JSR 226 – SVG (пакет для работы с графикой), реализация стандарта SVG Tiny 1.1
    Примененяется: картография, масштабируемые, пиктограммы, анимация, технические иллюстрации.

    JSR 229 - Payment. Предоставляет доступ к механизмам онлайн-платежей.
    Примененяется для оплаты музыки, видео, игр, удаленного доступа к банковским услугам. Но для СНГ это не так актуально.

    Ну и наконец JSR 239 – OpenGL ES. Представляет собой реализацию спецификации OpenGL ES.
    Предоставляет возможность использования аппаратных и программных реализаций. Применяется в играх и пользовательском интерфейсе.
     
    #2 [Alteza], 23 Apr 2010
    Last edited: 23 Apr 2010
    1 person likes this.
  3. buxmanager

    buxmanager Elder - Старейшина

    Joined:
    1 Apr 2009
    Messages:
    613
    Likes Received:
    229
    Reputations:
    69
    было бы классно, если бы ТС давал еще уроки написания приложений и изучения функций языка)))
     
  4. [Alteza]

    [Alteza] Banned

    Joined:
    21 Apr 2010
    Messages:
    64
    Likes Received:
    113
    Reputations:
    16
    Всему свое время :)

    Приведу пример простейшего приложения для мобильной платформы. Но сначала "мини" введение. Каждый мидлет (приложение) может находиться в одном из 3 состояний: "Работает", "Пауза", "Разрушен". Из состояния "Работает" возможен "взаимно-обратный" переход в "паузу". Для чего это короткое intro вы сейчас поймете.

    Code:
    // Импорт основного класса MIDlet
    import javax.microedition.midlet.MIDlet;
    //Наследование  собственного класса SuperMIDlet от MIDlet
    public class SuperMidlet extends MIDlet
    {
            // Метод вызываемый при переходе мидлета в режим "пауза"
            public void pauseApp()
            {
            }
    
            // Метод, вызываемый при прерывании работы мидлета.
            public void destroyApp(boolean flag)
            {
                    // Информирование системы о переходе в прерванное состояние ( но это необязательно)
                    notifyDestroyed();
            }
            // Методы, вызываемый в начале работы мидлета, или при переходе в режим активного состояния.
            public void startApp()
            {
                //Получим строчку атрибута имени мидлета 
                String name = getAppProperty("MIDlet name");
                
                //Выводим сообщение в системную область.
                System.out.println("MIDlet" + name +  "says: Hello Antichat");
    
            }
    }
    По поводу приложений под Android, хочу отметить что приложения для андроида пишутся на специальном "подварианте" Java, со своим специальным API. Одним из хороших качеств является то что приложения идущие вместе с устройством без проблем можно заменить приложениями, написанными вами. Пока что приложения для этой платформы рекомендуют писать на Эклипсе, так как эта среда более адаптированна к библиотеке от Google и в ней пока что она более лучше реализована, чем в NetBeans.

    p.s.: me пишет java программки под NetBeans + различные плагины, значительно расширяющие возможности этой IDE.
     
    #4 [Alteza], 23 Apr 2010
    Last edited: 24 Apr 2010
    2 people like this.
  5. Lilo

    Lilo Banned

    Joined:
    10 Mar 2009
    Messages:
    462
    Likes Received:
    784
    Reputations:
    313
    гуд
    спасибо)
    очень понравилось
     
    1 person likes this.
  6. [Alteza]

    [Alteza] Banned

    Joined:
    21 Apr 2010
    Messages:
    64
    Likes Received:
    113
    Reputations:
    16
    Подробнее о Connected Device Configuration (CDC)

    Давайте я попробую разъяснить немного о CDC, рассказать что это, с чем его едят.

    Конфигурация Connected Device Configuration (CDC) предназначена лишь для фиксирования основных возможностей каждого вида устройств в категории устройств, для которой она предназначена, а именно, устройств с 2МБ или более полной памяти, при этом не только RAM, но и ROM. (ОЗУ и ПЗУ).

    В CDC определено использование виртуальной машины полной платформы Java 2, которая называется "компактной виртуальной машиной" (Compact Virtual Machine (CVM)).

    Остановимся подробнее на CVM.

    CVM. Хотя CVM обладает теми же свойства, что и J2SE VM, она создана для потребительских и встраиваемых устройств. Это означает, что стандарт VM J2SE был модернизирован, чтобы соответствовать ограничениям устройств с ограниченными ресурсами. Сюда включены следующие свойства получившегося в результате продукта CVM:
    улучшенная запоминающая система;
    небольшие временные интервалы сборки мусора в среднем;
    полное отделение виртуальной машины от системы памяти;
    модульные сборщики мусора;
    сборка мусора по поколениям.
    В частности, CVM была спроектирована с учетом предоставления следующих свойств:

    Code:
    портативность; 
    быстрая синхронизация; 
    выполнение классов Java отдельно от постоянной памяти (ROM); 
    поддержка естественных потоков; 
    зоны обслуживания малых классов; 
    предоставление интерфейсов и поддержка служб операционной системы реального времени (RTOS); 
    преобразование потоков Java непосредственно в естественные потоки; 
    поддержка всех свойств и библиотек виртуальной машины версии 1.3, Java 2: безопасность, слабые ссылки, Java Native Interface (JNI, собственный интерфейс Java), Remote Method Invocation (RMI, интерфейс вызова удаленных методов), Java Virtual Machine Debugging Interface (JVMDI, интерфейс отладки виртуальной машины Java). 
    
    Библиотеки классов в CDC. CDC устанавливает минимальный набор библиотек классов и API. Она поддерживает следующие стандартные пакеты Java:

    Code:
    java.lang — системные классы виртуальной машины Java; 
    java.util — базовые утилиты Java; 
    java.net — дейтаграмма Universal Datagram Protocol (UDP) и ввод/вывод (I/O); 
    java.io — файловый ввод/вывод Java; 
    Java.text — самая минимальная поддержка интернационализации (I18N — смотри главу 9); 
    Java.security — минимальная защита на мелком уровне и шифрование сериализации объекта.
    В общем это был краткий обзор. CLDC была рассмотрена выше. В программирование я считаю пока углубляться не стоит. На этом можно считать статью завершенной, но по мере возможности буду выкладывать обзоры различных java приложений. Если требуется, то на днях постараюсь собрать мини FAQ по данной теме.
     
    1 person likes this.