Z Harmattanu na Fremantle

By Jozef Mlích - Last updated: Monday, June 4, 2012 - Save & Share - Leave a Comment

Minule mi někdo navrhoval, abych naportoval svoji MeeGo Harmattan aplikaci i pro Maemo Fremantle. Poté, co jsem viděl Maemo verzi aplikace pro Red Hat Developer Conference, jsem se rozhodl, že to také zkusím.
Hlavním problémem jsou různé verze Qt a Qt Components v Maemo. Systém po přeflashování a aktualizaci obsahuje potřebné repozitáře extras a příslušné balíčky. Po přidání extras-testing a extras-devel a instalaci Community Updates (CSSU) je to ale možné.
První krok spočívá v nainstalování potřebných balíčků:

qt-components-10 libqtm-12, qtquickcompat libqtm-12-location libqtm-11-location qt4-declarative-qmlviewer

Tyto balíčky je možné dát do závislostí a uživatel to bude mít ve výsledku bezbolestné. Jak už jsem dříve psal, tak čerstvý systém obsahuje starší verzi Qt Components, kde je potřeba přepsat importy, a to prakticky ve všech QML souborech. Novější verze je již kompatibilní s MeeGo.

Ve zdrojovém kódu pro Harmattan jsou například tyto importy:

import Qt.Quick 1.0
import com.nokia.meego 1.1
import com.nokia.extras 1.1

A v kódu pro Fremantle bude například toto:

import Qt 4.7
import Qt.labs.components.native 1.0
import org.maemo.fremantle 1.0
import org.maemo.extras 1.0

Qt Mobility (tedy knihovna pro práci s gps, akcelerometry apod.) má jiné umístění a název, takže je nutné v projektovém souboru (*.pro) přidat podmíněný překlad pro Maemo:

maemo5 {
CONFIG += mobility12
} else {
CONFIG += mobility
}

Ošetření umístění Qt Mobility v jiných adresářích lze řešit buď přidáním správných cest do proměnných prostředí nebo kouskem C++ kódu ve funkci main.

$ cat ./launcher.sh
#!/bin/sh
export LD_LIBRARY_PATH=/opt/qtm12/lib
export QML_IMPORT_PATH=/opt/qtm12/imports
/opt/program/bin/program

Já preferuju úpravu kódu v C++ a podmíněný překlad. Konkrétně se jedná o následující kód v main.cpp:

#if defined(Q_WS_MAEMO_5)
viewer->engine()->addImportPath(QLatin1String("/opt/qtm12/imports"));
viewer->engine()->addPluginPath(QLatin1String("/opt/qtm12/plugins"));
#endif

Dále je potřeba zakomentovat část kódu, zabývající se rotací stránky (novější verze qt-components toto řeší sama, takže by se stránka otočila 2x)

#if !defined(Q_WS_MAEMO_5)
viewer->setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
#endif

V Maemu se používá standardní záhlaví pro aplikace s ikonami pro zobrazení seznamu aplikací, ukončením aplikace a systray. Použití tohoto standardního záhlaví by bylo komplikované a řeší se to tak, že PageStackWindow si vykresluje vlastní záhlaví aplikace.

Aby se nezobrazovala původní záhlaví, tak je potřeba spustit aplikaci v celoobrazovém režimu:

#if defined(Q_WS_MAEMO_5)
viewer->showFullScreen();
#else
viewer->showExpanded();
#endif

Na obrázku to potom vypadá následovně. Při načítání aplikace se na okamžik objeví záhlaví s popiskem. Následně se zmenší, tak aby nezabíralo zbytečně moc místa.

V samotném kódu je dále potřeba upravit některé drobnosti. Například „Pinch {}“ bude pochopitelně fungovat jen na vícedotykovém displeji. Ve starší verzi je nutné kód zakomentovat, v novější to prostě jenom nebude fungovat. Dalších takových drobností, které bohužel nefungují, je celá řada. Tyto drobnosti bohužel nutí vývojáře založit další vývojovou větev kvůli kompatibilitě. Přitom by to určitě šlo udělat tak, že vývojář prostě vezme verzi pro MeeGo a v projektu klikne Maemo a spustí překlad a hotovo.

Asi nejhorším problémem je vzájemná nekompatibilita verzí Qt-Components v Maemu. Jinak řečeno, pokud chceme, aby program fungoval za všech okolností, tak je potřebné vytvořit dvě verze QML souboru a podmíněným překladem vybírat, která z nich se má použít, přičemž lze CSSU verzi rozlišit jako verzi využívající Qt 4.7.4 a non-CSSU jako verzi s Qt 4.7.0.

Dalším krokem je vytvoření balíčku a jeho publikování. Pro vytvoření balíčku je možné použít tlačítko Publish v Qt Creatoru, bohužel ani tohle nefunguje bezbolestně. Pro publikování se v adresáři  /tmp vytváří soubory potřebné pro odeslání balíčku do „build service“. Prvním problémem je nakopírování souboru debian/rules se špatnými právy, takže jej pak nelze spustit. Druhým problémem je, že soubor debian/rules sice obsahuje příkazy potřebné pro překlad programu, ale ty jsou zakomentované.

while [ true ]; do chmod +x /tmp/qtc_packaging/projectname/debian/rules; done

Takhle připravený balíček je možné poslat do extras-devel pomocí extras assistenta nebo pomocí dput nebo přes webové rozhraní. Vytvořený balíček obsahuje zdrojový kód. Ten se na serveru přeloží a výsledný binární program se nakonec zveřejní v repozitáři. Emailem příjde oznámeni o výsledku vzdáleného překladu.

Naštěstí se pohybujeme v opensource, takže pokud něco nejde, tak se můžeme podívat, jak to dělají ostatní. Další programy, které používají Qt-Components, jsou například butaca, meecast nebo miniature.

Sdílejte:

Share this:

Posted in MeeGo • Tags: , , , Top Of Page

Write a comment


Yandex Mail.ru Google LiveJournal myOpenId Flickr claimId Blogger Wordpress OpenID Yahoo Technorati Vidoop Verisign AOL