Программирование под MeeGo для начинающих

в 12:45, , рубрики: MeeGo, mobile, nokia, qt, Программирование, метки: , , , ,
Введение

В данной статье будет дано введение в разработку приложений для платформы MeeGo. Начиная с самых азов, установки и настройки вспомогательного программного обеспечения, и заканчивая отладкой и развертыванием приложения. Мы создадим простое приложение, выполняющее основные операции над числами (калькулятор), данное приложенное довольно простое и имеет множество способов реализации, а мы рассмотрим пример нестандартного решения представленный в книге [7].

MeeGo

MeeGo — открытая платформа, анонсирована корпорациями Intel и Nokia на мобильном конгрессе в Барселоне, которая станет гибридом мобильных систем Moblin (Mobile Linux) и Maemo. Первая версия (1.0) MeeGo появилась 26 мая 2010 года, а устройства на базе ОС — появятся до конца 2010 года.
MeeGo предназначена для работы на широком спектре устройств, включая смартфоны, планшеты и нетбуки. Это позволит создавать приложения, которые без адаптации будут работать сразу на нескольких видах устройств. Магазином приложений для MeeGo станет принадлежащий Nokia Ovi Store.
MeeGo — независимая операционная система, которая, однако, использует наработки таких проектов, как Maemo, Moblin, Fedora и Debian.
Система MeeGo является полностью открытой, её исходные коды опубликованы. Intel и Nokia заявили, что все компании-производители аппаратного обеспечения получат равный доступ к MeeGo.
MeeGo будет сосуществовать с платформой Symbian, которая сейчас используется для смартфонов. Новая ОС, возможно, будет устанавливаться в лидирующие модели мобильных телефонов. В частности, она может быть установлена на смартфон Nokia N900.

Начинаем программировать под MeeGo

Первым шагом при знакомстве с данной платформой и особенно разработкой для нее необходимо установить вспомогательное программное обеспечение, а именно Qt 4.7 SDK, Qt Creator, MeeGo Touch Framework (MTF).

Установка MeeGo Touch 1.0 вручную на Ubuntu 10.04

  1. Для MeeGo Touch необходим Qt версии 4.7, если все ещё не установлен, устанавливаем (скачать: qt.nokia.com/downloads).
    — Прописать переменные среды:
    $ export QTDIR=/[path to installed qtsdk]/qt/
    $ export PATH=${QTDIR}/bin:${PATH}
  2. Скачать и установить Touch Theme (для запуска приложений на настольной машине).
    — Клонируем из хранилища: $ git clone git://gitorious.org/meegotouch/meegotouch-theme.git
    — Собираем: $ qmake
    — Устанавливаем: $ sudo make install
  3. Установить необходимые пакеты: $ sudo apt-get install build-essential libgl1-mesa-dev libglu1-mesa-dev libxdamage-dev
  4. Скачать и установить MeeGo Touch:
    — Клонируем из хранилища: $ git clone git://gitorious.org/meegotouch/libmeegotouch.git
    — Конфигурируем, собираем и устанавливаем: $ ./configure && make && sudo make install
Возможные проблемы

При сборке возникли ошибки в следующих местах:
../libmeegotouch/src/corelib/scene/msceneeventeater.cpp
39: setFlag(QGraphicsItem::ItemStopsClickFocusPropagation);
../libmeegotouch/src/corelib/widgets/mscenewindow.cpp
105: setFlag(QGraphicsItem::ItemStopsClickFocusPropagation);
121 : setFlag(QGraphicsItem::ItemStopsClickFocusPropagation);
../libmeegotouch/src/views/mlabelview_simplce.cpp
244: staticText.setTextOption(viewPrivate->textOptions);
370: staticText2.setTextOption(staticText.textOption());

Первая ошибка заключалось, в том, что свойство ItemStopsClickFocusPropagation не является членом класса QGraphicsItem и вторая похожая ошибка. Я просто закомментировал эти строки на время.

Процесс работы над расширением функционала и отлавливание ошибок не останавливается не на минуту, и соответственно в следующих версиях MTF все ошибки будут исправлены и добавлены новые.

