Размещение приложения для ОС Maemo в репозиторий стабильных приложений Extras

Иерархия репозиториев ОС maemo представлена на странице http://wiki.maemo.org/Extras.



Extras это главный репозиторий приложений для maemo, в котором можно найти большинство

прошедших процедуру проверки качества стабильных приложений, разработанных членами сообщества maemo.



Я постараюсь рассказать о процессе попадания в Extras на примере развлекательного графического редактора Liquid, позволяющего рисовать в двух режимах: с помощью сенсорного экрана и акселерометра. Приложение разрабатывалось студентами кафедры Информатики и математического обеспечения Петрозаводского государственного университета в рамках международной программы FRUCT при поддержке корпорации NOKIA (wiki проекта).



В первую очередь приложение необходимо загрузить в репозиторий Extras-Devel и затем перевести его (promotion) в репозиторий Extras-Testing. После этого начнётся тестирование приложения сообществом maemo, при положительных результатах которого можно будет перевести приложение в Extras.



Этап 1. Extras-Devel



Данный репозиторий предназначен для разработчиков приложений. Перед загрузкой

приложения необходимо зарегистрировать учетную запись на garage.maemo.org.



Для загрузки в Extras-Devel необходимо подготовить deb-пакет. Подробно данный процесс описан на wiki.maemo.org. Я остановлюсь лишь на некоторых моментах.


  • Обязательно указывайте секцию, к которой относится приложение в debian/control.

    (список секций). Для библиотек используйте секцию «libs». Если секция указана неверно (Напр.: «games» вместо «user/games»), приложения не будет видно в диспетчере приложений на планшете. При этом какого-либо предупреждения или ошибки вы не получите.
  • В debian/control можно указать домашнюю страницу проекта, используя:

    Homepage: <example.com>
  • Если вы планируете делать promotion в Extras-Testing обязательно укажите адрес

    багтрекера в control-файле:
    XSBC-Bugtracker: <bugtracker-address>



    в качестве багтрекера можно указать и обыкновенный Email:

    XSBC-Bugtracker: mailto: <mail.example.com>
  • Также можно добавить иконку приложения (48х48), она будет видна в диспетчере приложений на устройстве и на странице приложения на maemo.org.

    XB-Maemo-Icon-26: <base64-код изображения>
  • Не забудьте указать все необходимые зависимости приложения (Depends: ), а также

    пакеты, необходимые для сборки приложения (Build-Depends: ).
  • Если дистрибутив вашего приложения вместе с зависимостями занимает более 500 KB,

    крайне рекомендуется сделать «оптификацию» пакета (optification). Данная процедура помещает часть файлов приложения (обычно это различные ресурсы: изображения, аудио и тд.) при установке в директорию /opt, экономя при этом драгоценное место на rootfs. Autobuilder поддерживает автоматическую оптификацию, поэтому достаточно создать файл debian/optify, в который необходимо добавить:


    • auto — для автоматической оптификации
    • all — подвергает оптификации файлы, перечисленные в debian/files

Всё это поможет сэкономить вам немало времени.



После того, как deb-пакет подготовлен, можно приступить непосредственно к загрузке в

Extras-Devel.



Сделать это можно тремя способами:

  1. Extras-Assistant, предоставляющий Web-интерфейс для загрузки пакетов.
  2. debian-утилита dput
  3. Напрямуя по SSH (используя scp)



Если всё прошло успешно, через некоторое время приложение появится в списке пакетов.



Этап 2. Extras-Testing



Когда, на ваш взгляд, приложение становится стабильным, Вы можете перевести его в репозиторий Extras-Testing. Для этого выполните следующие шаги:


  1. Перейдите к ARMEL версии вашего приложения через maemo.org packages inteface
    maemo.org > packages > Fremantle Extras-devel free armel > название пакета > версия
  2. Убедитесь, что вы являетесь участником проекта (maintainer)
  3. В правом нижнем углу описания пакета должна появиться ссылка "Promote package", нажмите её



Если всё прошло успешно, то ваше приложение попадёт в конец очереди на тестирование.



Для оценки приложения используется так называемая система кармы. Голос пользователя или тестировщика «За» — карма++, «Против» — карма--.



