Сделай сам - учимся кодить под смартфоны
об основах кодинга под смарты на базе Symbian
🕛 25.03.2008, 13:05
Hello All!Итак, сегодня я расскажу , об основах кодинга под смарты на базе Symbian. Данный процесс потребует некоторых усилий и терпения, а также определенного софта. Материал для статьи взят из статей Дмитрия Тарасова, а также www.hackzone.ru
Symbian - весьма распространенная система, и производители языков высокого уровня не замедлили выпустить кучу продуктов для программирования под нее. Можно писать на Яве, на Си, на Python, и на С#. Что касается Java2ME ни бытрота выполнения кода, ни возможности не располагают к разработке на ней. В принципе ситуация с .NET аналогична. По этой причине наилучшим выходом можно использовать С++, ибо - он весьма гибок, и к тому же сама Symbian написана на нем ) .
Как наверное все знают - Symbian всего лишь программа, написанная для «1. Управления ресурсами смартфона, 2. Для взаимодействия между пользователем и устройством». На самом деле все немного по другому. Это лишь основа программной части предоставляющая необходимые для работы API. Интерфейс же определяется одной из 2х настроек - Series 60 и UIQ. В этот статье будет рассотрена разработка именно под Series 60, ибо UIQ - пока малораспростронена и используется лишь в нескольких моделях от сониэрриксон. Помимо Нокия на S60 работают также LG и Samsung.
Теперь о среде разработки - на данный момент рулит связка Visual Studio .NET 2003 + Carbide VS. В общем то Carbide VS - это лишь настройка над студией от Нокиа. Взять ее мона на forum.nokia.com После установки и настройки надо бы определиться под какую версию собственно писать. Как уже было рассказано в статьях на http://smart-soft.info/ есть версии 7.0, 8.0, 8.1, 9.1.
Для каждой версии платформы есть свой инструмент (SDK) и в нем есть все необходимое. По сути прога написанная под 7.0 будет работать на версиях до 8.1 при использовании соответствующего SDK (который есть на forum.nokia.com).
Итак после установки запускаем среду и выбираем New Symbian Projekt в папке Visual C++ Projekt. Не забудь задать пусть к папке с SDK. Далее в диалоговом окне выбираем SDK и указываем тип проекта - Classic Projekt Template - S60 EIKON Control-Bases-Application. После чего жмем Finish и среда создает в папке проэкта кучу каких то классов и файлов.
- AIF - здесь по умолчанию храниться иконка приложения. Кроме того в этой папке еще есть файл aif-ресурсов имеющий вид:
# include <aiftool.rh>
RESOURCE AIF_DATA
{
app_uid=0x01ff9556; /*UID приложения*/
num_icons=2; /*количество иконок*/
…
}
- Data - в этой папке храняться файлы ресурсов приложения, я вл. Важной частью любой проги. В них определяються строки, пункты, структура меню, внешний вид статусной панели. Описание любого ресурса начинаеться с RESOURCE.
Например простейшее меню вызываемое нажатием левой клавиши выглядит так:
RESOURCE MENU_PANE rsymbain3_menu
{
items=
{
MENU_ITEM {command = ESymbian3CmdAppTest;
Txt = qtn_appl_test; },
MENU_ITEM {command = EAknCmdExit; txt =
Qtn_appl_exit; }
};
}
Здесь MENU_ITEM соответствует каждому новому пункту меню, command - идентификатор команды, исполняемой при выборе пункта меню, а txt - подпись пункта.
- Group - здесь лежат файлы необходимые для сборки проекта. Файл с расширением mmp - это файл описания проекта, из которого линковщик берет все пути подключаемых библиотек и т.д. Часто при добавлении нового функционала в приложение, необходимо использовать какой либо класс, требующий подключения определенного хэдера и библиотеки. Соответственно эту библиотеку надо прописывать в mmp-файл - LYBRARY megalib.lib
- Inc - здесь располагаются хедеры использующиеся в проекте классов. В Cymbain C++ принята сл. практика - для каждого класса создавать пару «хедер - cpp'шник». Кроме того в папке есть файл с расширением hrh, в нем должно содержаться перечисление всех юзерских команд. Что бы избежать ошибок при сборке сюда надо вносить новые команды по аналогу с уже сущ-ми. Тут же лежит файл, содержащий локализованные версии строк, используемых для подписей, лейблов и т.д.
#define caption_cmd_tittle «Program 1»
#define caption_cmd_exit «Exit»
- Sis - тут находиться pkp файл, содержащий данные необходимые для сборки приложения. Сам sis файл также окажется в этом каталоге.
- SRC - сорцы используемых в программе классов.
Базовые классы проекта:
- Application - содержит точку входа и создает класс Document.
- Document - задает некоторые св-ва приложения и создает класс AppUI.
- AppUI - формирует интерфейс пользователя, обрабатывает события и создает класс Container.
- Container - класс, отвечающий за прорисовку и настройку контролов, а так же их содержание (выбор пункта меню, эл-ты списка и т.д.)
Рассмотрим как обрабатывается выбор пункта меню. В файле ресурсов содержиться идентификатор команды, генерируемой при выборе каждого пункта (MENU_ITEM command = ESymbian3CmdAppTest - см. выше), за перехват и обработку этих команд отвечает метод HandleCommandL класса AppUI. Код обработки:
Void CXaAppUi:: HandleCommandL(TintaCommand) {
Switch (aCommand) {
case CMD_first:
{
/* какой либо код*/
}
break;
case cmd_hide:
{
Exit(); /*выход*/
}
break;
case EAknSoftkeyBack:
case EEikCmdExit:
{
/*обработка нажатия на правую клавишу “BACK”*/
Exit();
break;
}
default;
break;
}
}
Уфф… В общем данный код позволяет реализовать знакомый вам оператор выбора switch, и таким образом вы можете создать менюшку для своей программы.
Отсутствие визуальности (как в привычной Delphi) может вызвать определенные проблемы, весь код придеться набирать ручками (как в старые добрые времена).
Проблема с русским языком. Если мы хотим использовать в программе русский язык, честь нам и хвала (от не очень продвинутых в энглишэ пользователей). Если мы просто начинаешь писать в файле ресурсов на русском языке, то на смарте будут отображаться разнообразные кракозябры, с которыми многие вероятно знакомы по опыту написания прошлых программ. Что бы не гадать назначение мылимых и немыслимых символов, надо в файле ресурсов сверху написать «CHARESTER_SET UTF8». После этого необходимо сохранить файл ресурсов в кодировке utf-8, для чего вполне можно юзать notepad.exe. А вот проект после этого у нас не соберется ))) . Виноваты 3 служебных символа добавленные блокнотом в файл ресурсов. Удалим их HEX-редактором. В результате русский текст появиться на экране мобилки ).
Symbian 9.1
Кодинг в данной версии весьма усложнен из-за новой платформы безопасности Symbian Signed. Ибо любой приложение должно быть подписано любым сертификатом. Об этом выы можете прочесть на http://smart-soft.info/publ/3-1-0-15 где уважаемый администратор сайта подробно описал технологию и способы получения сертификатов. Кроме того поменялись компилятор и линковщик, так что нам при разработке придется все перекомпилить с использованием нового SDK.
Заключение:
Данный материал безусловно полезен, но никто не написал ни одной программы прочитав 3 страницы. Советую изучить книги по С\С++, а так же хорошенько покопаться на тематических форумах вроде этого ). Напоминаю что я не программист-самоучка и тем более не журналист, материалы этой статьи взяты у Дмитрия Тарасова, и просто опробованы мною на практике. У меня получилось написать 6 программ от «hello Word», и создания менюшки до вычислений sin/cos/tg в пределах значения их таблицы из учебника алгебры за 10 класс. Также опробован метод русификации программы.
Ecafed 10.03.2006
Спасибо Дмитрию Тарасову, написавшему материал и подтолкнувшему меня его опробовать.
Порталу www.hackzone.ru - за полученную квалификацию в знании основ С\С++, помощи в написании программ, и разъяснения различных вопросов.