english
українська
 Биография 
 Выпускная работа магистра 
 Ссылки 
 Библиотека 
 Галерея 
 Отчёт о поиске 
 
Симилетов Александр Сергеевич

Симилетов Александр Сергеевич

elmm @ ukr.net
И
н
д
и
в
и
д
у
а
л
ь
н
о
е

з
а
д
а
н
и
е

Разработка программного обеспечения под платформу Symbian

Что такое Symbian

Что такое Symbian? Symbian - это операционная система (ОС), разработанная для мобильных устройств. Целью разработки этой ОС было создание единой платформы для мобильных устройств и телефонии. Symbian предоставляет продвинутую, и гибкую платформу для мобильных устройств, поддерживающую широкий набор средств коммуникации и сервисов, необходимых для разработки программного обеспечения различной направленности - будь то бизнес приложения, средства коммуникации, игры. Эта ОС была лицензирована большим количеством производителей мобильных телефонов, такими как Nokia, Panasonic, Samsung, Ericsson.

Немного истории

ОС Symbian разрабатывается одноимённой компанией. Она была основана в 1998 году. Основателями Symbian являлись Ericsson, Nokia, Motorola и Psion. В последствии Motorola покинула сообщество Symbian. К середине 2004го года все мировые лидеры по производству мобильных телефонов лицензировали технологию Symbian. На рынке насчитывается порядка 26 различных моделей телефонов, с ОС Symbian. Около 18 из них получили широкое распространение. Symbian динамично развивающаяся ОС. Текущая версия ОС уже достигла цифры 7. Следующая версия обещает поддержку последних стандартов Java, многопоточное ядро реального времени, поддержку IPv.6 и QoS, встроенное API для трёх мерной графики (OpenGL) и многое другое. Более подробную информацию, о фирмах лицензировавших Symbian и доступных моделях телефонов вы можете найти на официальном сайте Symbian.

Как начать программировать под Symbian
Что нам надо знать

Для того что бы начать разрабатывать приложения для платформы Symbian необходимо знать один из двух языков программирования, поддерживаемых Symbain - это либо C++ либо Java. Так как я использую С++ то в дальнейшем будет рассмотрено разработка ПО с использованием именно этого языка. Если вы имели опыт разработки программ с использованием, какого либо ООП ориентированного фреймвёка, на подобие MFC, wxWindows и т.п., то вам будет гораздо легче разобраться со структурой этой ОС. Также желательно иметь опыт в использовании основных сервисов и компонентов, доступных в ОС - таких как сети, много поточность, динамические библиотеки. При наличии таких знаний вы, изучив особенности Symbian, сможете быстро приступить к разработки своего программного обеспечения. Однако, не смотря на то, что Symbian во многом похожа на другие ОС, у неё есть не мало своих особенностей. Некоторые из них сразу же бросаются в глаза, некоторые становятся заметны только после того как вы сломали уже не одно копьё, в борьбе над решением поставленной перед вами задачи.

Необходимый инструментарий

И так вы обладаете необходимыми знаниями и опытом или просто полны решимости разобраться, что к чему, не смотря ни на какие трудности. Что же нам понадобится для этого и где нам это взять. А нужно нам SDK, под определённую платформу. Таким платформ существует несколько - у Nokia, к примеру, есть Series 60, 80 и 90, также своё SDK есть у Eriksson. Идём на сайт для разработчиков соответствующей фирмы, выбираем платформу, качаем, устанавливаем, настраиваем и переходим к следующему пункту.

Если вы установили SDK для Series60 под Microsoft Visual C++, то вот вам пара советов. После установки SDK нужно в переменные окружения добавит переменную с именем EPOCROOT и значением, указывающим на путь без диска, куда был установлен SDK. Например: EPOCROOT=\Symbian\7.0s\Series60_v20\. Также у вас должен быть установлен perl. Проекты необходимо размещать на том же диске, куда был установлен SDK.

Структура директорий. Типы файлов проекта

Сначала о структуре директорий в SDK (здесь и далее речь идёт о SDK под Series60). Директории Examples, Series60Ex, SymbianSampleCode содержат исходный код примеров. Директория Series60Doc содержит документацию. Series60Tools содержит несколько полезных инструментов, таких как wizard и toolbar к Visual Studio и др. Epoc32 содержит основные элементы SDK, такие как компилятор gcc, набор библиотек и подключаемых файлов, средства для сборки проекта, эмулятор. В папке \release\wins\ находятся две директории - udeb и urel там находятся debug и release версии эмулятора (epoc.exe). Также туда помещаются ваши собранные динамические библиотеки. Собранные приложения помещаются в под директорию \z\system\apps\.

