- Небольшой сайт, содержащий ссылки на 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
HowTo
Troubles with icons
We need to modify
group/bld.inf
, change string:to this:
Exceptions "undefined reference ..."
How it looks:
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) atc:\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)
atConfiguration
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 fileYourAppName_reg.rss
with next content:Then add to mmp-file:
Don't forget to replace UID3 и YourAppName with your values.
Add to pkg-file:
App is incompatible with phone
Trouble:
Error "App is incompatible with phone" appears on
sis(x)
package installationReason:
pkg
file should contain information about supported platforms and phone models. This error appears if phone is not supported or such list inpkg
file is not defined. (it's the case of creating new project fromBasic console application (EXE)
template).Solution:
Add list of supported "products" to your
sis/YourAppName.pkg
as strings:Where:
0.0.0
, which means "any ROM")Example:
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:
Full list available at SisContents app or on this site.
How to find out which SDK versions are installed and replace current?