Skip to content

Instantly share code, notes, and snippets.

@artem78
Last active April 8, 2024 09:41
Show Gist options
  • Star 12 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save artem78/4572205a93d4a2cafa1cf8d3697d3320 to your computer and use it in GitHub Desktop.
Save artem78/4572205a93d4a2cafa1cf8d3697d3320 to your computer and use it in GitHub Desktop.
Разработка под Symbian OS

Полезные ресурсы по разработке под Symbian

  1. Небольшой сайт, содержащий ссылки на SDK и другие полезные ресурсы - https://mrrosset.github.io/Symbian-Archive/index.html
  2. Список активных разработчиков под Symbian - mrRosset/Symbian-Archive#10
  3. Чат - https://discord.gg/5Bm5SJ9 или https://discord.com/channels/431429574975422464/743412813279526914
  4. Презентация по основам Symbian - http://www.cs.rug.nl/~aiellom/images/SymbianOS.pdf
  5. Файлы:
  6. Литература
  7. Исходники ОС Symbian - https://github.com/SymbianSource
  8. Документация по различным версиям платформы - https://docs.huihoo.com/symbian/
  9. Список версий и моделей
  10. Инструкции к телефонам Nokia:

Порядок установки среды разработки на примере Symbian 9.2

Проверено на Windows XP и Windows 7. Установка других версий SDK должна происходить аналогично.

Java Runtime Environment (JRE)

Скачать с https://www.oracle.com/technetwork/java/javase/downloads/2133151 или http://java-runtime.ru/download

Лучше ставить версию 5.0, ибо с более новыми не работает настройка эмулятора. Ссылка для загрузки: http://www.oldversion.com.ru/windows/java-platform-runtime-5-0-update-5

SDK

http://www.mediafire.com/file/9uc7fjb2ynmxlud/s60v3.1_SDK.zip/file

Эмулятор требует регистрации, поэтому работает только 14 дней в триальном режиме. Для сброса триала я написал этот bat-ник. Под Windows 7 и выше запускать с правами администратора.

Open C/C++ Plugin

(Устанавливаем по желанию)

Предоставляет возможность использования стандартных библиотек c++ (stdio, iostream, string и т. д.)) https://ia800905.us.archive.org/7/items/nokia_sdks_n_dev_tools/s60_open_c_cpp_plug_in_v1_7_en.zip

Carbide IDE

http://www.mediafire.com/file/6z54qrceef73x9s/Carbide_cpp_v2_7_en.exe/file 2.7 – самая новая версия, всё ещё поддерживающая Symbian 9.2. (Если не изменяет память, Carbide 3.2 может работать только с Symbian 9.3 и выше. (ToDo: уточнить))


HowTo

Проблема со значками

"\Symbian\Carbide\workspace\GUIDemo\group\BLD.INF" FATAL ERROR(S): \Symbian\Carbide\workspace\GUIDemo\group\BLD.INF(21) : \Symbian\Carbide\workspace\GUIDemo\group\ICONS_SCALABLE_DC.MK does not exist

В файле проекта group/bld.inf меняем строку:

gnumakefile icons_scalable_dc.mk

на:

gnumakefile icons_aif_scalable_dc.mk

Ошибки "undefined reference ..."

Ошибки вида:

undefined reference to `RpositionServer::RPositionServer()'
undefined reference to `Rpositioner::RPositioner()'
undefined reference to `TpositionInfo::TPositionInfo()'
undefined reference to `Rpositioner::Open(RPositionServer&)'

Решение:

Нужно подключить lib-файл. (В данном случае lbs.lib). Открываем mmp-файл и добавляем библиотеку во вкладке Libraries.

Включение на телефоне вывода сообщения при панике

По умолчанию при панике программа тихо закрывается без показа каких-либо сообщений об ошибке. Чтобы включить вывод сообщения на экран, в папке c:\resource\ нужно создать пустой файл с именем errrd (без расширения). Для этого потребуется разблокировать телефон и открыть полный доступ к системным файлам, иначе система безопасности попросту не даст этого сделать.

Не создаются sis/sisx файлы

Проблема:

При компиляции проекта не происходит сборка sis(x) пакета.

Решение:

Нужно зайти в ProjectPropertiesCarbide.c++Build configurations. Выбрать в Active Configuration в выпадающем списке значение Phone release (GCCE). Во вкладке SIS Builder нажать кнопку Add. Выбрать PKG-файл, потом нажать Ok.

Включение пиктограммы в меню

Проблема:

При создании консольного приложения из шаблона Basic Console Application (EXE) не добавляется пиктограмма в меню приложений.

Решение: ToDo: почему-бы не создать bat-ник для автоматизации?

В папке data создать файл с именем

