Информационные технологииStfw.Ru 🔍

Дао Symbian

Возьми свой смартфон под контроль
🕛 28.08.2008, 16:10
После публикации статей «СМС-шпионаж» в сентябрьском номере «Х» и «Symbian tips'n'Tricks» в октябрьском «Спеце» я получил море писем с просьбами рассказать о том, как изучить основы кодинга под смартфоны на базе Symbian и какой инструментарий использовать. Что же, по просьбам трудящихся я и опишу этот трудоемкий, но захватывающий процесс создания программы для смартфона.

На чем писать?

Под Symbian можно писать и на Яве, и на Си, и даже на Python и C#. Но что касается Java2ME, то ни быстрота выполнения кода, ни возможности, предоставляемые этим языком разработчику, не являются удовлетворительными. Аналогичная ситуация пока и с .NET для смартфонов. Про Питон, думаю, вообще говорить не стоит :).

С++ же, в свою очередь, позволяет использовать ОС на полную катушку, поскольку сама Symbian и написана на этом могучем языке :).

Symbian бывают разные

Как ты, наверное, знаешь, ОС Symbian - лишь основа программной части любого смартфона, предоставляющая необходимые для работы API. Внешний вид же и способ взаимодействия с пользователем определяется одной из двух реализаций интерфейсных надстроек над ОС - Series60 от компании Nokia и UIQ от Sony Ericson. В этой статье я буду ориентироваться на разработку под Series60, поскольку платформа UIQ хоть и вызывает восхищение с эстетической точки зрения, но практически ограничивается 3-4 моделями смартфонов от Sony Ericson. К выпуску смартов же на S60 подключились, помимо Nokia, и такие скорострелы смартфоностроения, как Samsung и LG. На сегодняшний день количество моделей на этой платформе перевалило за 50, что с успехом можно наблюдать в часы пик в метрополитене :).

Инструментарий

Определившись с языком, нужно разобраться со средой разработки, которую мы будем использовать для создания проектов. На данный момент очень хорошо себя зарекомендовала связка Visual Studio.NET 2003 + Carbide.VS. В октябрьском «Спеце» мы уже писали о том, почему лучше использовать этот инструментарий. Поэтому здесь я лишь напомню, что Carbide.VS - надстройка над студией от компании Nokia. Взять ее можно на нашем диске, либо на forum.nokia.com. После установки студии и надстройки необходимо определиться, под какую версию ОС мы будем писать. На сегодняшний момент ходовыми являются версии 7.0, 8.0, 8.1 и 9.1. Для каждой версии платформы есть свой набор инструментов, называемый SDK и включающий документацию, примеры кода, эмулятор смартфона на ПК и прочие тулзы, необходимые для сборки проекта. По большому счету программа, написанная для Symbian 7.0 с использованием соответствующего SDK, будет успешно работать и на последующих версиях до 8.1 включительно (если не применять какие-нибудь специфические API). SDK также есть на нашем диске и на forum.nokia.com. Устанавливать это дело нужно на диск С (это важно), после чего появится директория вида C:/Symbian/Series60/7.0/Epoc32. Вот в ней-то и нужно создавать проекты, чтобы компилятор и линковщик нормально работали.

Из чего состоит проект на Symbian?

После установки необходимого инструментария надо разобраться, что есть что в минимальном проекте. Запускай среду и выбирай New Symbian Project в папке Visuall C++ Project. Не забудь задать путь проекта в папке Epoc32. Далее в диалоговом окне выбирай SDK (если их в списке нет, то юзай кнопку Enable/Disable SDK) и указывай тип проекта Classic. Project Template - S60 EIKON Control-Based Application («Hello, World»). После этого жми Finish, и среда сгенерирует тебе кучу разных непонятных классов и файлов в папке проекта.

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

- AIF - здесь по умолчанию хранится иконка приложения (в варианте для статусной панели программы и для меню смартфона). Обрати внимание, что, для того чтобы лого программки нормально смотрелось в меню, необходимо для каждой картинки создавать черно-белую маску, где черным будет закрашена видимая (показываемая) часть. Часть картинки, выкрашенная в белый цвет, не отобразится в меню программ, а ее место займет общий фон темы оформления, установленной на смартфоне. Советую подробнее посмотреть документацию по Bitmap и утилите AifTool.