Установка MeeGo Touch 1.1 из репозитория Ubuntu 10.04

  1. Настраиваем менеджер пакетов:
    — Добавить следующую строчку в /etc/apt/sources.list.d/meego-sdk.list
    deb repo.meego.com/MeeGo/sdk/host/repos/ubuntu/10.04/ /
    — Добавить ключ репозитория:
    $ gpg --keyserver pgpkeys.mit.edu --recv 0BC7BEC479FC1F8A
    $ gpg --export --armor 0BC7BEC479FC1F8A | sudo apt-key add -
    — Обновить базу данных менеджера пакетов:
    $ sudo apt-get update
    — Чтобы проверить, что MeeGo репозиторий был корректно добавлен, запустите следующую команду. Будут выведены детали от пакете MADDE.
    $ apt-cache policy madde
  2. Установить MeeGo SDK: $ sudo apt-get install meego-sdk
  3. Установить MeeGo объект:
    — Создать MeeGo обьект, используя MADDE (обьекты: ARM (N900): meego-core-armv7l-1.1; Aava: meego-handset-ia32-1.1, meego-netbook-ia32-1.1):
    $ sudo mad-admin create -f «target»
    — Чтобы проверить, что объекты были установлен корректно, выполните следующие команды:
    $ mad -t «target» pscreate -t qt-simple qthello
    $ cd qthello
    $ mad -t «target» qmake
    $ mad -t «target» make
  4. Проверяем, что приложение qt-simple создан для правильного объекта, выполним: $ file build/qthello

За более подробной информацией по установке MeeGo Touch 1.1 обращаемся к ресурсу [1].

Запуск Meego-Handset [Netbook] edition на эмуляторе Xephyr
  1. Скачать образ Meego handset edition или netbook edition и разархивируем его:
    $ wget download3.meego.com/meego-handset-sdk-20101012-1.1.80.20101024.1603-sda.raw.tar.bz2
    или
    $ wget download3.meego.com/meego-netbook-sdk-20101012-1.1.80.20101024.1603-sda.raw.tar.bz2
    $ tar xjvf download3.meego.com/meego-handset-sdk-20101012-1.1.80.20101024.1603-sda.raw.tar.bz2
    Примечание: MeeGo сборки появляются ежедневно, их можно скачать по ссылке [5].
  2. Скачать meego-sdk-chroot скрипт:
    $ wget download3.meego.com/meego-sdk-chroot
    Сделать скрипт исполняемым: $ chmod +x ./meego-sdk-chroot
  3. Настроить Х для запуска Xephyr:
    $ xhost +SI:localuser:«user name»
  4. Смонтировать образ MeeGo в директорию и запустить meego-sdk-chroot скрипт:
    $ sudo mkdir ../[name_of_mount_directory]
    $ sudo mount -o loop,offset=512 ./[meego_handset_raw]
    ../[name_of_mount_directory]
    $ sudo ./meego-sdk-chroot ../[name_of_mount_directory]
    Теперь мы находимся в оболочке meego chroot.
    Замечание: Для отмонтирования образа используем команду
    $ sudo umount ../[name_of_mount_directory]
  5. Запускаем MeeGo:
    $ export DISPLAY=:0; устанавливаем переменную среды
    $ zypper install meego-simulator-launcher-handset; только для meego-handset
    $ startmeego &

При выполнении последней команды произойдет запуск оболочки MeeGo-Handset. Исходя от смонтированного образа (Handset или Netbook) у вас запуститься тот или иной образ.

MeeGo Handset на Xephyr
Программирование под MeeGo для начинающих
Рис. 1. MeeGo-Handset UI

MeeGo Netbook на Xephyr
Программирование под MeeGo для начинающих
Рис. 2. MeeGo-Netbook UI

Давайте запустим наш калькулятор для платформы Maemo на MeeGo-Handset и MeeGo-Netbook (исходник ниже по ссылке).