YourAppName_reg.rss
и следующим содержимым (здесь и далее выделенные жирным значения поменяйте на свои):

#include 

UID2 KUidAppRegistrationResourceFile
UID3 0x12345678      // Заменить на ID своего приложения

RESOURCE APP_REGISTRATION_INFO
    {
    app_file = "YourAppName";      // Заменить на имя исполняемого файла (exe) своего приложения без расширения
    }

В mmp-файл добавить:

SOURCEPATH ..\data
START RESOURCE YourAppName_reg.rss
	TARGETPATH \private\10003a3f\apps
END

В pkg-файл добавить:

"$(EPOCROOT)Epoc32\data\z\private\10003a3f\apps\YourAppName_reg.rsc"   -"!:\private\10003a3f\import\apps\YourAppName_reg.rsc"

Приложение не совместимо с телефоном

Проблема:

При установке sis-пакета появляется ошибка "Приложение не совместимо с телефоном"

Причина:

В pkg файле должно быть прописано для каких платформ и/или отдельных моделей телефонов подходит данное ПО. Это предупреждение появляется если данный телефон не поддерживается, либо список в pkg вообще не указан (что, например, происходит при создании нового проекта из шаблона Basic console application (EXE)).

Решение:

В файл sis/YourAppName.pkg нужно добавить список поддерживаемых продуктов (можно более одного) в виде строк:

[ProductUID], VersionRange, {"ProductName"}

Здесь:

  • ProductUID - Уникальный идентификатор платформы/модели в виде 16-ричного числа (список будет приведён чуть ниже)
  • VersionRange - Версия прошивки платформы (я всегда ставлю 0.0.0, что значит любая прошивка)
  • ProductName - Название платформы (насколько я понял, оно ни на что не влияет), обязательно в кавычках

Пример:

;Platform version     (с точки с запятой начинается комментарий)
[0x101F7961], 0, 0, 0, {"S60 3rd Edition devices"}
[0x1028315F], 0, 0, 0, {"S60 5th Edition devices"}

Это значит, что программа предназначена для S60v3 и S60v5 (Symbian 9.1 и 9.4). (Пример PKG-файла целиком)

Имеется обратная совместимость (сверху вниз) версий 9.X. Другими словами, если программа предназначена, например, для Symbain 9.2, то она также должна работать и на 9.1.

Список идентификаторов основных платформ:

Платформа ID
S60 3rd Edition (Symbian 9.1) 0x101F7961
S60 3rd Edition FP1 (Symbian 9.2) 0x102032BE
S60 3rd Edition FP2 (Symbian 9.3) 0x102752AE
S60 5th Edition (Symbian 9.4) 0x1028315F
UIQ3 (Symbian 9.1) 0x101F6300
UIQ3.1 (Symbain 9.2) 0x101F63DF

Более полный список можно найти в программе SISContents или на этом сайте.

Как узнать какие версии SDK установлены или заменить текущую?

В командной строке используйте команду devices. Доступные аргументы:

C:\Documents and Settings\user>devices -help
Syntax: devices -info @deviceID         Displays detailed device information
devices -default        Displays the default device information
devices -setdefault @deviceID   Sets the default device
devices -setalias new_alias @deviceID   Sets the alias for a device
devices -add device_path tools_path @deviceID
devices -remove @deviceID
devices -help   Displays this help
  where deviceID is a device identifier (of the form 'kit:name') or
  device alias, preceded by '@'
  new_alias is a new device alias
  device_path is the location of the main epoc32 directory
  tools_path is the location of the epoc32\tools directory
Note: When using -setalias or -add, the device may not be referred to by
an alias.

With no arguments or switches, devices lists all device names and aliases

Если не находит команду, добавьте следующий путь в переменную среды PATH: C:\Program Files\Common Files\Symbian\Tools (или C:\Program Files (x86)\Common Files\Symbian\Tools).

Для получения списка всех установленных на компьютере SDK выполните команду devices без аргументов:

C:\Documents and Settings\user>devices
S60_3rd:com.nokia.s60
S60_5th_Edition_SDK_v1.0:com.nokia.s60
S60_3rd_FP1:com.nokia.s60 - default

Сделать SDK текущим можно опцией -setdefault (не забудьте указать префикс @ перед идентификатором SDK):

devices -setdefault @S60_3rd_FP1:com.nokia.s60

Особенности экспорта значков в формате SVG из InkScape

ToDo: добавить раздел и в англ. версию.

1) Сохранение

Нажимаем Сохранить как и выбираем формат Простой SVG. Затем преобразовываем получившийся файл в формат Tiny-SVG при помощи утилиты SVG2SVGT, входящей в комплект SDK.

2) Проблема с ломаными линиями