Тестирующая команда использует набор критериев (QA checklist) для оценки качества приложения. Если приложение не проходит хотя бы по одному из пунктов, тестировщик вправе проголосовать против.



В случае с Liquid, при первом promotion'е, тестировщики нашли целый ряд ошибок как в оформлении пакета, так и в работе приложения:


  • не был указан багтрекер
  • не была произведена оптификация пакета
  • были проблемы с загрузкой CPU (~80%) — это решилось изменением формата QImage, на котором происходит отрисовка рабочей области редактора, с QImage::Format_ARGB32_Premultiplied на QImage::Format_RGB16.
  • При отключении экрана планшета и переходе в фоновый режим (task switcher) данные с акселерометра продолжали считываться, в результате чего даже в sleep mode была постоянная нагрузка на CPU.

На последнем пункте я остановлюсь поподробнее так, как информацию о том, как реализовать обработку данных событий найти довольно сложно.



Переход в sleep mode можно отследить посредством dbus. На Qt это реализуется следующим образом:


...
#define MCE_DISPLAY_STATUS_GET "get_display_status"
#define MCE_SERVICE "com.nokia.mce"
#define MCE_REQUEST_PATH "/com/nokia/mce/request"
#define MCE_REQUEST_IF "com.nokia.mce.request"
#define MCE_DISPLAY_SIG "display_status_ind"
#define MCE_DISPLAY_ON_STRING "on"
#define MCE_DISPLAY_OFF_STRING "off"
#define MCE_SIGNAL_IF "com.nokia.mce.signal"
#define MCE_SIGNAL_PATH "/com/nokia/mce/signal"
...
static QDBusConnection dBusConnection = QDBusConnection::systemBus();

MCE::MCE(QObject *parent):	
    QObject(parent)
{
    // Create dbus-interface	
    dBusInterface = new QDBusInterface(MCE_SERVICE,
                                       MCE_REQUEST_PATH,
                                       MCE_REQUEST_IF,
                                       dBusConnection,
                                       this);

    dBusConnection.connect(MCE_SERVICE,	
                           MCE_SIGNAL_PATH,
                           MCE_SIGNAL_IF,
                           MCE_DISPLAY_SIG,
                           this,
                           SLOT(displayStateChanged(const QDBusMessage &)));
}

void MCE::displayStateChanged(const QDBusMessage &message)
{
    QString state = message.arguments().at(0).toString();
    if (!state.isEmpty()) {
        if (state == MCE_DISPLAY_ON_STRING)
            ;   //Display on
        else if (state == MCE_DISPLAY_OFF_STRING)
            ;  //Display off
}



Т.е. по dbus отправляется сообщение «get_display_status», если режим дисплея сменился — генерируется сигнал, который обрабатывается с помощью слота displayStateChanged(...).



Что касается фонового режима, для этого достаточно добавить обработку событий WindowActivate/WindowDeactivate (source).



При разработке следующего проекта (Shariks) данные замечания были учтены.



И, наконец, критерии попадания в Extras (все они должны быть соблюдены):


  • Прошло как минимум 10 дней карантина (т.е. приложение находится в Extras-Testing >= 10 дней)
  • Карма > 10
  • Как минимум 3 тестировщика проголосовали «За»



Приложение может быть переведено из Extras-Testing обратно в Extras-Devel если:


  • Прошло как минимум 10 дней карантина

И выполнено одно из следующих условий:


  • Карма < -5
  • Мэйнтейнер пакета снял его с очереди на тестирование (demotion)
  • Как минимум 3 тестировщика проголосовали «Против»



Этап 3. Extras



После того, как критерии прохождения в Extras будут соблюдены у вас появится возможность

перевести приложение в Extras. Для этого проделайте шаги, аналогичные promotion'у в Extras-Testing. В нижнем правом углу описания пакета появится ссылка "Promote package". Если всё пройдет успешно, ваше приложения появится в Downloads.



Далее вы можете отредактировать страничку вашего проекта и добавить снимки экранов. Для этого необходимо авторизоваться на maemo.org, перейти на страницу вашего приложения в Downloads и воспользоваться панелью Midgard CMS: «Page->Edit» (серая панель наверху экрана).



Полезные ссылки