Для написания приложений для платформы Sailfish OS используется язык С++ и библиотеки Qt, а также язык QML для описания графического интерфейса приложений. Поэтому, если вы уже имеете опыт написания приложений с использованием Qt и QML, разработка для Sailfish OS не вызовет у вас затруднений. Кроме того, Sailfish OS позволяет разрабатывать нативные приложения на языке Python. Однако, данная тема выходит за рамки данной статьи и не будет в ней описана (подробнее про это можно почитать, например, тут).
Как и для других мобильных платформ, разработка для Sailfish OS ведется с использованием SDK, предоставляемого создателями платформы. SailfishOS SDK включает в себя:
- QtCreator — IDE, в которой собственно и предлагается вести весь процесс разработки.
- Mer Build Engine, который необходим для сборки приложений.
- Эмулятор Sailfish OS.
- Примеры, руководства и документация к API.
Mer Build Engine и эмулятор платформы поставляются в виде образов виртуальных машин для VirtualBox. Однако, сам VirtualBox в состав SailfishOS SDK не входит. Поэтому, перед непосредственной установкой SDK, необходимо вначале установить VirtualBox версии не ниже чем 4.1.18. Кроме того, при работе в Windows, перед установкой SDK так же необходимо установить пакет Windows Microsoft Visual C++ 2010 redistributable (x86).
Сам SailfishOS SDK доступен для Linux, Windows и Max OS X, его можно скачать тут. SDK поставляется в виде графического инсталлятора, поэтому установка SDK не вызывает никаких трудностей. Однако, при установке вас спросят альтернативный путь для проектов. Этот параметр необходим для того, чтобы виртуальная машина с Mer Build Engine имела доступ к исходным кодам вашего проекта. По умолчанию это ваша домашняя директория. В последствии данный параметр можно изменить в настройках Qt Creator.
После установки SDK вы полностью готовы к разработке приложений для платформы Sailfish OS.
Создание Hello World! приложения так же не вызывает каких либо трудностей. Просто запускаем Qt Creator, нажимаем на кнопку «Новый проект» на главном экране (или через меню Файл -> Создать файл или проект...) и настраиваем проект:
- Выбираем в качестве типа приложения SailfishOS Qt Quick Application:
- Указываем название и директорию, в которой следует сохранить данные проекта (помните, что проект следует сохранять только в вашей домашней директории или по альтернативному путю для проектов, указанному при установке либо в настройках Qt Creator, поскольку для сборки проекта Mer Build Engine должен иметь доступ к нему):
- Выбираем необходимые комплекты, которые будет использоваться для сборки приложения.
Всего, как видно из скриншота выше, доступно два комплекта:
- MerSDK-SailfishOS-armv7hl — для устройств на базе архитектуры ARM (например, смартфон Jolla),
- MerSDK-SailfishOS-i486 — для устройств на базе архитектуры Intel.
Здесь также стоит отметить, что эмулятор работает только с комплектом i486. Поэтому, если вы планируете тестировать свое приложение в эмуляторе, выбирать на данном шаге нужно второй комплект.
- MerSDK-SailfishOS-armv7hl — для устройств на базе архитектуры ARM (например, смартфон Jolla),
- Указываем дополнительную информацию о проекте:
- И всё, SDK сгенерировала нам Hello World проект.
Автоматически сгенерированный проект немного сложнее, чем стандартный одностраничный Hello World. Это позволяет сразу же раскрыть некоторые особенности Sailfish OS. На главное странице отображается стандартное приветствие. Однако, если на этом экране выполнить жест swipe вниз (стандартное управление для данной платформы), вверху появится меню, позволяющее перейти на вторую страницу приложения, где расположен список элементов.
Ниже приведены скриншоты Hello World приложения:
Теперь давайте взглянем на код. Здесь все стандартно для QML приложений и поэтому знакомо любому, кто когда-либо писал приложения используя данный язык. Единственный .cpp файл описывает, какой .qml следует отобразить при запуске приложения. В нашем случае это HelloWorld.qml. Кроме того, в проекте содержатся 2 страницы, а также Cover Page, которая определяет вид приложения на домашнем экране Sailfish OS, который отображает миниатюры всех запущенных приложений и позволяет переключаться между ними, либо закрывать их.
HelloWorld.qml описывает главное окно приложения. В нем указывается начальная страница приложения и Cover Page, а также дополнительные параметры приложения (в нашем случае это разрешенные ориентации экрана и ориентация экрана, которая будет использована по умолчанию):
ApplicationWindow
{
initialPage: Component { FirstPage { } }
cover: Qt.resolvedUrl("cover/CoverPage.qml")
allowedOrientations: Orientation.All
_defaultPageOrientations: Orientation.All
}
FirstPage.qml описывает начальную страницу приложения. Здесь все стандартно для QML приложений, однако есть некоторая особенность Sailfish OS, на которую следует обратить внимание:
//...
SilicaFlickable {
anchors.fill: parent
PullDownMenu {
MenuItem {
text: qsTr("Показать вторую страницу")
onClicked: pageStack.push(Qt.resolvedUrl("SecondPage.qml"))
}
}
//...
Здесь используется элемент SilicaFlickable, который, во первых, позволяет сделать контент внутри самого элемента прокручиваемым, в случае если он полностью не влезает внутрь элемента. А во вторых, позволяет использовать PullDownMenu — то самое меню приложения, открываемое свайпом вниз.
Кроме того, хотелось бы так же обратить внимание на CoverPage.qml, который описывает Cover Page приложения. Он содержит следующий элемент:
CoverActionList {
id: coverAction
CoverAction {
iconSource: "image://theme/icon-cover-next"
}
CoverAction {
iconSource: "image://theme/icon-cover-pause"
}
}
Данный элемент позволяет помимо вывода информации также предоставить пользователю возможность управления приложением непосредственно с его миниатюры на домашнем экране.
Для запуска приложения в эмуляторе необходимо в боковом меню выбрать комплект i486, нужный тип сборки (релиз или отладка) и способ установки Deploy as RPM Package:
После этого просто нажать на зеленую стрелочку в боковом меню. Это действие соберет приложение, запустит эмулятор, установит и запустит ваше приложение на эмуляторе.
Кроме того, можно просто запустить эмулятор нажав на кнопку в боковом меню. Это позволит вам просто исследовать Sailfish OS не имея устройства на данной платформе.
На этом все, в будущем я постараюсь более подробно описать некоторые особенности разработки под платформу Sailfish OS.
Автор статьи: Денис Лаурэ
UPD: Большое спасибо kirikch за замечания и комментарии, они были учтены в обновленном тексте статьи.
Комментарии (28)
Lockal
12.07.2016 20:41Боюсь, что ценник в 3540$ на одного разработчика сильно снизит желание производителей проприетарных приложений.
abagnale
15.07.2016 14:25Это стоимость лицензии по подписке за год. Бессрочная лицензия дороже на старте, но, разумеется, выгоднее подписочной от двух лет и более.
К тому же, подписочная лицензия доступна только для десктопных приложений. Для разработки под embedded возможна только бессрочная.
Ну или GPL/LGPL, само-собой.
kirikch
13.07.2016 00:02+1Позволю себе несколько замечаний, которые стоит учесть в статье.
Для написания приложений для платформы Sailfish OS используется язык С++ и библиотеки Qt, а также язык QML для описания графического интерфейса приложений.
Можно добавить, что QML подразумевает и JavaScript для написания легковесной логики.
Операционная система Mer (на самом деле это всего лишь прослойка для мобильных систем, основанных на Linux ядре, но для простоты мы опишем Mer как ОС), которая необходима для сборки приложений.
По-моему, произошло слияние понятий Mer и Mer Build Engine.
установка SDK не вызывает никаких трудностей.
Есть один момент, который было бы полезно прояснить.
При установке будет запрошен альтернативный путь для размещения проектов.
И здесь нужно рассказать, какие директории доступны для виртуальной машины MerSDK.
в проекте содержаться 2 страницы
содержатся
Cover Page, которая определяет вид приложения в диспетчере приложений Sailfish OS
Не диспетчере приложений, а домашнем экране.
Disasm
13.07.2016 09:48> При установке будет запрошен альтернативный путь для размещения проектов.
Он вообще влияет на что-нибудь? После установки Qt Creator и знать не знает ничего про какой-то альтернативный путь.kirikch
13.07.2016 10:52Влияет на то, где проекты располагаться могут. Это настройка не для QtCreator, а для Mer Build Engine.
QtRoS
13.07.2016 08:32Что по версиям там сейчас? Так же Qt Quick 1, далеко не последний Qt Creator и т.д.?
Qt очень далеко продвинулась с того момента…kirikch
13.07.2016 09:01+2Qt 5.2, QtQuick 2.2, Qt Creator 3.5.0.
Qt очень далеко продвинулась с того момента
Какого момента?wholeman
13.07.2016 10:05Видимо, QtRoS имел в виду времена MeeGo. Однако, и с Qt 5.2 уже пять минорных версий прошло. И есть Quick Controls, но здесь уже нагородили альтернативные виджеты, ЕМНИП проприетарные. А на нативные виджеты и вовсе забили, теперь без javascriptа приложение и не напишешь.
neochapay
13.07.2016 10:27+2>ЕМНИП проприетарные
Открыли все. Из закрытых компонентов остался, по моему QML Compoler только
>А на нативные виджеты и вовсе забили
нет, там всё нормально. Всё работает и совершенствуется.
>теперь без javascriptа приложение и не напишешь.
Ну… это вы загнули…wholeman
13.07.2016 11:25Открыли все. Из закрытых компонентов остался, по моему QML Compoler только
Это замечательно. QML компайлер, вроде,DigiaQt Group, а не Jolla.нет, там всё нормально. Всё работает и совершенствуется.
Они таки запилили QStyle, чтобы виджеты в Sailfish выглядели и работали, как Silica, хотя бы на уровне Symbian и Fremantle?Ну… это вы загнули…
Да, это была гипербола. Если постараться, конечно, можно. Но часто это заметно усложняет приложение.
RPG18
13.07.2016 11:44Если вы имеете ввиду Qt Quick Compiler, то он открыт(Проект Qt меняет лицензию и открывает код некоторых модулей)
abagnale
15.07.2016 14:28Ещё не открыт. Заявлено с версии 5.8.
А то, что открыто с версии 5.7, доступно только в GPL, в LGPL нет (http://blog.qt.io/blog/2016/06/16/qt-5-7-released/).
neochapay
13.07.2016 10:17С момента 5.2 :)
Например я столкнулся с тем что QJsonObject работает по другому.
Такая вот конструкция не сработает:
QJsonObject data
{
{"_uuid", this->m_uuid},
{"_uid", this->m_username_id},
{"_csrftoken", «Set-Cookie: csrftoken=»+this->m_token},
{«caption_text», captionText},
};
Но, это всё же придирки и в большей части да, ни чего не поменялось.
prudis
13.07.2016 09:58Сколько уже было этих разных ОС, где они?
wholeman
13.07.2016 11:11+1ОС приходят и уходят. Когда появились iOS и Android, балом правили Windows Mobile и Symbian. Нынешние короли тоже не будут вечны. Впрочем, не думаю, что их сменят Sailfish или Tizen.
prudis
13.07.2016 11:20Все верно, только за всеми этими стояли большие компании. Nokia провалилась — Symbian исчез, Остальные как-то живут за счет того что ими занимаются большие компании. Начинать новую ОС можно только в надежде понравиться какому-то крупному игроку и быть проданным им. Кто это может быть? Наверное Amazon, может Samsung, кто еще?
Per_Ardua
Многие уже слышали про то, что система выиграла конкурс на испортозамещение мобильных ОС в России. Но у меня вопрос: насколько, на рынке, востребованы специалисты, разрабатывающие под Sailfish OS на данный момент, а не в перспективе?
GoAlexander
Ну, к примеру, в конце месяца будет летняя школа от ОМП: university.innopolis.ru/events/letniy-vorkshop-sailfish-os
Как я понял, там еще и взять на работу могут :)))
В общем, насколько я знаю реально специалисты нужны только в самой Jolla (где очень клево, но и попасть очень сложно) и в ОМП. Из компаний-разработчиков под Sailfish OS видел только AIDA64
FRUCT
На самом деле это не так, например, к осени разработчики будут нужны во FRUCT лабораториях, разработчики нужны в Индии и можно еще поискать. Но конечно пока масштабы не как у Android, экосистема только формируется, но и то что уже есть, выглядит очень неплохо.