По умолчанию, когда InkScape сохраняет фигуру, содержащую прямые линии, он опускает команду L/l в атрибуте d (и действительно — по стандарту она не обязательна). Пример записи:

<path d="M 1,2 3,4 5,6 Z" />

Symbian OS такие фигуры читать правильно не может, поэтому нужно явно прописывать команду L/l. Корректный пример:

<path d="M 1,2 L 3,4 L 5,6 Z" />

Чтобы InkScape использовал полный формат, заходим в Правка > Параметры... > Ввод и вывод > Экспорт в SVG и включаем опцию Данные контура > Принудительно повторять команды.

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

3) Исчезают цвета в градиентах (выглядят чёрно-белыми)

В коде созданном InkScape можно увидеть, что используется два отдельных тега для каждого градиента (т.е. наследование градиентов).

<defs>
	<linearGradient id="linearGradient1000">
		<stop offset="0" style="stop-color:#2c2c2c;stop-opacity:1"/>
		<stop offset="1" style="stop-color:#6e6e6e;stop-opacity:1"/>
	</linearGradient>

	<radialGradient cx="44.685776" cy="77.935577" fx="44.685776" fy="77.935577" gradientTransform="matrix(1.4821885,0.05299328,-0.05838413,1.6329673,-12.576066,-60.24397)" gradientUnits="userSpaceOnUse" id="radialGradient1078" r="14.372123" xlink:href="#linearGradient1000"/>
</defs>

В одном из них задаются позиции отдельных цветовых маркеров, а в другом — расположение градиента на фигуре в целом и связаны они атрибутом xlink:href="#linearGradient1000". Symbian OS не понимает такой формат, поэтому нужно объединить оба тега в один:

<defs>
	<radialGradient cx="44.685776" cy="77.935577" fx="44.685776" fy="77.935577" gradientTransform="matrix(1.4821885,0.05299328,-0.05838413,1.6329673,-12.576066,-60.24397)" gradientUnits="userSpaceOnUse" id="radialGradient1078" r="14.372123" xlink:href="#linearGradient1000">
		<stop offset="0" style="stop-color:#2c2c2c;stop-opacity:1"/>
		<stop offset="1" style="stop-color:#6e6e6e;stop-opacity:1"/>
	</radialGradient>
</defs>

Как это сделать без ручной правки кода, я не знаю.

@NEK-RA
Copy link

NEK-RA commented Apr 20, 2021

English translation


Installation guide for Symbian 9.2 example

Tested on Windows XP и Windows 7. Installation of other SDK versions should be similar.

Java Runtime Environment (JRE)

https://www.oracle.com/technetwork/java/javase/downloads/2133151
or
http://java-runtime.ru/download

It's better to install version 5.0, cause emulator settings doesn't work with newer java versions. Download link: http://www.oldversion.com.ru/windows/java-platform-runtime-5-0-update-5

SDK

http://www.mediafire.com/file/9uc7fjb2ynmxlud/s60v3.1_SDK.zip/file

Emulator need activation, otherwise it works only in 114-days trial mode. To reset trial I wrote this bat-script. On Windows 7 and higher run as Administrator

Open C/C++ Plugin

(Optional installation)

Provides ability to use standart C++ libraries(stdio, iostream, string, etc.)
https://ia800905.us.archive.org/7/items/nokia_sdks_n_dev_tools/s60_open_c_cpp_plug_in_v1_7_en.zip

Carbide IDE

http://www.mediafire.com/file/6z54qrceef73x9s/Carbide_cpp_v2_7_en.exe/file
2.7 – most newer version, which still support Symbian OS 9.2. If I remember correctly, Carbide 3.2 supports only Symbian 9.3 and higher. (ToDo: refine)

@NEK-RA
Copy link

NEK-RA commented Apr 20, 2021

English translation


HowTo

Troubles with icons

"\Symbian\Carbide\workspace\GUIDemo\group\BLD.INF" FATAL ERROR(S):
\Symbian\Carbide\workspace\GUIDemo\group\BLD.INF(21) : \Symbian\Carbide\workspace\GUIDemo\group\ICONS_SCALABLE_DC.MK does not exist

We need to modify group/bld.inf, change string:

gnumakefile icons_scalable_dc.mk

to this:

gnumakefile icons_aif_scalable_dc.mk

Exceptions "undefined reference ..."

How it looks:

undefined reference to `RpositionServer::RPositionServer()'
undefined reference to `Rpositioner::RPositioner()'
undefined reference to `TpositionInfo::TPositionInfo()'
undefined reference to `Rpositioner::Open(RPositionServer&)'

Solution:

We need to add lib-file. (In this case - lbs.lib). Open mmp-file and add library in Libraries tab.

Enabling alerts on phone when getting panics

