Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Ève

Import/export de données avec un calendrier Android

Première rédaction de cet article le 6 février 2011


Un des plus gros problèmes du système d'exploitation Android est certainement dans la dépendance de son outil d'agenda au service Google Calendar. Si on utilise Google Calendar, tout va vien, la synchronisation avec les données du téléphone se fait toute seule, les sauvegardes sont faites chez Google, tout le monde est heureux. Mais si on ne veut pas partager ses données avec Google, qui va lui même les partager avec plein de gens (à commencer par la police de son pays), si on veut pouvoir avoir des rendez-vous personnels ou professionnels sans que Google soit au courant, quelle solution pour faire des sauvegardes ? Et, plus généralement, pour importer et exporter des calendriers avec Android ?

La solution la plus évidente, changer de logiciel, ne marche pas : le seul logiciel concurrent, Jorte, est plutôt pauvre. Par exemple il n'a même pas le concept d'évenements récurrents. Très peu de gens l'utilisent. Et, s'il y a au moins une dizaine de clients Twitter sur Android, écrire un logiciel d'agenda est moins prestigieux et il n'y a donc guère de choix. (Je n'ai pas encore testé Pimlico qui, au 11 février 2011, n'a pas atteint le Market, ni Calengoo, dont Yannick vient de me parler mais, de toute façon, ce dernier ne gère pas non plus iCalendar. De même, le projet aCal, suggéré par Raphaël 'SurcouF' Bordet, n'est pas encore assez mûr (en mai 2011, il n'y a toujours pas grand'chose qui marche)

L'idéal serait que le client Agenda puisse enregistrer au format standard iCalendar (RFC 5545). Mais il ne le peut hélas pas, ce qui en dit long sur la volonté d'ouverture réelle de Google. Pour les sauvegardes, on doit donc copier les fichiers de l'agenda (je dois dire que je ne sais pas trop où ils sont sur le téléphone) ou bien synchroniser avec un serveur qui fera ensuite les sauvegardes.

À noter que le problème n'est pas spécifique à la distribution Android officielle. CyanogenMod a le même problème et la question ne semble pas susciter d'intérêt.

Pour cette synchronisation, il existe un protocole standard, CalDAV (RFC 4791). Le client Agenda d'Android ne le parle pas (plus exactement, il le parle, et l'utilise avec Google, mais ne permet pas de l'utiliser avec des serveurs tiers ; difficile de ne pas penser que Google veut nous garder prisonniers...) mais il existe plusieurs applications qui peuvent assurer cette fonction. Côté serveur, j'ai testé Calendar Server d'Apple et un serveur Zimbra au bureau. J'ai utilisé CalendarSync, qui marche bien (avec Calendar Server, mais pas avec Zimbra, où je récupère un Method REPORT is not defined in RFC 2068 and is not supported by the Servlet API). (À noter que Calendar Sync ne semble pas être disponible pour CyanogenMod.) CalendarSync a depuis été remplacé par AnDal. Quant à Funambol, il essaie apparemment uniquement avec la méthode POST sans tenir compte de ce que propose le serveur CalDAV (section 5.1.1 du RFC 4791). Le serveur (ici Calendar Server d'Apple) le jette donc (405 : méthode non disponible) et Funambol ne fournit rien de plus détaillé qu'un mystérieux Network Error :

192.168.2.31 - - [02/Oct/2010:14:18:59 +0200] "POST / HTTP/1.1" 405 151 "-" "Funambol Android Sync Client 8.7.3" [1.2 ms]

Je n'ai pas eu plus de succès avec Funambol et Zimbra donc j'ai renoncé à ce logiciel. Question client CalDAV, il faut enfin signaler le récent (et loin d'être terminé) e7o.

Revenons au serveur CalDAV. Sur Unix, j'ai testé Davical, très complexe et que je n'ai jamais réussi à faire fonctionner sur ma Gentoo (Raphaël Bordet me signale que ça marche du premier coup sur Debian et Florian Crouzat y arrive sur Gentoo). En revanche, le CalendarServer d'Apple, disponible sous forme de paquetage pour la plupart des Unix, est très simple et marche du premier coup. Les données sont ainsi sauvegardées en dehors du téléphone. Avec la configuration par défaut, CalendarServer met un fichier .ics par événement, dans un sous-répertoire de /var/spool/caldavd/calendars. Il faut fouiller un peu, notamment parce que les identités de l'utilisateur sont remplacées par des nombres mais, mais, une fois que c'est fait, un simple cat dans le répertoire de l'utilisateur récupère le calendrier entier. (Sinon, je n'ai pas réussi à connecter Evolution à CalendarServer, alors que j'espérais que ce client CalDAV puisse ensuite exporter les données. Erwan le Gall me signale que ça marche très bien avec Thunderbird.)

En parlant de sauvegarde, j'avais aussi le problème inverse : envoyer les données qui avaient été stockées sur mon Palm vers le nouveau smartphone. j-Pilot avait gentiment converti ces données en iCalendar, mais je n'ai pas trouvé de moyen de transmettre ces données à l'agenda d'Android : il ne lit pas le iCalendar et je ne sais pas comment l'injecter dans le serveur CalDAV CalendarServer.

Laurent Frigault suggère une autre méthode que je n'ai pas encore complètement testée mais qui marche pour lui. Je le cite : « Pour l'importation, j'ai trouvé un moyen tout bête de contourner ça : le courrier. Il suffit de générer un fichier .vcs (iCalendar) et de se l'envoyer par courrier (ou probablement de le déposer quelque part via le partage de disque USB) et le tour est joué. Une fois le message arrivé dans K9-mail, on clique sur la pièce jointe et on a alors le choix d'importer les évènements dans le calendrier. » Pour ma part, j'ai noté que cela ne marchait que si le fichier avait l'extension .vcs. S'il se nomme .ics, ce qui est plus courant, K9-mail ne propose pas de lancer l'Agenda.

« Pour les sauvegardes du calendrier, j'ai trouvé sur l'Android Market un programme qui fait de l'import/export au format iCalendar : iCal Import/Export. Ça ne fait pas de client/serveur juste import/export. » Cela marche très bien pour moi et j'obtiens bien du bel iCalendar comme :

BEGIN:VEVENT
ORGANIZER:Outlook
SUMMARY:Parinux Seeks
DESCRIPTION:http://www.parinux.fr/
LOCATION:
DTSTART:20101214T191500
DTEND:20101214T231500
DTSTAMP:20110206T205333Z
UID:41+Outlook
END:VEVENT

Raphaël Fournier me rappelle qu'il existe un format de synchronisation non normalisé, SyncML et que plusieurs logiciels pour Android gèrent ce format (comme Funambol, déjà cité), qui pourrait donc fournir une autre solution. Plusieurs logiciels serveurs libres le gèrent également, comme Horde, qu'utilise Raphaël avec succès.

Patrick van de Walle a documenté la méthode qu'il utilise (avec Davical).

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)