Запуск калькулятора на MeeGo-Netbook
  1. Запускаем MeeGo-Netbook на эмуляторе, как было показано выше.
  2. Монтируем директорию с проектом, для этого проделаем следующие шаги:
    — Создаем директорию в MeeGo-Handset:
    $ sudo mkdir [meego_netbook_mount_dir]/home/meego/code
    — Монтируем директорию с исходниками калькулятора:
    $ sudo mount --bind [calculator_sources]/ [meego_netbook_mount_dir]/home/meego/code
    Примечание: Выполняем данную команду в стандартной командной оболочке (bash).
  3. Заходим в примонтированную директорию и запускаем калькулятор:
    $ cd home/meego/code/calculator
    $ DISPLAY=:2 ./calculator
    Примечание: Выполняем данную команду в командной оболочке meego (meego chroot)

Запушенный калькулятор на MeeGo-Netbook показан на Рис. 3.

Программирование под MeeGo для начинающих

Теперь давайте запустим калькулятор на MeeGo-Handset. Для запуска приложения необходимо проделать все те же самые шаги, что и для MeeGo-Netbook, но только запустить сборку MeeGo-Handset. Запушенный калькулятор на MeeGo-Handset показан на Рис. 4.

Программирование под MeeGo для начинающих
Рис. 4. MeeGo-Handset калькулятор

Как видно на Рис. 4, калькулятор выглядит не совсем, так как мы ожидали. Давайте разберемся, в чем же проблема. А проблема в то, что для MeeGo-Handset приложения разрабатываются с помощью специального набора инструментов, а именно MeeGo Touch Framework (MTF, libmeegotouch). Давайте посмотрим, как это делается.

Изменение приложения для MeeGo-Handset

MeeGo Touch (libmeegotouch) это инструмент разработки приложений для мобильных устройств с сенсорными экранами, основанный на Qt. Он входит в состав MeeGo Platform API. Предоставляет все необходимые строительные блоки для создания собственных приложений, которые следуют MeeGo Handset UX принципам. Инструмент построен на основе Qt Graphics View Framework.
В Qt Creator создаем проект “Empty Project”, добавляем файлы main.cpp, calculator.cpp и calculator.h калькулятора. В файле проекта необходимо указать следующие строки для установленного MeeGo Touch (MTF 1.0):

CONFIG += meegotouch
INCLUDEPATH += /usr/local/include/meegotouch
LIBS        += /usr/local/lib/libmeegotouchcore.so 
               /usr/local/lib/libmeegotouchsettings.so 
               /usr/local/lib/libmeegotouchviews.so 
               /usr/local/lib/libmeegotouchextensions.so

После этого мы можем приступать к изменению программы для использования его на MeeGo.

Изменения, связанные с MTF

main.cpp

#include <MApplication>
#include <MApplicationWindow>
#include <MApplicationPage>
#include "calculator.h"
 
int main(int argc, char **argv)
{
     MApplication app(argc,argv);
     MApplicationWindow window;
     MApplicationPage page;
     Calculator *calc = new Calculator();
 
     page.setTitle("Calculator");
     page.setCentralWidget(calc);
     page.appear(&window);
 
     window.show();
 
     return app.exec();
}

Давайте посмотрим на изменения, которые затронули main.cpp:

  1. Все заголовочные файлы начинаются с заглавное буквы “М”.
  2. Так как MeeGo Touch основан на Qt в нем могут применяться основные системные классы и функции, главные изменения затронули графическую составляющую инструмента, а именно виджеты, окна и т.д.
  3. MApplication имеет схожее применение, что и в Qt.
  4. MApplicationWindow обеспечивает основу для построения пользовательского интерфейса, предоставляет навигационную панель общую для всех приложений, которая включает в себя домашнюю кнопку и кнопку закрытия, панель инструментов (в альбомной ориентации), а также меню приложения. Т.е данный класс отвечает за то, что связанно с главным окном приложения, которое содержит все остальные элементы.
  5. MApplicationPage также является инструментом для построения пользовательского интерфейса приложения. По умолчанию страница создает для горизонтально просмотра, где пользователь может размещать свои компоненты с помощью методов centralWidget() или setCentralWidget(MWidget *) (в MTF 1.0, setCentralWidget(QGraphicsWidget *)). Страницы отображаются на экране с помощью метода appear(QGraphicsScene*, DeletionPolicy) или appear(MWindow *, DeletionPolicy). Вызов метода appear() запускает показ анимации связанной со страницей. Если вы хотите показать страницу мгновенно, обратитесь к MSceneManager API.

