silvansky programming stuff

10Aug/100

qt + symbian

итак, чудо из чудес: qt под symbian.
чудо качается в виде Nokia Qt SDK и устанавливается как и обычный qt sdk. при этом всё работает хорошо, даже замечательно - эмулятор, отладка на девайсе... и так далее.
но всё так только до тех пор, пока не потребуется собрать что-то сложное. тут-то и начинается веселье!

замечу, что я до того не имел дела с программированием под симбиан. только qt.

итак!

во-первых, текущая версия Nokia Qt SDK (1.0) не умеет собирать под симбиан проекты с TEMPLATE = subdirs. точнее, что-то как-то собирается, но сплошные ошибки. от этого лучше сразу отказаться.

далее. если хочешь собрать библиотеку, то столкнёшься с такой штукой: qt creator обязательно (!) выполняет в конце make sis. и это не отключить. так что даже если не хочется создавать инсталлятор отдельно для библиотеки, то делать это придётся, если собирать из криейтора. делается это просто, но всё же это излишество.

вот собственно пример:

# экспортируем хедеры
BLD_INF_RULES.prj_exports += utilsexport.h \
                             utils.h
# заглушка для qt creator'а, создаём инсталлятор
myFiles.sources = utils.dll
myFiles.path = !:/sys/bin
DEPLOYMENT += myFiles

итак, теперь у нас есть библиотека, лежит она в \Symbian\SDK\epoc32\release\gcce\udeb\ (или \urel\ если собиралась в релизе). но есть и лишний .sis файл... ну да ладно, на него забьём спокойно.
вообще, на этом этапе может возникнуть ошибка борки. но мы это поправим так (из командной строки с подключенными переменными среды из SDK - в главном меню есть ярлык):

abld freeze

после чего собираем снова - и всё, должно заработать.

заметим так же, что есть такое понятие, как капабилитиз, их надо указать, если проект будет хоть что-то делать с сетью, например. подробнее можно почитать тут.

если что-то не работает, то указываем все капабилити, доступные для самоподписанного приложения:

TARGET.CAPABILITY += "LocalServices Location NetworkServices ReadUserData UserEnvironment WriteUserData"

теперь собираем проект, который эту библиотеку цеплять будет.

в проекте пишем стандартные вещи (LIBS += -lutils), прописываем те же капабилитиз, что и у библиотеки. кроме того, опять терзаем DEPLOYMENT, т.к. автоматически в него добавляются только файлы текущего проекта (да и то только если это не библиотека):

utils.sources = utils.dll
utils.path = !:/sys/bin
DEPLOYMENT += utils

казалось бы, что всё готово. собираем. если всё хорошо, то получаем .sis файл с прогой и библиотекой. чтобы убедиться, что в нём всё это есть, юзаем утилиту dumpsis.

ну что ж, если прога относительно простая, то всё готово, можно заливать на девайс и тестить. или воспользоваться Remote Device Access. должно заработать.

в моём случае такой номер прошёл только с самым простым приложением. а вот с портированием сложного началась веселуха...

всё собралось. я обрадовался. заливаю на девайс - а он мне говорит, что не может дать приложению необходимые права для установки. почему? я ничего такого особого не юзал, чтоб так вот меня отшивать... нехорошо. ладно, почитал, погуглил, сделал Open Signed Online, установилось. ура? ан нет! не запускается. тупо молча не запускается. перевод телефона в дебаговый режим и экспериментирование с кодом ничего не дали.

что выясняется? а выясняется, что qt creator ещё слишком сырой для полноценной разработки под симбиан.
dumpsis + makesis сделали дело. всё заработало. вуаля!
поясняю. получили .sis файл, распаковываем его с помощью dumpsis и упаковываем заново с помощью makesis. круто? конечно круто! теперь опять делаем открытое подписывание и всё наконец-то работает!

чудеса техники.

Tagged as: , , , No Comments