J’ai acheté il y a 4 mois le smartphone Google Nexus chez Rue du Commerce, mais depuis, et je ne sais pas pourquoi, à chaque annonce de mise à jour d’Android Ice Cream Sandwich, impossible que la détection des mises à jour me propose quoique ce soit…

Finalement ce matin j’ai décidé de réaliser manuellement cette mise à jour via les outils et fichiers officiels de Google (Pas besoin de rooter le téléphone).

La première chose à faire est d’installer le SDK Android via le lien suivant (pour les connaisseurs, uniquement le binaire fastboot est suffisant) : http://developer.android.com/sdk/installing.html.

Vérifier la configuration USB du Google Nexus sur la machine en vérifiant ou créant le fichier des droits udev (seules les lignes des Google Nexus sont nécessaires mais qui sait, j’aurai peut-être le bonheur de tester d’autres Google Android devices)

chris@tux:~/tmp/yakju-imm76i$ sudo emacs /etc/udev/rules.d/51-android.rules

Copier/coller les lignes suivantes dans le fichier /etc/udev/rules.d/51-android.rules

# adb protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="##votre_nom_d_utilisateur##"
# fastboot protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="##votre_nom_d_utilisateur##"
# adb protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="##votre_nom_d_utilisateur##"
# fastboot protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="##votre_nom_d_utilisateur##"
# adb protocol on stingray/wingray (Xoom)
SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER="##votre_nom_d_utilisateur##"
# fastboot protocol on stingray/wingray (Xoom)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER="##votre_nom_d_utilisateur##"
# adb protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="##votre_nom_d_utilisateur##"
# fastboot protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="##votre_nom_d_utilisateur##"
# adb protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="##votre_nom_d_utilisateur##"
# fastboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="##votre_nom_d_utilisateur##"
# usbboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0600", OWNER="##votre_nom_d_utilisateur##"

On relance le service udev

chris@tux:~/tmp/yakju-imm76i$ sudo service udev restart

Télécharger et décompresser la mise à jour Factory Images « yakju » for Galaxy Nexus « maguro » (GSM/HSPA+) (pas besoin de Google Wallet en France pour la majorité d’entre nous) depuis le site de Google : https://developers.google.com/android/nexus/images?hl=fr-FR#yakju

Démarrer le Google Nexus en mode fastboot en appuyant simultanément sur les boutons : Volume+ et Volume- et PowerOnOff

Se rendre dans le répertoire où l’image à été décompressé pour débloquer le mode fastboot

chris@tux:~/tmp/yakju-imm76i$ fastboot oem unlock
...
OKAY [ 25.900s]
finished. total time: 25.900s

Lancer la mise à complète d’ICS 4.0.4

chris@tux:~/tmp/yakju-imm76i$ ./flash-all.sh
sending 'bootloader' (2308 KB)...
OKAY [  0.318s]
writing 'bootloader'...
OKAY [  0.292s]
finished. total time: 0.610s
rebooting into bootloader...
OKAY [  0.006s]
finished. total time: 0.006s
sending 'radio' (12288 KB)...
OKAY [  1.736s]
writing 'radio'...
OKAY [  1.379s]
finished. total time: 3.116s
rebooting into bootloader...
OKAY [  0.006s]
finished. total time: 0.007s
archive does not contain 'boot.sig'
archive does not contain 'recovery.sig'
archive does not contain 'system.sig'
--------------------------------------------
Bootloader Version...: PRIMELA03
Baseband Version.....: I9250XXLA2
Serial Number........: 0146B0000101601D
--------------------------------------------
checking product...
OKAY [  0.007s]
checking version-bootloader...
OKAY [  0.008s]
checking version-baseband...
OKAY [  0.008s]
sending 'boot' (4148 KB)...
OKAY [  0.577s]
writing 'boot'...
OKAY [  0.252s]
sending 'recovery' (4478 KB)...
OKAY [  0.638s]
writing 'recovery'...
OKAY [  0.310s]
sending 'system' (316111 KB)...
OKAY [ 44.125s]
writing 'system'...
OKAY [ 33.302s]
erasing 'userdata'...
OKAY [  0.315s]
erasing 'cache'...
OKAY [  0.013s]
rebooting...