Типичный проект состоит из следующих директорий:

- group - содержит файл проекта (.mmp), файл bld.inf который указывает какой .mmp файлы использовать для сборки, файлы ресурсов (rss),а также файлы для сборки, генерируемые утилитой bldmake.

- inc - содержит подключаемые файлы (.h, .hrh).

- src - исходные файлы проекта.

Помимо стандартных расширений исходных файлов разработчики ОС советуют использовать свои расширения для повышения наглядности структуры проекта. Так, например, принято помещать все перечисления (enumerations), и дефайны в файл с расширением .hrh. Файл проекта имеет расширение .mmp и имеет текстовый формат. Ниже приведено содержимое файла проекта. На его примере рассмотрим, какие директивы он может содержать.

/* Copyright (c) 2001, Nokia. All rights reserved */
TARGET            animation.app
TARGETTYPE        app
UID               0x100039ce 0x10005b88
TARGETPATH        \system\apps\animation

SOURCEPATH        ..\src
SOURCE            animationapplication.cpp
SOURCE            animationdocument.cpp 
SOURCE            animationappui.cpp
SOURCE            animationappview.cpp
SOURCE            animation.cpp

SOURCEPATH        ..\group
RESOURCE          animation.rss

USERINCLUDE       ..\inc
USERINCLUDE       ..\..\client\inc

SYSTEMINCLUDE     \epoc32\include

LIBRARY           euser.lib
LIBRARY           apparc.lib
LIBRARY           ws32.lib
LIBRARY           cone.lib
LIBRARY           animation_client.lib
LIBRARY           eikcore.lib
LIBRARY           avkon.lib

Прежде всего он может содержать комментарии как в C/C++.

TARGET - имя выходного файла.

TARGETTYPE - тип проекта. В данном случае это app - приложение (application) - динамическая библиотека, с приложением (в Symbian практически не используются exe модули - всё реализуется с помощью dll).

UID - уникальный идентификатор. Каждая dll должна иметь UID, ниже будет подробнее описано что это такое и как его получить.

TARGETPATH - относительный путь, куда будет помещён собранный модуль.

SOURCEPATH - путь к исходным файлам, задаётся относительно положения .mmp файла. SOURCE - имя исходного файла.

RESOURCE - имя ресурсного файла.

USERINCLUDE - путь к подключаемым файлам. Если вы создаёте из .mmp файла проект для Visual C++, то файлы, которые находятся в USERINCLUDE будут помещены в раздел "includes" сгенерированного проекта.

SYSTEMINCLUDE - путь к подключаемым файлам. В отличии от USERINCLUDE файлы, по этому пути не будут добавляться в раздел "includes" сгенерированного проекта.

LIBRARY - имя библиотеки, для линковки с собираемым приложением или динамической библиотекой.

Содержимое .inf файла может выглядеть следующим образом:

/* Copyright (c) 2000, Nokia. All rights reserved */
PRJ_MMPFILES

..\..\server\group\animation_server.mmp
..\..\client\group\animation_client.mmp
animation.mmp

При таком файле будут созданы файлы для сборки трёх проектов - animation_server, animation_client, и animation.

Основы сборки и отладки приложений

Мы немного разобрались в структуре SDK, знаем что есть что в проекте. Теперь мы хотим собрать пару примеров и протестировать их. Мы можем собрать проект под разные платформы, однако в начале нам надо сделать один общий шаг. Запускаем командный интерпретатор, переходим в директорию group, желаемого проекта и запускаем команду bldmake bldfiles. Если всё настроено нормально получаем файл ABLD.BAT при помощи которого мы и будем осуществлять сборку под разные платформы. В SDK, которым я пользуюсь, доступны следующие платформы:

- WINS - собирается под эмулятор под платформу Windows.

- ARMI - собирается под устройство, поддерживающее набор инструкций ARMI.

- ARM4 - собирается под устройство, поддерживающее набор инструкций ARM4.

- THUM - собирается под устройство, поддерживающее набор инструкций THUMB. THUMB инструкции в отличии от ARM короче, и занимают меньше памяти, однако при выполнении они "на лету" преобразуются процессором в ARM инструкции и это теоретически может несколько замедлит выполнение.

- VC6 - генерирует проект для Microsoft Visual C++ 6. Файл проекта помещается в директорию \Epoc32\BUILD\.

