Avant de brancher le téléphone lister les périphériques USB connectés à votre PC.
Exemple sur ma machine :
jylenhof@portable-jylenhof:~$ lsusb
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 003 Device 002: ID 046d:c03e Logitech, Inc. Premium Optical Wheel Mouse (M-BT58)
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 0408:2fb1 Quanta Computer, Inc.
jylenhof@portable-jylenhof:~$
Branchez votre smartphone sur votre ordinateur, normalement une ligne supplémentaire devrait apparaître (ici en rouge italique gras) :
jylenhof@portable-jylenhof:~$ lsusb
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 003 Device 002: ID 046d:c03e Logitech, Inc. Premium Optical Wheel Mouse (M-BT58)
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 0408:2fb1 Quanta Computer, Inc.
Bus 002 Device 010: ID 0a5c:e681 Broadcom Corp.
jylenhof@portable-jylenhof:~$
Vérifiez que le package « android-tools-adb » est installé sur votre PC Linux, sinon installez le.
Passons maintenant en root sur votre PC (vous pourriez avoir à taper votre password) :
jylenhof@portable-jylenhof:~$ sudo su –
root@portable-jylenhof:~#
Lancez alors la commande « adb devices » pour lister les appareils reconnus par ADB…
root@portable-jylenhof:~# adb devices
List of devices attached
root@portable-jylenhof:~#
Le téléphone n’est pas vu. Pour qu’il soit vu il faut ajouter un fichier /root/.android/adb_usb.ini
root@portable-jylenhof:~# cd .android/
root@portable-jylenhof:~/.android# ls
adbkey adbkey.pub
root@portable-jylenhof:~/.android# vi adb_usb.ini
Le fichier doit contenir la ligne suivante :
0x0a5c
Le téléphone est vu désormais :
root@portable-jylenhof:~/.android# adb kill-server
root@portable-jylenhof:~# adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
0123456789ABCDE device
root@portable-jylenhof:~#
Télécharger le fichier gapps-ics-20120429-signed.zip du site http://goo.im/gapps/gapps-ics-20120317-signed.zip
Le dézipper… dans un répertoire temporaire créé pour l’occasion :
root@portable-jylenhof:/home/jylenhof/Téléchargements# mkdir toto
root@portable-jylenhof:/home/jylenhof/Téléchargements# cd toto/
root@portable-jylenhof:/home/jylenhof/Téléchargements/toto# unzip ../gapps-ics-20120429-signed.zip
Archive: ../gapps-ics-20120429-signed.zip
signed by SignApk
inflating: META-INF/MANIFEST.MF
inflating: META-INF/CERT.SF
inflating: META-INF/CERT.RSA
inflating: META-INF/com/google/android/update-binary
inflating: META-INF/com/google/android/updater-script
inflating: install-optional.sh
inflating: optional/face/addon.d/71-gapps-faceunlock.sh
inflating: optional/face/app/FaceLock.apk
inflating: optional/face/lib/libfacelock_jni.so
inflating: optional/face/vendor/pittpatt/models/detection/multi_pose_face_landmark_detectors.3/left_eye-y0-yi45-p0-pi45-r0-ri20.2d_n2/full_model.bin
inflating: optional/face/vendor/pittpatt/models/detection/multi_pose_face_landmark_detectors.3/left_eye-y0-yi45-p0-pi45-rn7-ri20.2d_n2/full_model.bin
inflating: optional/face/vendor/pittpatt/models/detection/multi_pose_face_landmark_detectors.3/left_eye-y0-yi45-p0-pi45-rp7-ri20.2d_n2/full_model.bin
inflating: optional/face/vendor/pittpatt/models/detection/multi_pose_face_landmark_detectors.3/nose_base-y0-yi45-p0-pi45-r0-ri20.2d_n2/full_model.bin
inflating: optional/face/vendor/pittpatt/models/detection/multi_pose_face_landmark_detectors.3/nose_base-y0-yi45-p0-pi45-rn7-ri20.2d_n2/full_model.bin
inflating: optional/face/vendor/pittpatt/models/detection/multi_pose_face_landmark_detectors.3/nose_base-y0-yi45-p0-pi45-rp7-ri20.2d_n2/full_model.bin
inflating: optional/face/vendor/pittpatt/models/detection/multi_pose_face_landmark_detectors.3/right_eye-y0-yi45-p0-pi45-r0-ri20.2d_n2/full_model.bin
inflating: optional/face/vendor/pittpatt/models/detection/multi_pose_face_landmark_detectors.3/right_eye-y0-yi45-p0-pi45-rn7-ri20.2d_n2/full_model.bin
inflating: optional/face/vendor/pittpatt/models/detection/multi_pose_face_landmark_detectors.3/right_eye-y0-yi45-p0-pi45-rp7-ri20.2d_n2/full_model.bin
inflating: optional/face/vendor/pittpatt/models/detection/yaw_roll_face_detectors.3/head-y0-yi45-p0-pi45-r0-ri30.4a/full_model.bin
inflating: optional/face/vendor/pittpatt/models/detection/yaw_roll_face_detectors.3/head-y0-yi45-p0-pi45-rn30-ri30.5/full_model.bin
inflating: optional/face/vendor/pittpatt/models/detection/yaw_roll_face_detectors.3/head-y0-yi45-p0-pi45-rp30-ri30.5/full_model.bin
inflating: optional/face/vendor/pittpatt/models/recognition/face.face.y0-y0-22-b-N/full_model.bin
inflating: optional/noneon/lib/libfacelock_jni.so
inflating: optional/noneon/lib/libflint_engine_jni_api.so
inflating: optional/noneon/lib/libfrsdk.so
inflating: optional/noneon/lib/libgcomm_jni.so
inflating: optional/noneon/lib/libpicowrapper.so
inflating: optional/noneon/lib/libspeexwrapper.so
inflating: optional/noneon/lib/libvideochat_jni.so
inflating: optional/noneon/lib/libvideochat_stabilize.so
inflating: optional/noneon/lib/libvoicesearch.so
inflating: system/addon.d/70-gapps.sh
inflating: system/app/ChromeBookmarksSyncAdapter.apk
inflating: system/app/GalleryGoogle.apk
inflating: system/app/GenieWidget.apk
inflating: system/app/GoogleBackupTransport.apk
inflating: system/app/GoogleCalendarSyncAdapter.apk
inflating: system/app/GoogleContactsSyncAdapter.apk
inflating: system/app/GoogleFeedback.apk
inflating: system/app/GoogleLoginService.apk
inflating: system/app/GooglePartnerSetup.apk
inflating: system/app/GoogleQuickSearchBox.apk
inflating: system/app/GoogleServicesFramework.apk
inflating: system/app/GoogleTTS.apk
inflating: system/app/MarketUpdater.apk
inflating: system/app/MediaUploader.apk
inflating: system/app/NetworkLocation.apk
inflating: system/app/OneTimeInitializer.apk
inflating: system/app/Phonesky.apk
inflating: system/app/SetupWizard.apk
inflating: system/app/Talk.apk
inflating: system/app/VoiceSearch.apk
inflating: system/etc/g.prop
inflating: system/etc/permissions/com.google.android.maps.xml
inflating: system/etc/permissions/com.google.android.media.effects.xml
inflating: system/etc/permissions/com.google.widevine.software.drm.xml
inflating: system/etc/permissions/features.xml
inflating: system/framework/com.google.android.maps.jar
inflating: system/framework/com.google.android.media.effects.jar
inflating: system/framework/com.google.widevine.software.drm.jar
inflating: system/lib/libfilterpack_facedetect.so
inflating: system/lib/libflint_engine_jni_api.so
inflating: system/lib/libfrsdk.so
inflating: system/lib/libgcomm_jni.so
inflating: system/lib/libpicowrapper.so
inflating: system/lib/libspeexwrapper.so
inflating: system/lib/libvideochat_jni.so
inflating: system/lib/libvideochat_stabilize.so
inflating: system/lib/libvoicesearch.so
inflating: system/tts/lang_pico/de-DE_gl0_sg.bin
inflating: system/tts/lang_pico/de-DE_ta.bin
inflating: system/tts/lang_pico/es-ES_ta.bin
inflating: system/tts/lang_pico/es-ES_zl0_sg.bin
inflating: system/tts/lang_pico/fr-FR_nk0_sg.bin
inflating: system/tts/lang_pico/fr-FR_ta.bin
inflating: system/tts/lang_pico/it-IT_cm0_sg.bin
inflating: system/tts/lang_pico/it-IT_ta.bin
root@portable-jylenhof:/home/jylenhof/Téléchargements/toto#
Les apk installables sont alors visibles :
root@portable-jylenhof:/home/jylenhof/Téléchargements/toto/system/app# ls
ChromeBookmarksSyncAdapter.apk GoogleServicesFramework.apk
GalleryGoogle.apk GoogleTTS.apk
GenieWidget.apk MarketUpdater.apk
GoogleBackupTransport.apk MediaUploader.apk
GoogleCalendarSyncAdapter.apk NetworkLocation.apk
GoogleContactsSyncAdapter.apk OneTimeInitializer.apk
GoogleFeedback.apk Phonesky.apk
GoogleLoginService.apk SetupWizard.apk
GooglePartnerSetup.apk Talk.apk
GoogleQuickSearchBox.apk VoiceSearch.apk
root@portable-jylenhof:/home/jylenhof/Téléchargements/toto/system/app#
Poussez les packages sur le téléphone portable :
root@portable-jylenhof:/home/jylenhof/Téléchargements/toto# adb push system/app/ /data/local/tmp/
push: system/app/GoogleFeedback.apk -> /data/local/tmp/GoogleFeedback.apk
push: system/app/VoiceSearch.apk -> /data/local/tmp/VoiceSearch.apk
push: system/app/GalleryGoogle.apk -> /data/local/tmp/GalleryGoogle.apk
push: system/app/MediaUploader.apk -> /data/local/tmp/MediaUploader.apk
push: system/app/GenieWidget.apk -> /data/local/tmp/GenieWidget.apk
push: system/app/SetupWizard.apk -> /data/local/tmp/SetupWizard.apk
push: system/app/ChromeBookmarksSyncAdapter.apk -> /data/local/tmp/ChromeBookmarksSyncAdapter.apk
push: system/app/GoogleQuickSearchBox.apk -> /data/local/tmp/GoogleQuickSearchBox.apk
push: system/app/GoogleTTS.apk -> /data/local/tmp/GoogleTTS.apk
push: system/app/OneTimeInitializer.apk -> /data/local/tmp/OneTimeInitializer.apk
push: system/app/NetworkLocation.apk -> /data/local/tmp/NetworkLocation.apk
push: system/app/GoogleLoginService.apk -> /data/local/tmp/GoogleLoginService.apk
push: system/app/Talk.apk -> /data/local/tmp/Talk.apk
push: system/app/GoogleCalendarSyncAdapter.apk -> /data/local/tmp/GoogleCalendarSyncAdapter.apk
push: system/app/GoogleContactsSyncAdapter.apk -> /data/local/tmp/GoogleContactsSyncAdapter.apk
push: system/app/Phonesky.apk -> /data/local/tmp/Phonesky.apk
push: system/app/GoogleServicesFramework.apk -> /data/local/tmp/GoogleServicesFramework.apk
push: system/app/GoogleBackupTransport.apk -> /data/local/tmp/GoogleBackupTransport.apk
push: system/app/GooglePartnerSetup.apk -> /data/local/tmp/GooglePartnerSetup.apk
push: system/app/MarketUpdater.apk -> /data/local/tmp/MarketUpdater.apk
20 files pushed. 0 files skipped.
3285 KB/s (23496313 bytes in 6.983s)
root@portable-jylenhof:/home/jylenhof/Téléchargements/toto#
Et il suffit juste d’une commande pour passer root sur le téléphone (et oui sans rootage nécessaire)
root@portable-jylenhof:/home/jylenhof/Téléchargements/toto# adb root
restarting adbd as root
root@portable-jylenhof:/home/jylenhof/Téléchargements/toto# adb shell
root@android:/ #
Pour le vérifier il suffit de faire un « id » :
root@android:/ # id
uid=0(root) gid=0(root)
root@android:/ # ls /
acct
cache
config
d
data
default.prop
dev
etc
init
init.common.rc
init.goldfish.rc
init.log.rc
init.rc
init.rheastone.rc
init.rheastone_base.rc
init.usb.rc
mnt
proc
root
sbin
sdcard
sys
system
ueventd.goldfish.rc
ueventd.rc
ueventd.rheastone.rc
vendor
Maintenant déplaçons les fichiers apk au bon endroit :
root@android:/ # mount -o remount,rw /system
root@android:/ # busybox cp /data/local/tmp/*.apk /system/app
root@android:/system/app # exit
root@portable-jylenhof:/home/jylenhof/Téléchargements/toto#
Et ensuite rebootez votre téléphone… il devrait installer de lui même les Google Apps