Skip to content

Instantly share code, notes, and snippets.

@artem78
Last active November 16, 2024 02:18
Show Gist options
  • 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

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

@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