S y m b i a n – у маси!

Отже, ви вирішили написати додаток для Symbian OS. Стійте! Насамперед прочитайте Основне Правило. винесене у заголовок! Розробка під Symbian OS – дуже складна справа. Необхідно мати глибокі пізнання в мові C++ і старанно вивчати API, що надається. Багато чого в парадигмі розробки здасться дивним та загадковим. Багато чого доведеться осягати з нуля. Те з чим ви зіткнетеся:

Труднощі у пошуку документації (та й та вся англійською)

Відсутність звичного уявлення рядків у мові

Специфічні для Symbian прийоми роботи з пам'яттю

Специфічні способи обробки виняткових ситуацій

Цікава модель багатозадачності (яка насправді зовсім не багатозадачність), звана Active Objects

Проблеми компіляції, пов'язані з тим, що доведеться використовувати командний рядок

Крім того, вже є безліч додатків під Symbian, розроблених відомими компаніями (наприклад ігор вже дуже багато, причому серйозних, наприклад, Doom, Tomb Rider і т.д.), з якими вам належить вступити в конкуренцію %)

Отже, почнемо з того, що потрібно, щоб розпочати розробку. Коштів розробки є кілька. Ось вони:

Я користувався тільки останнім комплектом, тому нічого певного про два інші сказати не можу. Для CodeWarrior'а, напевно, буде потрібно Nokia Series 60 SDK for Symbian OS. Отже, як встановити все, що потрібно, якщо ви пішли моїм шляхом.

Спершу ставите студію. Одночасно слід зазначити, що SDK заточений під 6/97 MS Visual Studio, тобто. для цих версій є спеціальний візард, що перетворює ваш програмний проект з того виду, який прийнятий у Symbian на той, який розуміє студія. Але якщо у вас VS.NET (як і у мене), не впадайте у відчай. Є спеціальна утилітка EpocFromMMP(Розроблена судячи з усього нашим співвітчизником), яка додає візард для створення нових проектів з MMP файлів (які суть проекти Symbian). На даний момент вона поширюється платно (вона, до речі, того варта). Але в мене залишилася стара безкоштовна версія, можна скачати тут. Вона просто копіює всі потрібні файли (насправді не всі, деякі потім доводиться вручну докопіювати) в папку проекту і створює цей проект, налаштовуючи всі потрібні властивості.

Update:тепер EpocFromMMP виходить під маркою beekeros – на сайті доступна безкоштовна версія.

Наступний етап - поставити Nokia S60 SDK для Symbian OS (якщо ви звичайно розробляєте під Nokia). Його можна безкоштовно скачати з сайту Nokia (див. посилання вище), щоправда важить він під 100Мб. Це набір компілятора (насправді використовується компілятор студії), емулятора, прикладів, документації, різних утиліт і т.д. і т.п. Інтерфейс м'яко кажучи не дружній %) Коли ви ставите SDK не забудьте встановити Perl! Усі скрипти компіляції та інших речей написано на Perl'e. Ще потрібна Java. На яві там кілька програмулін, без яких цілком можна обійтися, але можливо вона необхідна для правильної роботи емулятора. Причому програмуліни в тій версії SDK, яка є у мене, працюють тільки з JRE 1.3, а мені потрібна на машині 1.4.1 мінімум %) Один момент - не змінюйте будь-ласка папку, в яку ставиться SDK! Може у мене руки криві, але в іншій папці (і боронь вас бог поставити її на диск, відмінний від того, де стоїть VS) SDK у мене жорстоко глючив. Коли ви поставите SDK, ви знайдете в папці з ним:

Epoc32 – тут знаходяться всі скрипти, емулятор тощо.

Epoc32Ex – приклади, стандартні для OS Symbian

Series60Doc – документація. Хелп починається з файлуstart.chm, крім того є кілька корисних речей у форматі PDF. Рекомендую Coding Idioms for Symbian OS

Series60Tools - різні додаткові примочки, якими я не користуюсь

Ну от і все. Можна приступати до роботи %)

Тут описується, як скомпілювати і запустити вашу програму для Symbian . Як приклад було обрано додаток form із прикладів, що поставляються з інсталяцією. Приклади в папці % EPOCROOT %\ Series 60 Ex . Тут і далі % EPOCROOT % - змінна оточення, що містить папку, в якій встановлено SDK. У мене це \Symbian\6.1\Series60\. Зверніть увагу, що буква диска немає, так що якщо у вас проект на іншому в порівнянні з інсталяцією диску, то можна очікувати неприємностей.

Отже, спочатку структура проекту. За папками:

1. Потрібно у папці group створити компіляційні файли командою bldmake bldfiles. У папці з'явиться файл abld . bat, який використовується для компіляції.

Увага!Якщо у вас користувач з ім'ям, що містить українські літери, компілятор (використовується gcc ) не зможе отримати доступ до папки з тимчасовими файлами і компіляція завершиться з помилкою.

Результат компіляції знаходиться в папці % EPOCROOT % Epoc 32 Release thumb urel . Результатом є файл програми (*. app , у разі AknExForm . app ), файли ресурсів (*. rsc ), результат роботи aiftool (*. aif ). Тут можуть бути файли зображень (*. mbm ) та інші файли.

3. Для підготовки інсталяції ( sis - архіву) необхідно зайти в папку sis і виконати команду