finished. total time: 79.598s

Rebooter en mode fastboot pour remettre le lock par soucis de sécurité

chris@tux:~/tmp/yakju-imm76i$ fastboot oem lock
...
OKAY [  0.170s]
finished. total time: 0.170s

Je suis enfin à jour et je gagne en performance, c’est fluide !!!

Logo Android
Logo Android

Pour ceux qui veulent se lancer dans la compilation d’Android sous Ubuntu Lucid Lynx, il faut savoir que cela nécessite de réaliser quelques manipulations supplémentaires.

Tous d’abord le lien du projet pour compiler les sources d’Android (très bien écrit) :

Mais pour notre Ubuntu le problème est java5, qui n’est plus dispo dans les dépôts. Si vous tenter de compiler les sources avec le java6 sous une Ubuntu 32bits, vous tomberez sur un bug indiquant que des entêtes de fichiers C 64bits non trouvés. Dans tous les cas, des parties du code java d’Android ne sont pas supportés par java 6.

Donc la première des choses à faire est de récupérer java5 depuis le site d’Oracle :

Installer manuellement le java5

chmod a+x jdk-1_5_0_22-linux-i586.bin
./jdk-1_5_0_22-linux-i586.bin
sudo mv jdk1.5.0_22 /usr/lib/jvm/java-5-sun-1.5.0.22
cd /usr/lib/jvm
sudo ln -s java-5-sun-1.5.0.22 java-5-sun