By default apps ar just closing on panic. Nothing alerts, error messages, etc. To enable alerts, we need to create empty file errrd (without extension) at c:\resource\ location. To do that you need to unlock phone and give full access to system files, otherwise security system will not allow you to create this file.

Can't create sis/sisx files

Trouble:

Building sis(x) package failed when compiling project.

Solution:

Go to: Project → Properties → Carbide.cpp → Build configurations. Choose Phone release (GCCE) at Configuration
At Sis Builber tab, press Add. Choose PKG-file, then Ok.

Enabling icon in menu

Trouble:

When creating console application from templates, app icon doesn't appear in menu.

Solution:
ToDo: make bat-script for automation

Go to folder data and create file YourAppName_reg.rss with next content:

#include <appinfo.rh>

UID2 KUidAppRegistrationResourceFile
UID3 0xEB199A9B      // Replace with your ID

RESOURCE APP_REGISTRATION_INFO
    {
    app_file = "YourAppName";      // Replace with your file's name without extension
    }

Then add to mmp-file:

SOURCEPATH ..\data
START RESOURCE YourAppName_reg.rss
	TARGETPATH \private\10003a3f\apps
END

Don't forget to replace UID3 и YourAppName with your values.

Add to pkg-file:

"$(EPOCROOT)Epoc32\data\z\private\10003a3f\apps\YourAppName_reg.rsc"   -"!:\private\10003a3f\import\apps\YourAppName_reg.rsc"

App is incompatible with phone

Trouble:

Error "App is incompatible with phone" appears on sis(x) package installation

Reason:

pkg file should contain information about supported platforms and phone models. This error appears if phone is not supported or such list in pkg file is not defined. (it's the case of creating new project from Basic console application (EXE) template).

Solution:

Add list of supported "products" to your sis/YourAppName.pkg as strings:

[ProductUID], VersionRange, {"ProductName"}

Where:

  • ProductUID - Unique identifier of platform as HEX-number (list of UIDs will be below)
  • VersionRange - ROM version on th platform (I'm using 0.0.0, which means "any ROM")
  • ProductName - Platform name in quotes (as I understand, it doesn't affect anything)

Example:

;Platform version     (";" is used for single-line comments)
[0x101F7961], 0, 0, 0, {"S60 3rd Edition devices"}
[0x1028315F], 0, 0, 0, {"S60 5th Edition devices"}

This example defines that app is for Symbian OS versions 9.1 и 9.4. (Example of PKG-file)

There is also backward compatibility for previous platform version: app created for Symbian OS 9.2 should also work on OS version 9.1.

ProductUIDs of Symbian OS 9.X:

Platform ProductUID
S60 3rd Edition (Symbian 9.1) 0x101F7961
S60 3rd Edition FP1 (Symbian 9.2) 0x102032BE
S60 3rd Edition FP2 (Symbian 9.3) 0x102752AE
S60 5th Edition (Symbian 9.4) 0x1028315F
UIQ3 (Symbian 9.1) 0x101F6300
UIQ3.1 (Symbain 9.2) 0x101F63DF

Full list available at SisContents app or on this site.

How to find out which SDK versions are installed and replace current?

C:\Symbian\Tools\HookLogger>devices --help
Switch '--help' not understood.
Syntax: devices -info @deviceID         Displays detailed device information
devices -default        Displays the default device information
devices -setdefault @deviceID   Sets the default device
devices -setalias new_alias @deviceID   Sets the alias for a device
devices -add device_path tools_path @deviceID
devices -remove @deviceID
devices -help   Displays this help
  where deviceID is a device identifier (of the form 'kit:name') or
  device alias, preceded by '@'
  new_alias is a new device alias
  device_path is the location of the main epoc32 directory
  tools_path is the location of the epoc32\tools directory
Note: When using -setalias or -add, the device may not be referred to by
an alias.

With no arguments or switches, devices lists all device names and aliases
C:\Symbian\Tools\HookLogger>devices
S60_3rd:com.nokia.s60
S60_5th_Edition_SDK_v1.0:com.nokia.s60
S60_3rd_FP1:com.nokia.s60 - default

@NEK-RA
Copy link

NEK-RA commented Apr 20, 2021

Скорее всего где-то есть ошибки перевода, так что оставил это дело в комментариях🤔

@artem78
Copy link
Author

artem78 commented Apr 20, 2021

Спасибо. Будет время, просмотрю.

@artem78
Copy link
Author

artem78 commented Apr 20, 2021

Скорее всего где-то есть ошибки перевода

У меня с английским тоже средне, хотя даже оканчивал школу с углублённым изучением английского языка. :)

@NEK-RA
Copy link

NEK-RA commented Apr 21, 2021

оканчивал школу с углублённым изучением

Ну тогда ситуация предположительно лучше моей😂

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment