Cette semaine, nous revenons sur la librairie Android. Nous publions le première app de démonstration sur Google Play, et nous avons réalisé les mêmes mesures de performances que nous avions testés précédemment pour les ordinateurs traditionnels. Nous avons aussi fait quelques améliorations sur l'exemple que nous avons présenté il y a quelques semaines.
Google Play
Nous avons amélioré l'application Yocto-Meteo et l'avons rendu disponible sur Google Play. En plus de quelques améliorations documentées ci-dessous, nous en avons profité pour ajouter un petit graphique qui permet de voir l'évolution des différentes mesures pendant les 24 dernières heures.
Dans les jours qui viennent, nous allons publier une application type pour chaque module sous Google Play. Comme d'habitude, les sources complètes seront disponibles avec la librairie Android.
Les performances d'Android
Lors de notre précédent article sur les mesures de performance nous n'avions pas testé Android. Nous pouvons comparer les résultats optenu avec des machines ARM sous linux :
Machine | Envoi commande | Envoi répété | Latence | 1e lecture |
---|---|---|---|---|
MK805 (linux ) | 1.7 [ms] | 5.0 [ms] | 6.5 [ms] | 41 [ms] |
Raspberry Pi (linux) | 2.0 [ms] | 5.0 [ms] | 7.9 [ms] | 80 [ms] |
Acer IconiaTab A200 (Android 4.0) | 4.8 [ms] | 7 [ms] | 16.5 [ms] | 52 [ms] |
On peut voir qu'Android est plus lent que des machines sous Linux qui utilisent un processeur ARM, mais ces performances restent très bonnes et sont largement supérieures aux besoins de la plupart des applications.
Truc et astuce...
Nous avions déjà expliqué qu'Andoid autorisait une application à accéder à un périphérique USB seulement après avoir demandé confirmation à l'utilisateur. L’autorisation est valide même si on stope et on relance l'application, mais dès que l'on débranche le module ou que la tablette reboot, il faut à nouveau confirmer l'accès. Pour éviter ce désagrément, il faut ajouter dans le fichier AndroidManifest.xml un intent-filter pour que l'application se lance dès que le périphérique est branché. Avec cette solution, Android va demander confirmation de l'autorisation à l'utilisateur qu'une fois pour toute.
La première étape consiste à créer un fichier XML dans les ressources qui contient tous les modules qui sont utilisés. Ce fichier doit être sauvé dans le répertoire res/xml. Dans ce fichier, on va lister le vendorid et le deviceid USB des modules qui seront utilisés. Vous pouvez trouver le vendorid et le deviceid dans la documentation du module que vous utilisez.
<resources>
<usb-device vendor-id="9440" product-id="24" />
</resources>
Il faut ensuite modifier votre AndroidManifest.xml pour que l'application soit lancée dès que l'un des périphériques présents dans le fichier que nous venons de créer est connecté. Il faut ajouter <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"/> dans la section <intent-filter> de l'activité principale. Dans la section <activity>, on ajoute le pointeur sur notre fichier xml qui contient la liste des modules USB (device_filter.xml dans notre cas).
...
<uses-feature android:name="android.hardware.usb.host" />
...
<application ... >
<activity
android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
</activity>
</application>
</manifest>
Une fois recompilée, l'application se lance dès que vous connectez le module.