This post exists also in english

Ce billet fait partie d'une série sur comment déployer une application XULRunner. Voir le préambule pour le contexte.

2 - Linux

2.3 Un cas spécial : deb pour Maemo

2.3.1 Maemo - généralités

Maemo est une distribution Linux basée sur Debian, pour les mobiles. Et Firefox Mobile, nom de code Fennec, y est disponible.
Fennec, comme la version standard de Firefox, peut lancer une appli XULRunner via l'argument -app.

Donc, a priori, nous pouvons lancer toutes les applications XULRunner. Bien sûr nous devrions tenir compte des spécificités des appareils mobiles, petit écran (mais avec une haute résolution), et écran tactile. Ce n'est pas le propos de ce tutoriel. Mais, telle quelle, notre appli devrait fonctionner.

Cette plateforme étant basée sur Debian, nous distribuerons un deb pour notre appli. Nous devons juste adapter quelques parties du chapitre précédent aux spécificités de Maemo.

Le Maemo Wiki contient quelques informations intéressantes.

2.3.2 Adapter le lanceur

Le changement est que nous invoquons Fennec à la place de Firefox.
Le nouveau lanceur, myapp.sh :

#!/bin/sh

CUR_DIR=$(dirname $(readlink -f "$0"))

if [ -x /usr/bin/fennec ]; then
/usr/bin/fennec -app "$CUR_DIR/application.ini" $@
elif [ -x /usr/bin/xulrunner ]; then
/usr/bin/xulrunner "$CUR_DIR/application.ini" $@
else
echo "Error: unable to find Fennec or XULRunner!"
fi
2.3.3 Nouvelle organisation des fichiers - Où placer notre appli

Sur Maemo, à cause de l'espace mémoire des appareils mobiles, les applications doivent résider dans le dossier /opt/ plutôt que dans /usr/lib/ ou /usr/share/.

Donc nous allons copier notre appli dans /opt/myapp/.
Un sous dossier serait possible également, /opt/myorganization/myapp/ par exemple.

Pour les icônes, nous utiliserons des dimensions différentes que pour le bureau, comme le fait Fennec : 1 png de 26x26px png, 1 png de 40x40px, et 1 svg de 48x48px.
Leurs destinations finales changent un peu également, elles doivent être placées dans :

  • /usr/share/icons/hicolor/26x26/hildon/myapp.png
  • /usr/share/icons/hicolor/40x40/hildon/myapp.png
  • /usr/share/icons/hicolor/scalable/hildon/myapp.svg

L'emplacement du fichier .desktop change aussi, il doit être placé dans /usr/share/applications/hildon/ .

Le fichier .desktop et les images ne sont pas trop lourdes, nous pouvons les placer ainsi, mais il serait possible de les placer dans notre dossier principal d'application et d'utiliser des liens symboliques.

2.3.4 Additions au fichier .desktop

Quelques informations peuvent être trouvées dans cette page du Wiki Maemo.

Quelques clés additionnelles peuvent être utilisées dans le fichier desktop. Certaines que j'ajoute ne sont pas documentées, mais semblent être utilisées par beaucoup de programmes, peut être pour d'anciennes version de Maemo.
Voici quelques lignes ajoutées à notre fichier desktop :

X-Icon-Path=/usr/share/icons
X-Window-Icon=myapp
X-Window-Icon-dimmed=myapp
X-Osso-Type=application/x-executable
2.3.5 Changements aux fichiers Debian

Pour éviter d'écraser le deb générique créé dans le chapitre précédent, nous allons renommer ce nouveau paquet deb pour Maemo. Nous utiliserons 'myapp-mobile'. Pour être cohérent avec le processus debhelper, voici la liste de tous ces changements :

  • Dans le fichier changelog, la ligne myapp (1.0-1) unstable; urgency=low devient myapp-mobile (1.0-1) unstable; urgency=low

  • Dans le fichier control, la valeur pour les champs Source et Package est changée en myapp-mobile

  • Le ficher myapp.links est renommé en myapp-mobile.links

Autres changements au fichier control :

D'après cette documentation, nous devons choisir une Section dans cette liste :

  • user/desktop
  • user/development
  • user/education
  • user/games
  • user/graphics
  • user/multimedia
  • user/navigation
  • user/network
  • user/office
  • user/science
  • user/system
  • user/utilities

Nous pouvons ajouter des données supplémentaires au fichier control, utilisé pour construire le deb.
le premier est XB-Maemo-Display-Name: MyApp .

Le deuxième est une icône base64, utilisée par le gestionnaire d'applications de Maemo, XB-Maemo-Icon-26.

Nous utiliserons un script bash pour créer cette valeur base64 à partir d'une icône png de 48px.

Nous avons besoin du programme uuencode, sur debian/ubuntu :

apt-get install sharutils

puis nous créons un script bash nommé build_base64.sh pour convertir un png de 48x48px en la valeur texte désirée :

#!/bin/bash

set -e

# base64 conversion
uuencode -m icon48.png icon48.png > icon48.txt

# remove the first line (begin-base64 ...)
sed -i '1d' icon48.txt

# and the last line (====)
sed -i '$d' icon48.txt

# add 4 spaces at the beginning of each lines
sed -i "s/^/ /" icon48.txt

# and add a blank line at the end of the file
echo '' >> icon48.txt

vous pouvez trouvez ce script dans le dossier data/icons de l'archive samples_chapter_2.tar.gz. Pour le lancer (depuis le dossier icons) :

sh build_base64.sh

Nous pouvons maintenant utilisé le contenu de icon48.txt comme valeur de XB-Maemo-Icon-26 dans notre fichier control.

2.3.6 Créer le deb

Et c'est tout, nous pouvons maintenant créer notre deb comme dans le chapitre précédent.

Je n'écris pas ici le script build_maemodeb.sh, c'est pratiquement le même que celui pour construire le paquet générique debian. Vous le trouverez dans l'archive jointe.

  • cd samples_chapter_2
  • sh ./build_maemodeb.sh

Note: je suppose dans ce tutoriel que nous n'avons pas de code compilé dans notre appli.
Si ce n'est pas le cas, nous devons utiliser scratchbox pour compiler, et nous devons utiliser scratchbox pour construire le deb aussi !
Et, comme dans le chapitre précédent, ne pas utiliser la ligne Architecture: all dans le fichier control.

Nicolas Martin

Vous pouvez télécharger tous les exemples de ce chapitre 2 (Linux) dans l'archive samples_chapter_2.tar.gz .

L'application myapp, de developer.mozilla.org, est dans le Domaine Public.

L'icône utilisée est issue du Tango Desktop Project, et est dans le Domaine Public.

Toutes les autres données ajoutées, et les fichiers en exemple, sont dans le Domain Public également.