4. Компіляція для емулятора під Windows. Зайдіть в папку group і виконайте команду abld build wins udeb. При спробі компіляції файл mspdb70.dll не знаходиться. Знайдіть його на диску тапропишіть шлях у PATH.Увага!Тут не можна використовувати лапки в дорозі, інакше він знову не перебуватиме. Після того, як ви це зробите, знову відбудеться помилка – не знайдено файл msobj10.dll. Потрібно зробити те саме, що й у попередньому випадку. Не забувайте про лапки! Результат компіляції можна знайти в папці % EPOCROOT%\Epoc32\Release\wins\udeb\z\system\apps\AKNEXFORM\.

5. Запуск емулятора проводиться запуском файлу % EPOCROOT % Epoc 32 Release wins udeb epoc . exe. Коли запуститься емулятор, ваша програма буде десь унизу (використовуйте джойстик емулятора).

Отже, нам необхідно створити з проекту в стилі Symbian, наявного, проект, придатний для використання з MS VisualStudio. Насамперед необхідно поставити EpocFromMMP (див вище).

Далі заходимо в VS і створюємо новий порожній солюшн File -> New -> BlankSolution.

* Part of : AknExForm

Та версія, що є в мене, їх не розуміє і глючить, якщо вони є. Ще момент – видалити з INCLUDE і SYSTEMINCLUDE у mmp файліелемент “.”, інакше не скопіюються як слід заголовні файли. SYSTEMINCLUDE повинен містити % EPOCROOT % Epoc 32 Include . Після цього можете натискати Generate і можна спробувати відкомпілювати проект. Швидше за все це відразу не вийде через те, що Epoc from MMP скопіював не всі потрібні файли. Наприклад, мені вручну довелося докопувати aknexform.loc. Можливі ще проблеми з тим, що іноді у вихідниках потрібно в #includ e змінити “” на <>.

Якщоне знаходить системні заголовні файли, то ви йдете у властивості проекту, в Configuration Properties -> C++ -> General -> Additional Include Directories. Там має стояти % EPOCROOT % Epoc 32 Include .

Якщоне знаходитьсистемні dllфайли, то ви йдете у властивості проекту в Configuration Properties -> General -> Intermediate Directory. Там має бути %EPOCROOT%\ EPOC32\RELEASE\WINS\UDEB\.

Якщо і після цього не компілюється (причин може бути безліч!) спробуйте запитати тут на форумі – намагатимусь відповісти.

Після компіляції хотілося б і запустити %) При спробі запустити VS має запитати, якою програмою це зробити. Вкажіть % EPOCROOT % EPOC 32 \ RELEASE \ WINS \ UDEB \ EPOC . EXE. Якщо не запитує і не запускає, йдете у властивості проекту (а то як же! %) Configuration Properties -> Debugging -> Command і прописуєте туди цей рядок.

Щоб створити свій власний проект, рекомендую взяти той же HelloWorld з прикладів, скопіювати його кудись собі, і на його базі розвивати свою програму. Коли ви попрацюєте з проектом в VS, в ньому напевно з'являться нові файли з вихідним кодом і нові бібліотеки. До речі, бібліотеку можна додати у властивостях проекту у Configuration Properties -> Linker -> Input -> Additional Dependencies. Так ви захочете це все відкомпілювати під реальну платформу. Моя версія EpocFromMMP дозволяє компілювати тільки дебаг-версії під Windows емулятор, так що доведеться копіювати всі ваші файли назад по папках проекту в стилі Symbian , додати ваші нові файли в mmp файл і потім компілювати з командного рядка, як описано вище. При цьому використовується власний компілятор ( gcc ), так що ви можете дізнатися тут багато нового про свій код %)))

При написанні коду для платформи Symbian прийнято певні правила іменування класів та інших структур (рекомендується ознайомитись із Symbian OS C++ Coding Standards). Ви, звичайно, можете цим правилам не дотримуватися (що не дуже зручно з точкизору читабельності коду), але вам все одно доведеться користуватися безліччю існуючих класів, які дотримуються цих правил, так що знати їх необхідно. Отже, за порядком.

Стаття написана з використанням матеріалів сайту NewLC. com.

T- цей префікс мають прості класи, які не мають конструктора і деструктора, вони можуть бути оголошені в стеку. Наприклад

C- всі C-класи є спадкоємцями CBase і зазвичай повинні бути визначені в купі (heap) за допомогою оператора new.

class CMyClass : public CBase

CMyClass myObject = новий (ELeave) CMyClass;

R– такі класи є проміжними ( proxy ) класами, вони являють собою хіба що шлюз, через який ви спілкуєтеся з фактичним об'єктом, але з пряму. Зазвичай такі класи мають функцію ініціалізації (Create, Open...) та завершення (Close, Dlete...). Об'єкт R-класу «дієздатний» лише між викликами ініціалізаційної та завершальної функції, якщо намагатися його використовувати не в цьому проміжку станів, ви швидше за все отримаєте аварійне завершення програми з повідомленням KERN – EXEC 0. Приклад:

RTimer myTimer; // використовувати не можна

myTimer. CreateLocal (); // можна використовувати

myTimer. Delete(); // використовувати не можна

M- Mixin класи. Дуже схожі на інтерфейси мови Java. Це абстрактні класи, що містять лише суто віртуальні (pure virtual) функції. Клас може успадковуватись від кількох таких інтерфейсів, при цьому необхідно буде визначити методи цих інтерфейсів (якщо звичайно ваш клас теж не є абстрактним).

H- від Heap означає, що об'єкт класу оголошений (або знаходиться!) в купі (heap). Наприклад, клас HBufC є heap descriptor 'ом, об'єкт такогоклас сам містить дані дескриптора і при цьому оголошений (або знаходиться) в купі.