- Небольшой сайт, содержащий ссылки на SDK и другие полезные ресурсы - https://mrrosset.github.io/Symbian-Archive/index.html
- Список активных разработчиков под Symbian - mrRosset/Symbian-Archive#10
- Чат - https://discord.gg/5Bm5SJ9 или https://discord.com/channels/431429574975422464/743412813279526914
- Презентация по основам Symbian - http://www.cs.rug.nl/~aiellom/images/SymbianOS.pdf
- Файлы:
- Литература
- Исходники ОС Symbian - https://github.com/SymbianSource
- Документация по различным версиям платформы - https://docs.huihoo.com/symbian/
- Список версий и моделей
- Инструкции к телефонам Nokia:
Скачать с 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
http://www.mediafire.com/file/9uc7fjb2ynmxlud/s60v3.1_SDK.zip/file
Эмулятор требует регистрации, поэтому работает только 14 дней в триальном режиме. Для сброса триала я написал этот bat-ник. Под Windows 7 и выше запускать с правами администратора.
(Устанавливаем по желанию)
Предоставляет возможность использования стандартных библиотек 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
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: уточнить))
"\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 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(x) пакета.
Решение:
Нужно зайти в Project
→ Properties
→ Carbide.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 или на этом сайте.
В командной строке используйте команду 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
ToDo: добавить раздел и в англ. версию.
Нажимаем Сохранить как
и выбираем формат Простой SVG
. Затем преобразовываем получившийся файл в формат Tiny-SVG при помощи утилиты SVG2SVGT
, входящей в комплект SDK.
По умолчанию, когда 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 файла.
В коде созданном 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>
Как это сделать без ручной правки кода, я не знаю.
English translation
Usefull resources for Symbian development
on Symbian OS, 2008