Кроме того, в этой папке еще имеется файл aif-ресурсов приложения, имеющий примерно такой вид:

#include <aiftool.rh>

RESOURCE AIF_DATA

{

app_uid=0x01ff9a56; //UID приложения

num_icons=2; //количество иконок

...

}

- DATA - в этой директории хранятся файлы ресурсов приложения, являющиеся очень важной частью любой GUI-программы для Symbian. В ресурсах определяются строки, пункты и структура меню, внешний вид статусной панели приложения, структура списков и других контролов. Описание любого ресурса начинается с ключевого слова RESOURCE. К примеру, простейшее меню, вызываемое при нажатии левой функциональной кнопки, описывается следующим образом:

RESOURCE MENU_PANE r_symbian3_menu

{

items =

{

MENU_ITEM { command = ESymbian3CmdAppTest; txt = qtn_appl_test; },

MENU_ITEM { command = EAknCmdExit; txt = qtn_appl_exit; }

};

}

MENU_ITEM соответствует каждому новому пункту меню. Здесь command - идентификатор команды, вызываемой при выборе соответствующего пункта меню, а txt - подпись пункта. Ресурс caption’а приложения вынесен в отдельный файл и имеет такой вид: RESOURCE CAPTION_DATA.

{

caption = qtn_app_caption_string; //Подпись приложения

shortcaption = qtn_app_short_caption_string; //Короткая подпись приложения

}

- GROUP - здесь лежат файлы, необходимые для сборки проекта. Наибольший интерес представляет файл с расширением mmp. Это файл описания проекта, из которого линковщик берет все пути подключаемых библиотек, хедеров и т.д. Рекомендую ознакомиться со структурой MMP и почитать документацию.

Хочу обратить внимание на следующий факт: часто при добавлении нового функционала в приложение необходимо использовать какой-либо класс, требующий подключения определенного хедера и библиотеки. Соответственно, эту библиотеку нужно прописывать в mmp-файл следующим образом: LIBRARY megalib.lib. При этом в VS наблюдается такой глюк: при сборке проекта, если она до этого уже производилась, иногда появляется сообщение об ошибке, в котором говорится о том, что требуемая библиотека не подключена, хотя это не так! В подобных случаях нужно делать ReBuild Solution. Если и это не помогает, можно попробовать реимпортировать свой проект. То же самое касается и файлов ресурсов: если ты видишь, что изменения в них никак не отражаются на сборке, сделай ребилд.

- INC - здесь располагаются хедеры использующихся в проекте классов. Стоит отметить, что в Symbian C++ принята очень полезная практика - для каждого более-менее значимого класса создавать отдельную пару «хедер - cpp‘шник». Кроме того, в этой папке имеется файл с расширением hrh, в котором содержится перечисление всех юзерских команд, вызываемых при выборе определенного пункта меню:

enum TXaCommandIds

{

cmd_mymoney=1,

cmd_myanketa,

cmd_myanketa_view,

cmd_myanketa_change,

cmd_shownadv,

cmd_cab,

cmd_hide

};

Чтобы избежать всяких дурацких ошибок при сборке, важно не забывать вносить сюда все новые команды.

Тут же лежит файл, содержащий локализованные версии строк, используемых в приложении для подписей, лейблов, диалогов и т.д. Как правило, такой файл состоит из строк вида:

#define caption_cmd_title "МегаПрога"

#define caption_cmd_exit "Выход"

- SIS - тут находится pkp-файл, содержащий информацию, необходимую для сборки приложения, включая универсальный идентификатор приложения и пути файлов, которых надо поместить в сборку (картинки, ресурсы и т.д.).

Так, например, в строке вида «"C:\Symbian\Series60\7.0\Epoc32\release\thumb\urel\Symbian4.app"-"!:\system\apps\Symbian4\Symbian4.app"» мы указываем, что файл Symbian4.app будет установлен в директорию system\apps в смартфоне.

Сама сборка, то есть установочный sis-файл, окажется в рассматриваемой папке.

- SRC - тут все просто - сорцы используемых в программе классов.

Базовые классы проекта

Элементарный Symbian-проект состоит из следующих классов:

- Application - содержит точку входа и создает класс Document;

- Document - задает некоторые свойства приложения (видимость/невидимость, например) и создает класс AppUI;

- AppUI - формирует интерфейс пользователя и обрабатывает события (выбор пункта меню, элемента списка и т.д.), а также создает класс Container;

- Container - класс, служащий контейнером для контролов (списки, редакторы и т.д.), а также отвечающий за перерисовку и настройку контролов.

Думаю, на начальном уровне особый интерес представляет класс AppUI, поскольку он дает возможности обработки событий и команд пользователя. Рассмотрим, например, как обрабатывается выбор пункта меню. Как ты помнишь, в файле ресурсов содержится идентификатор команды, генерируемой при выборе каждого пункта. За перехват и обработку этих команд отвечает метод HandleCommandL класса AppUI. Код обработки выглядит так:

void CXaAppUi::HandleCommandL(TInt aCommand)

{

switch ( aCommand )

{

case cmd_first:

{

//какой-то код

}

break;

case cmd_hide:

{

Exit(); //выход

}

break;

case EAknSoftkeyBack:

case EEikCmdExit:

{

Exit();//обработка нажатия на правую клавишу «Back»
break;

}

default:

break;

}

}

Кроме этого метода, AppUi предоставляет еще множество полезных методов и свойств, почитать о которых стоит в SDK Help.

Кстати, основной проблемой кодинга под Symbian является полное отсутствие визуальности, к которой нас приучили такие среды, как Delphi и VS.NET. Другими словами, весь код придется набирать ручками, и чтобы этом в деле не ошибиться, нужно хорошо разбираться в C++. Весь кодинг объектно-ориентированный, поэтому его основные парадигмы нужно знать и принимать всем сердцем :).

Использование русских строк в ресурсах

Рано или поздно ты наверняка захочешь использовать в названии программы, подписях и т.д. кириллицу. Если просто взять и зафигачить ее в файлы ресурсов, то вместо русских букв на экране смартфона будут в лучшем случае квадратики, а в худшем - вообще какой-нибудь ужас. Чтобы этого не произошло, нужно в файле ресурсов вверху написать «CHARACTER_SET UTF8».

После этого файл ресурсов необходимо сохранить в кодировке utf-8, с чем справится великий и могучий Блокнот. Все вроде бы хорошо, но, после того как ты проделаешь эту операцию, проект у тебя не соберется :). Виной тому будут 3 служебных символа, добавленных Блокнотом в начало файла ресурсов. Их нужно убрать любым HEX-редактором.

В результате проект запустится, и ты сможешь наслаждаться нормальным русским текстом на экране мобилы.

Особенности кодинга под Symbian 9.1

После выхода новой версии операционки, жизнь кодеров под Symbian несколько усложнилась, что во многом связано с вводом новой платформы безопасности Symbian Signed. Теперь любое приложение для девятой версии, должно быть подписано цифровым сертификатом. Сертификат бывает трех типов: сертификат разработчика, позволяющий использовать любые API, но только на телефоне самого разработчика (привязка к IMEI); бесплатный сертификат, позволяющий использовать лишь ограниченный набор API, гарантирующий, что ты не впариваешь потребителю троян; сертификат, позволяющий использовать любые API. Последний выдается только после того, как приложение пройдет проверку парней из Symbian, которая стоит денег.

Кроме того, изменились компилятор и линковщик, поэтому в любом случае проекты, создававшиеся для более ранних платформ, необходимо перекомпилировать с использованием нового SDK.

Несколько слов напоследок


Естественно, для полного изложения основ кодинга под Symbian не может хватить одной статьи, поэтому здесь я привел только ключевые моменты, с которыми сталкивался сам. В качестве напутствия могу посоветовать читать больше документации, штудировать хелп.

Мобильные системы   Теги: Symbian

Читать IT-новости в Telegram

Читайте также:

Symbian UIQ 2.0 и 3.0

Информационные технологии
Мы в соцсетях ✉