За подробностями обращайтесь к документации по Platfrom API [4].

calculator.h

#include <QStack>
#include <MGridLayoutPolicy> // класс, отвечающий за сеточную компоновку
#include <MButton>         // класс кнопки
#include <MLayout> // главный класс компоновки
#include <MTextEdit> // класс текстового поля
#include <QGraphicsWidget> // главный класс для всех виджетов сцены (поверхности)
 
class Calculator : public QGraphicsWidget
{
    Q_OBJECT
 
public:
    Calculator(QGraphicsItem *parent = 0, Qt::WindowFlags wFlags = 0);
    MButton* createButton(const QString& str);
    …
private:
    MTextEdit *lcdDisplay;
    QStack<QString> stack;
    QString strDisplay;
    …
};

Чтобы добавить виджет Calculator на страницу приложения с помощью метода setCentralWidget() его необходимо унаследовать от класса QGraphicsWidget. В MTF 1.1 функция установки центрального виджета страницы setCentralWidget() принимает в качестве устанавливаемого компонента MWidget.

calculator.cpp

#include "calculator.h"
 
Calculator::Calculator(QGraphicsItem *parent, Qt::WindowFlags wFlags) :
    QGraphicsWidget(parent, wFlags)
{
    lcdDisplay = new MTextEdit();
    lcdDisplay->setReadOnly(true);
    lcdDisplay->setMinimumSize(150, 50);
 
    …
 
    MLayout *layout = new MLayout;
    MGridLayoutPolicy *ptopLayout = new MGridLayoutPolicy(layout);
    ptopLayout->addItem(lcdDisplay, 0, 0, 1, 4);
    ptopLayout->addItem(createButton("CE"), 1, 3);
 
    for (int i = 0; i < 4; ++i)
        for (int j = 0; j < 4; ++j)
            ptopLayout->addItem(createButton(aButtons[i][j]), i + 2, j);
 
    layout->setPolicy(ptopLayout);
    setLayout(layout);
}

Это в основном главные изменения, которые коснулись приложения при переносе на MeeGo-Handset. Есть некоторые изменения связанные с отображением результата вычислений с помощью QLCDNumber, т.к данного класса в MTF 1.0 не оказалось, пришлось его заменить на MTextEdit.

Результат изменений представлен на Рис. 5.

Программирование под MeeGo для начинающих
Рис. 5. MeeGo-Handset калькулятор

Как видно из представленных изменений, перенос приложения для MeeGo-Handset не составляет особого труда. Со временем MTF будет только набирать функциональность и мощь, что даст разработчикам более широкий простор для маневра и более современных и качественных приложений.

Заключение

MeeGo является совместной разработкой компаний Nokia и Intel, которая только начинает набирать обороты и завоевывать рынок. Данная платформа основана на Maemo и Moblin, и вобрала в себя все преимущества этих платформ и приобрела собственные.
Платформа развивается и будет широко использоваться в ближайшем будущем. Основной акцент смешается к платформе MeeGo, которая может использоваться на многом количестве устройств, начиная мобильными устройствами и заканчивая телевизорами.

Список литературы

  1. Установка и настройка MeeGo SDK: wiki.meego.com/SDK/Docs/1.1/Getting_started_with_the_MeeGo_SDK_for_Linux.
  2. Запуск MeeGo на эмуляторе Xephyr: wiki.meego.com/MeeGo_SDK_with_Xephyr
  3. Platform API: apidocs.meego.com/1.1/platform/html/index.html
  4. MeeGo API 1.1: apidocs.meego.com/1.1/core/html/index.html
  5. Сборки MeeGo: repo.meego.com/MeeGo/builds/
  6. Шлее М. – Qt 4.5. Профессиональное программирование на С++. – СПБ.: БХВ-Петербург, 2010г., 896с.
  7. Hello World for MeeGo-Handset: wiki.meego.com/SDK/Docs/1.1/Creating_Hello_World, blog.telaic.pl/?p=63
  8. Обзор MeeGo: ru.wikipedia.org/wiki/MeeGo

P.S

  1. Полный код
  2. Оригинальная статья

Автор: h05t

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js