wiki android par frandroid

Créer un thème pour Android

De FrAndroid - Android docs.

Vous aussi vous êtes impressionné par les jolies thèmes des roms de cyano, vous aussi vous tournez sur une rom android sans rosy/sense... mais vous ne savez pas comment vous y prendre? Alors, je vais vous expliquer

Par Dagda-Esus, Malgon

Sommaire

Suivez le guide

Pour commencer, je vais décomposé le tuto en deux parties... la partie simple (qui vous permettra de faire 80% du thème si vous faites un thème foncé (mais 100% des thèmes claires ) : Il s'agit de la modification des images du thème Puis en second, je vais vous parlé du plus dur : la modification des couleurs des textes Pensez bien a bien lire le tuto avant de commencer a faire n'importe quoi

La partie facile

Pensez à garder un milieu de travail PROPRE

Non je ne vous parle pas de nettoyé votre bureau, de faire la poussière et de virer la bouteille de coca ou le vieux paquet de tuc a moitié entamé mais bien de penser a travailler proprement, se faire un dossier "source" a part, où vous stockerez vos images et un dossier "ThemeMOD" (par exemple) où vous modifierez vos apk et quand vous aurez fini, vous virerez l'inutile pour le transformer en update.zip. Ne pas travailler directement sur la ROM pour laquelle vous faites le thème. Et gardez votre dossier source organisé, avec une arborescence identique a celle d'une rom (c'est le plus simple même si ça oblige a faire de nombreux clics)


Changer des images dans un fichier APK

Extraire le fichier APK

Il faut déjà savoir qu'un fichier APK n est rien d'autre qu'un simple fichier ZIP. Pensez a extraire l'apk dans un dossier a son nom, comme vous le feriez pour n'importe quelle archive.

Importer les images dans le dossier extrait

Voici l'étape fondamentale pour faire un thème : le remplacement des images (qui bien-sur ne peut pas se faire directement, d'où l'étape d'avant et l'étape suivante ) Alors là c'est encore aussi simple... il suffit de faire un copier coller des images préalablement choisies dans le dossier de l'apk extrait. Si vous voulez modifier des images, c'est possible aussi, il suffit de sortir gimp et de modifier les images avec, et hop le tour est joué

Refaire le fichier apk a partir du dossier modifié

Alors là c'est le plus dur Vous reprenez un logiciel telque 7zip, et vous compressez le dossier en .zip (bien-sur la méthode de compression optimale est la meilleure puisque la place est limitée sur le téléphone ^^) et renommez le .zip en .apk

Téléchargez ceci et :

  • extrayez le zip que je viens de vous faire téléchargé à la racine de votre dossier de travail
  • lancez un invit de commande, et déplacez vous dans ce dossier
  • vous tapez :
java -jar signapk.jar testkey.x509.pem testkey.pk8 '''nom_de_votre_zip_sans_espace'''.zip '''nom_de_votre_apk_maintenant_signee'''.zip


et vous avez maintenant votre bel apk modifié... mais a quoi cela sert-il? Qu'en fait on maintenant ? et d'ailleurs c'est bien beau tout ça mais qu'est ce que je modifie moi? c'est trop abstrait ça !

Les différents fichiers à modifier

bien-sur, je ne vais pas vous faire une liste exhaustive de tous les fichiers et ce qu'ils font, ce serait trop long, découvrez tout cela par vous même ! mais pour simplifier, il y a deux composants principaux dans une rom (du point de vu thème !) :

  • framework-res.apk
  • launcher.apk

Voici a peu près les fichiers que j'ai identifié là dedans

Dans le framework

Adresse : /framework-res/res/drawable/ :

  • la barre de notification : statusbar_background.png
  • la barre qu'on fait glissé pour voir les notifications : status_bar_close_on.9.png
  • le wallpaper par défaut : default_wallpaper.jpg
  • divers boutons : tout se qui commence par "btn_" (les miniatures suffisent à trouvé lequel c'est
  • les emoticones : tout se qui commence par "emo_im"
  • les icones dans les barres de menu : "ic_menu_"
  • le fond des pop up (donc pour modifié le lockscreen et toutes les autres fenêtres d'information) :
  • popup_full_dark.9.png
  • popup_top_dark.9.png
  • popup_center_dark.9.png
  • popup_bottom_dark.9.png
  • les icones dans la barre de notification : tout se qui commence par : "stat_"
  • les icones en général : "ic_"


Dans le launcher

Adresse : /launcher/res/drawable

  • fonds d'écran : "wallpaper_"
  • les miniatures des wallpaper : "wallpaper_[...]_small.jpg"
  • le fond du launcher : "pattern_carbon_fiber_dark.png"

Adresse : /launcher/res/drawable-port/ et /launcher/res/drawable-land

  • l'icone du launcher a l'état normal : tray_handle_normal.png
  • l'icone du launcher quand il est sélectionné (avec le trackpad en général) : tray_handle_selected.png
  • l'icone du launcher quand vos mettez votre doigt dessus ou que vous appuyé sur le trackpad après l'avoir sélectionné : tray_handle_pressed.png
  • la barre du launcher quand vous supprimé une icone du bureau, que vous la déplacé ou que vous y mettiez une : delete_handle.png et delete_handle_normal.png
  • l'image sur la barre du launcher : "ic_" (en fonction des situations)
  • le fond du widget de recherche : "search_bg.9.png"

Attention aux images .9.png En effet pour pouvoir remplacer une de ces images il vous faut parfois les passer dans eclipse, un tuto est disponible sur XDA


On aime ou on n'aime pas... là n'est pas la question mais là on voit que l'on peut modifié vraiment déjà tout android, on a plu de limites Bien-sur, là les widget ont été modifié, et les icônes aussi mais ça, ça se passe dans les dossiers apk des applications pour les icônes (pour les Widgets inclut de base, ça se passe dans settings et music)

Reconstruire notre Rom

Pour reconstruire votre ROM, il suffit simplement de la compresser au format ZIP , puis de signer le fichier obtenu

Structure simple pour mettre à jour les fichiers modifiés

Pour créer un fichier update.zip, nous devons avoir deux répertoires en racine : un répertoire "system" et un ensemble de répertoire sous-répertoire : "META-INF\com\google\android"

Dans le répertoire "system", créez deux répertoire, un dossier "app", contenant les applications APK que vous avez modifiez, et un répertoire "framework", contenant le fichier "framework-res.apk" et le fichier "services.jar" que vous avez créé.

Dans le répertoire "android" (situé dans "META-INF\com\google\»), créez un fichier "update-script" (SANS EXTENSION), et ajoutez y ceci :

copy_dir PACKAGE:system SYSTEM:

Cette commande est se que va faire votre téléphone lorsque vous lui direz "apply update.zip", votre téléphone va simplement copier le contenu du répertoire system de votre fichier update.zip que vous avez créer et le placé dans la partition system du téléphone.

Compressez les répertoires "META-INF" et "system" dans un fichier zip nommer update.zip

Puis vous le signez avec ceci pour cela :

  • extrayez le zip que je viens de vous faire télécharger à la racine de votre dossier de travail
  • lancez un invit de commande
  • tapez :
java -jar signapk.jar testkey.x509.pem testkey.pk8 '''update'''.zip '''update_signee'''.zip


Les couleurs des textes et de l'horloge !

Par zakari

Matériel

Avoir installé le SDK et Eclipse, avoir la machine Java installée sur son système, puis :


Editer les fichiers XML

Il est impossible de lire un fichier XML contenu dans les APK Android, pour cela il faut l'ouvrir avec un éditeur hexadécimal. Un tuto sur XDA est disponible pour "décrypter" ce fichier : forum XDA

Pour ce qui nous intéresse ce sont juste de trouver les couleurs : La seul que je modifie pour le moment (et dont je sois sûr), c'est pour la couleur des notifications. Pour la changer, éditez le fichier "/framework/framework-res.apk/res/layout/status_bar.xml" avec un éditeur hexadécimal, recherchez la valeur hexadécimal "00 00 1C" remplacer les 6 caractères suivant par une valeur de couleur en hexadécimal (Disponibles ICI)

Editer un fichier .dex :

C'est ici que les choses ce compliques Pour changer la couleur de l'horloge et de la date dans la barre de notifications il faut éditer le fichier "/framework/services.jar" Pour cela, ouvrir le fichier services.jar avec votre outil de décompression (ATTENTION L'OUVRIR PAS LE DECOMPRESSER). Extraire le fichier Class.dex dans un répertoire contenant les fichiers Smali.jar et BakSmali.jar (il est conseiller de le faire dans le répertoire Tools du SDK). Ouvrir une invite de commande MS-DOS (ou linux) depuis ce répertoire (touche Shift+clic droit pour avoir l invite de commande ouverte dans le répertoire courant sous windows). Taper la commande suivant :

java -jar baksmali.jar -o classout/ classes.dex

Un nouveau répertoire va être créé, "classout", allez dans : "classout/com/android/server/status".


Pour éditer la couleur de l horloge

Avec Notepad++ éditez le fichier "StatusBarIcon.smali". Recherchez "setTextColor", vous trouverez à peu prés ca :

const/high16 v6, -0x100
invoke-virtual {v4, v6}, Landroid/widget/TextView;->setTextColor(I)V

La ligne "const/high16 v6, -0x100" correspond a la couleur noir, pour l avoir en blanc, remplacez la par "const v6, -0x1" Enregistrez la modification et quittez l'éditeur.


Pour éditer la couleur de la date dans la barre de notification

Avec Notepad++, éditez le fichier "StatusBarService.smali" Recherchez "mDateView:Lcom/Android/server/status/DateView", vous devez trouverez ceci :

iput-object v7, p0, Lcom/android/server/status/StatusBarService;->mDateView:Lcom/android/server/status/DateView;

Remplacez le par :

iput-object v7, p0, Lcom/android/server/status/StatusBarService;->mDateView:Lcom/android/server/status/DateView; 
const v8, 0xffffffff 
    
invoke-virtual {v7, v8}, Landroid/widget/TextView;->setTextColor(I)V

Voila nous avons fini d'éditer les fichiers contenus dans le fichier class.dex

Rendons lui sa vrai forme : Toujours dans notre console (située dans le répertoire du fichier Baksmali.jar et du dossier classout) tapez la commande suivante :

java -Xmx512M -jar smali.jar classout/ -o new-classes.dex

Vous obtenez un fichier new-class.dex . Renommez-le en class.dex (prenez soin de supprimer celui qui vous a permis d'extraire le répertoire classout/ précédemment) Dans votre utilitaire de décompression (toujours ouvert depuis le début de cette modification sur le fichier services.jar) supprimez le fichier class.dex et ajoutez le nouveau class.dex, fermez votre utilitaire de décompression.

Voila nous avons modifié la couleur de l horloge et de la date dans la barre de notification !