- CW_IDE - генерирует проект для Metrowerks Code Warrior.

Выбираем нужную нам платформу и тип сборки - релиз или отладочная (urel или udeb) набираем команду abld с параметром build (можно набрать её с параметром help и прочитать о дополнительных её возможностях), именем платформы и типом сборки. Ниже приведены примеры использования команды.

abld build wins udeb - собрать отладочную версию под эмулятор, для Windows платформы.

abld build vc6 udeb - создать проект для Microsoft Visual C++ 6.

abld build thumb urel - создать релиз версию под THUMB набор инструкций.

abld build thumb udeb - создать отладочную версию под THUMB набор инструкций.

abld build armi urel - создать релиз версию под ARMI набор инструкций.

abld build armi udeb - создать отладочную версию под ARMI набор инструкций.

Вот мы научились собирать. Теперь мы хотим иметь возможность запустить и отладить то, что мы собрали. Рассмотрим, как отлаживать приложения для ОС Symbian с использованием Microsoft Visual Studio 6. Открыв и скомпилировав полученный проект, мы запускаем его на отладку. Если он представляет собой проект exe файла, то мы сразу получим окно эмулятора, в котором выполняется это приложение. Если же у нас dll (просто библиотека или app - приложение) то на запрос "Executable for debug session" указываем исполняемый файл эмулятора - epoc.exe (\Epoc32\release\wins\udeb\epoc.exe - его отладочная версия). В запустившемся эмуляторе выбираем и запускаем нужное приложение. Отлаживаем, как и всякий другой софт - точки останова, значения переменных - всё работает без проблем.

Особенности API ОС Symbian

Итак, что такого особенного в Symbian'овском API? Если вы видели библиотеки на подобие MFC или wxWindows то вас ни чего не удивит - в Symbian всё представлено в виде классов - классы потоков, процессов, сокетов, окон и т.п. Но MFC и wxWindows были лишь надстройками над родным API операционной системы, которое было реализовано на C. Symbian же реализован именно на C++ - поэтому от ООП вы никуда не денетесь. Ещё один нюанс - Symbian рассчитана на мобильные устройства, телефоны. Такие устройства обладают ограниченными аппаратными ресурсами - небольшое количество памяти, не особо шустрый, но энергетически не прожорливый процессор и т.п. К тому же выключаются и перезагружаются такие устройства не часто - поэтому ваше приложение должно быть готово работать в таких жестоких условиях, не вызывая утечек памяти и других системных ресурсов, работать быстро и долго.

Некоторые элементы ОС могут размещаться в ПЗУ устройства, причём при исполнении такого кода он не будет загружаться в оперативную память. А поскольку такие компоненты реализуются в виде динамически загружаемых библиотек, создатели ОС Symbian наложили некоторые ограничения на DLL. Во первых вы не можете использовать глобальные переменные. Тут можно натолкнутся на один из подводных камней глобальных переменных - если вы случайно её создали то пока вы будете отлаживать программу под эмулятором - всё будет компилироваться без проблем, но как только вы попробуете скомпилировать под устройство, у вас ни чего не выйдет, и придётся переписывать не один десяток строк работающего, отлаженного кода. Также каждая dll должна иметь уникальный идентификатор - UID. Эти идентификаторы можно получить у Symbian, хотя на время отладки и разработки его можно придумать случайным образом. Подробнее об этом будет написано в разделе по созданию dll.

Также много внимания разработчики Symbian уделяют обработке исключений и методам создания и разрушения. Опять же для исключения утечек ресурсов рекомендуется создавать объекты, которые при инициализации выполняют потенциально "опасные" действия, не через оператор new а через функции которые в случае сбоя гарантированно очистят занятые объектом ресурсы.

Еще один неприятный момент, это то, что в разных SDK имеются различные библиотеки для работы с пользовательским интерфейсом. Поэтому для разных устройств вам придётся писать разные приложения, с различным интерфейсом.

Стиль кодирования

Немного о стиле кодирования. В документации к SDK имеются чёткие рекомендации о том, как нужно оформлять код. Они категорически отказываются от так называемой "венгерской" нотации, когда первые символы имени означают тип переменной. Вместо этого, если переменная является членом класса, то в начале её имени рекомендуется ставить 'i', если переменная локальная - то 'a'.


биография  индивидуальное задание  выпускная работа магистра  ссылки  библиотека  галерея  отчёт о поиске  english  українська