Je n’ai pas trouvé le moyen d’inclure mon install de java5 avec l’outil « update-java-alternatives » qui permet de switcher d’une jvm à l’autre en toute simplicité. Il est toujours possible de créer un fichier « .java-5-sun.jinfo » mais je manque de temps et il existe peut-être un outil pour le faire, n’hésitez pas à me faire signe. (trouvé : http://doc.ubuntu-fr.org/java)

Avant de lancer le make -j4 du tutoriel de google, faites la manip suivante dans le shell (non persistante) :

export JAVA_HOME=/usr/lib/jvm/java-5-sun
export ANDROID_JAVA_HOME=${JAVA_HOME}
export PATH=${JAVA_HOME}/bin:${PATH}

Tenter votre première compilation d’Android générique :

make -j4

Liens

Samsung Spica I5700
Photo Samsung Spica I5700 avec son CPU S3C6410 cadencé à 800Mhz

Ça fait maintenant plus d’un mois que je tourne avec le Samsung Spica (I5700) sous Android 2.1 (Eclair). Un android-phone agréable à utiliser. Une prise en main confortable, mais une web expérience assez mitigée. Samsung semble avoir comblé le bide du Galaxy I7500, son premier mobile sous Android. Mais pour avoir eu des retours de personne ayant utilisés le premier modèle, je suis largement plus optimiste sur le Spica. La taille du téléphone est très bien adaptée pour une prise en main efficace. Il faut tout de même un petit temps d’adaptation pour palier l’absence du clavier physique ; le clavier virtuel, surtout en mode portrait, reste un peu délicat à manipuler ; deux ou trois jours d’utilisation intensive sont nécessaires avant de maîtriser la saisie clavier en toute circonstance. L’expérience phone/gsm est plutôt bonne, je pense que c’est le cas pour tous les smartphones ; un bilan plutôt positif sur ce point. La web expérience doit être partagée en deux partie. D’un côté la partie widget/game et de l’autre la partie navigation internet via le « Browser » d’Android.

Widget/Game expérience

La widget-expérience est très bonne. Après avoir testé une multitude d’applications, toutes m’ont donné une impression positive. De la plus simple à la plus complexe, on est toujours étonné qu’un appareil de cette taille soit si agréable. C’est aussi beaucoup du au travail de google de proposer des composants graphiques très bien élaborés et adaptés à ce genre d’utilisation. En terme de jeux, on peut être très satisfait des capacités 2D du Spica. La 3D (sous OpenGL ES) semble peu performante, mais quelques recherches en ligne laissent croire que Samsung doit fournir des drivers plus performants de sa puce S3C6410. Je vous conseille un bon jeu 2D très prenant Robo Defense de Lupis Labs Software. Il y a en fait beaucoup d’autres jeux mais Robo Defense est celui avec lequel je m’éclate le lus en ce moment… Robo Defense Screenshot

Internet expérience

Comme dit plus haut l’internet-expérience et un peu moins bonne. La taille de l’écran y est pour beaucoup et le peu de site internet optimisé pour les smartphones y contribue énormément à ne pas être à l’aise. On a plus envi de passer sur son portable ou son PC de bureau pour une navigation internet plus aisée. Je n’ai pas eu cette impression sur un Nexus One ou un Iphone 3GS donc je suppose que la gêne vient de la taille de l’écran. Le zoom est accessible grâce à un simple double-click pour avoir une vision adaptée du contenu, mais le scrolling est agaçant.

Conclusion

Quelques regrets…
Pas de version officielle d’Android 2.2 (Froyo), la taille de l’écran un peu petite et peut-être un manque de mémoire interne. Même si on peu installer pas mal d’applications on est tout de même limité. Je pense que l’android-phone de Samsung qui devrait cartonner est le Galaxy S qui est prévu pour septembre 2010 comme étant l’Iphone 4 killer ou concurrent du HTC Evo 4G.

Il faut dire que le Spica reste un très bon rapport qualité/prix dans la gamme moyenne des smartphones.

Android developper
Android developers

Signer une application Android n’est pas bien compliqué. Ces quelques vont vous guider dans la préparation du certificat. Il faut bien entendu avoir une plate forme Android fonctionelle.

mkdir -p ~/.local/share/keystore
cd ~/.local/share/keystore
keytool -genkey -v -keystore android-release-key.keystore -alias mon_alias -keyalg RSA -validity 10000

Il ne vous reste plus qu’à répondre aux questions…

Pour signer une application, le plus simple est d’utiliser ant. Il suffit de renseigner les deux lignes ci-dessous dans le fichier build.properties à la racine de votre projet :

# fichier : build.properties
key.store=/home/christian/.local/share/keystore/android-release-key.keystore
key.alias=mon_alias

Lorsque vous compiler votre projet avec la commande ant, il faut renseigner le ou les mots de passe de votre certificat, puis à la racine du projet tapez :

ant release

Il est aussi possible de réaliser la signature de vos applications à la main, je vous conseille dans ce cas le tutoriel android traitant directement du sujet. il ne reste plus qu’à déployer l’application.

Pour installer votre application sur l’émulateur ou votre device, il faut utiliser l’outil ADB ou passer par Eclipse/ADT.

Logo Android
Logo Android

Pour les développeurs qui n’ont pas encore de mobile Android, il est impossible de tester l’Android Market et ce, même depuis les images pour l’émulateur livré avec le SDK. Avec un peu de ruse il est possible, de jouer avec les applications disponibles depuis le market. Pour ce faire nous allons utiliser les images fournit par HTC sur leur portail dédié aux développeurs.

Je vous conseille de suivre mon article sur la mise en place d’une plate-forme de développement Android sous linux : http://www.kakesa.net/os-design/installer-le-sdk-android-et-eclipse-adt-ubuntu-9-10/139 si vous n’en avez pas encore.

Créer un répertoire temporaire pour stocker l’image du firmware du HTC Dream, par exemple /tmp/android :

mkdir -p /tmp/android
unzip signed-dream_devphone_userdebug-img-14721.zip
chmod a+r *.img

L’image récupéré depuis le site de HTC étant celui d’une version 1.6, créons un avd de la même version et copions-y l’image HTC :

android list target
android create avd -t 3 -n avd1.6
cp /tmp/android/system.img ~/.android/avd/avd1.6.avd/

Lançons l’émulateur :

emulator -avd avd1.6
  1. Cliquez sur le logo Android à l’écran
  2. Suivez le tutoriel ou passez-le
  3. Utilisez votre compte google ou choisissez de le créer
  4. Sélectionnez une application du Market et installez-là

[st transition=wipeh width=600 height=563 quality=best scale=noborder showtext=on fullscreen=off autoplay=on source=full]
android-market-01
android-market-02
android-market-03
android-market-04
android-market-05
android-market-06
[/st]