Aller au contenu

[TUTORIAL] Création/modification de thèmes pour le X10 - màj 17/12/10


Recommended Posts

Ce sujet est une traduction de ce thread sur xda. J'ai essayé de coller au maximum au post original, tout en ajoutant ce qui m'a pu sembler manquant (en Italique). Merci à tous les contributeurs sur Xda : _calum_ (auteur du post original traduit ici) ainsi que XperiaX10iUser, MrRusch, gavriel18, Mr_Element, damnitpud, untemensch, JesusFreke. N'oublions pas Malabarth & Beaugosse sur ce forum ci.

Mes conseils:

- Faites une sauvegarde! Le mieux à mon avis: utiliser le recovery qui permet de sauvegarder le système complet (ici sur Frandroid, ici sur Xda)

- Si après quelques lectures ça ressemble toujours à du chinois... laissez tomber. Commencez par installer un thème existant avant de mettre le souk dans votre téléphone. Mes deux centimes d'anciens Francs ;)

---

Ce sujet a été créé pour rassembler toutes les informations à propos des thèmes pour le X10. C'est en fait un topic avec les éléments de base et les liens pour qu'un nouvel utilisateur puisse trouver toutes les informations nécessaires au même endroit.

Il s'agit d'un sujet amené à évoluer - je mettrai ce sujet à jour au fur et à mesure des mises à jour sur XDA.

Création de thèmes pour le x10:

1. Avant de commencer

2. Utiliser ADB

3. Modification du thème

4. Modification des fichiers XML et ajout de ressources

5. Modification du services.jar

6. Timescape/Mediascape - A venir -

7. Localisation des ressources

8. Thèmes existants

9. En cas de souci

Historique

17/12/2010 - Ajout des sections 7, 8, 9

11/12/2010 - Traduction initiale

Modifié par Bartleby
Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 52
  • Créé
  • Dernière réponse

Top forumeurs sur ce sujet

Avant de commencer...

Avant de commencer à créer un thème vous aurez besoin de quelques pré-requis, dont voici la liste:

  • Un téléphone rooté. Je vous conseille z4root, sinon, jetez un oeil à la liste des tutos.
  • Java SDK (JDK]. Vous aurez besoin d'installer le JDK (incluant la JRE) avant de modifier le contenu d'un thème. Vous pouvez regarder cette vidéo d'un membre de Xda (Chawitts) qui a eu des problèmes avec les systèmes 64bits.
  • ADB (dispo avec le SDK Android). Vous aurez besoin d'ADB pour extraire et déposer les fichiers de et vers votre téléphone.
  • Les drivers du x10. Les drivers sont en général installés quand vous installez SEUS. Cependant vous pourriez devoir l'installer manuellement (notamment sur des machines windows7 en 64bits).
  • 7zip. C'est un outil de (dé)compression (comme Winzip ou Winrar). Utilisez le logiciel que vous voulez, mais je ferai référence à 7zip dans ce sujet.

Pour vous familiariser et s'assurer que tout est en ordre de marche le mieux est d'installer un thème existant, comme le Thème Carbon Blue de Malabarth.

Modifié par Bartleby
Lien vers le commentaire
Partager sur d’autres sites

Avez-vous testé l'installation d'un thème existant? Non? vous devriez ... ;) Bref, voici les étapes suivantes :

L'utilisation d'ADB pour transférer le Framework-res.apk

Vous trouverez un guide sur ADB dans le wiki Frandroid.

Dé-sécuriser le shell

Avant de démarrer, vous devez "dé-sécuriser" le shell. utiliser les commandes ADB suivantes depuis un invite de commande (fenêtre MS-DOS par ex) si ce n'est pas déjà fait.

Au moment de la commande su, vérifiez qu'une fenêtre ne vous demande pas les droits root sur l'écran du téléphone.

adb shell
su
mount -o remount,rw -t yaffs2 /dev/block/mtdblock2 /system
chmod 4755 /system/bin/sh

Pour sécuriser à nouveau le shell, il suffit de faire les mêmes commandes en modifiant la valeur 4755 par 0755. A faire quand vous n'en avez plus besoin, évidemment.

Transfert du framework

Plusieurs solutions:

  • Merci à MrRusch de Xda pour nous faciliter la tâche avec cet outil. Pour ceux qui n'en sont pas familier, merci de lire le guide de ce lien - en anglais, désolé.
  • Beaugosse a publié un tuto sur un utilitaire trouvé sur Xda avec un script pour transférer un framework existant sur le téléphone. Il faudra utiliser une des autres méthodes de ce post si vous voulez récupérer le framework depuis votre téléphone.
  • Ou enfin utiliser les étapes ci-dessous - données dans ce post sur Xda - pour extraire puis remettre le framework de votre téléphone.

Etape 1:

Connecter le téléphone au PC, activer le débogage USB.

Ouvrir un fenetre MS-DOS ou équivalent et vous placer dans un répertoire où vous pourrez stocker les fichiers extraits. Taper :

adb pull /system/framework/framework-res.apk framework-res.apk

Ce qui va copier le framework-res.apk de votre téléphone vers le répertoire courant.

Etape 2:

Dans un explorateur, localiser le fichier framework-res.apk et appliquer les modifications décrites dans les posts suivants.

Etape 4:

Quand les modifications sont terminées, taper les commandes suivantes:

adb shell mount -o remount,rw -t yaffs2 /dev/block/mtdblock2 /system

adb push framework-res.apk /sdcard/framework-res.apk

adb shell dd if=/sdcard/framework-res.apk of=/system/framework/framework-res.apk

Cela va remettre le framework-res.apk sur votre téléphone, qui va rebooter automatiquement. Les modifications sont visibles après le reboot.

Modifié par Bartleby
Lien vers le commentaire
Partager sur d’autres sites

Modification du thème

Maintenant que le framework-res.apk est sur notre disque dur, nous pouvons commencer à créer un thème.

En tout premier lieu, faites une sauvegarde! Faites une copie de ce Framework-res.apk et mettez-làen lieu sûr. Si à cause d'une mauvaise manipulation vous devez être amenés à re-flasher, vous vous remercierez... ;)

Les fichiers .9.png

Avant de commencer jetons un oeil à certaines images "spéciales" d'Android: les fichier .9.png (il s'agit de leur extension).

Ces fichiers sont des images avec des informations supplémentaires incluses. Ces informations décrivent comment les images peuvent être étirées, et où y placer le contenu (par exemple pour un bouton en arrière-plan, quelle espace doit contenir le texte).

Ces information sont contenues dans des bordures d'un pixel (les "guides") autour de l'image et peuvent être ajoutées en utilisant draw9patch. Les guides doivent en fait être compilés avec l'image avant de pouvoir être utilisée.

La bordure: En général, vous n'aurez pas à éditer la bordure des images *.9.png car, pour autant que vous suivez ce tuto, les guidesseront déjà dans les images et vous n'aures pas à les modifier. Si vous avez vraiment besoin de créer les votres (et là, vous ne devriez plus être en train de lire ce tuto ;)), vous pouvez trouver plus d'information ici sur Xda.

L'édition du Framework

Dans cet exemple nous regarderons comment éditer le framework-res.apk. Ceci dit, le processus peut s'appliquer à n'importe quel apk.

Cette méthode peut paraitre un peu lourde pour ceux qui s'y connaissent un peu , mais c'est (à l'avis de _calum_) la plus "sûre" pour ne pas avoir de problèmes (notamment avec les .9.png).

Si vous ne comptez pas modifier les .9.png alors vous pouvez passer l'extraction du framework et aller directement à la partie "Mise à jour des images par Drag'n Drop"

Pré-requis

Vous aurez besoin de:

7zip et apktool (celui-ci est fourni dans le fichier themes.zip)

Certains utilisent Winrar ou Winzip, mais apktool utilise des commandes 7zip donc assurez vous que 7zip soit installé (ce point reste à confirmer...).

Utilitaire d'extraction du framework

Dans le fichier themes.zip (de _calum_) vous trouverez une copie de mon environnement de création de thème. Il n'est pas trop compliqué, il contient juste quelques répertoires, 3 fichiers batch et apktool. Vous pouvez aussi exécuter simplement les commandes dans une fenêtre MS-DOS.

Le premier fichier à regarder est install_framework.bat. Il contient la ligne de commande suivante:

java -jar apktool.jar install-framework stock\framework-res.apk

Ceci permet juste à apktool d'installer le framework sur votre ordinateur. Les ressources du fichier stock\framework-res.apk seront extraites dans un répertoire par défaut. Si vous ne faites pas ceci, vous ne serez pas en mesure de recompiler d'autres apk basées sur le framework (vous obtiendrez une erreur RessourceNotFound). Si vous voulez éditer un autre framework-res.apk, copiez-le simplement dans le répertoire stock\ avant d'exécuter ce batch.

Les autres batch décompilent et reconstruisent le framework, ce sont les fichiers à modifier si jamais vous voulez modifier d'autres apk:

° decompile.bat

java -jar apktool.jar d stock\ framework-res.apk working\ framework-res 

° build.bat

java -jar apktool.jar b working\framework-res out\framework-res.apk

J'ai inclus le framework de base du x10. Si vous utilisez un autre frameworks disponibles et que vous obtenez des erreurs, c'est que les .9.png n'ont pas été correctement mis à jour.

Tant que nous modifions directement le framework nous n'avons pas nécessairement besoin d'exécuter install_framework.bat. Pour d'autres apk (par ex. Phonebook.apk) vous devriez l'exécuter en premier pour éviter des erreurs au moment de décompiler.

Décompiler et reconstruire l'apk :

1. Exécutez decompile.bat. Vous verrez que le répertoire de travail (working/) contient maintenant le contenu extrait de l'apk. Les images que vous devez modifier sont dans les sous répertoires res/drawable-hdpi et res/drawable-land-hdpi. Si vous rouvrez certaines des images .9.png vous verrez les guides autour de l'image.

2. Editez les images. Pour les images .9.png je travaille en général sur une copie sans les guides puis je re-colle la copie au centre de l'image originale. Vous pouvez donc éditer sans problème ces images, tant que vous n'altérez pas les guides.

J'ai créé un utilitaire qui modifie les images d'origine du x10 en supprimant l'arrière-plan et y mettant la couleur de votre choix. Le lien vers cet outil sur Xda.

3. Exécutez build .bat. Ceci compile le framework, avec toutes les images modifiées. Le framework compilé est dans le répertoire out\ . >> NE mettez PAS ce framework directement dans votre téléphone! Il est incomplet et le fichier resources.arsc n'est pas corectement inclus dans l'archive.

Maintenant, vous pouvez simplement extraire les images modifiées du framework généré sur votre disque dur et appliquer les étapes 4 et 5 du paragraphe "Mise à jour des images par Drag'n Drop" ci dessous pour mettre à jour votre framework.

Mise à jour des images par Drag'n Drop

Cette méthode peut s'appliquer directement si vous n'avez pas à modifier les images .9.png ou si vous n'ajouter pas d'images à votre archive .apk.

1. Ouvrir l'apk avec 7zip (ne pas extraire le contenu, juste ouvrir) et aller jusqu'au répertoire des images (en général res\drawable-hdpi)

2. Faites glisser les images à modifier depuis 7zip vers un répertoire de votre disque dur (laissez 7zip ouvert)

3. Editez les images (Photoshop, Gimp, etc...)

4. Faites glisser les images modifiées depuis votre disque dur vers 7zip (dans leur répertoire d'origine)

5. Remettre le framework-res.apk sur votre téléphone en utilisant une des méthodes du post précédent.

Au cours de ces étapes, nous laissons 7zip ouvert car l'apk est signé est ainsi la signature n'est pas altérée.

Je dois admettre ne pas être sûr à 100% de ceci, il est possible que certains aient eu des problème uniquement à cause de fichiers dans compressés dans l'archive alors qu'ils ne devraient pas l'être (plus d'info sur ce point dans la section sur l'ajout de ressources et l'édition des fichiers xml).

Vous pouvez d'ores et déjà commencer à mettre le souk dans le thème de votre téléphone! ;)

Modifié par Bartleby
Lien vers le commentaire
Partager sur d’autres sites

Modifier les fichiers XML et ajouter des ressources

Tout d'abord, merci à MrRusch d'Xda pour avoir signalé que le fichier ressources.arsc était archivé différemment. Ca aurait pu prendre pas mal de flashages pour comprendre comment l'intégrer à l'apk sans son coup de main.

Les fichiers XML dans le framework-res.apk (comme d'autres applications) sont compilés dans l'archive ce qui empêche de les éditer sans les décompiler. Le processus de dé- et re-compilation est assez simple à condition de prendre des précautions si on ajoute des images ou des ressources à l'apk.

L'édition des fichiers XML permet des modifications qui ne seraient pas possibles par de simples modifications des fichiers images. Le meilleur exemple est le changement d'icone de batterie dans la barre de notification pour indiquer le pourcentage précis au lieu des 10%, 20%, etc... (ce sont les modifications décrites ci dessous)

Quand vous modifiez les fichiers xml ou ajouter des ressources à l'apk, assurez-vous de copier TOUTES les modifications effectuées vers l'apk d'origine après chaque compilation. J'ai remarqué des effets de bord si je ne le faisais pas, comme l'affichage des mauvaises images. J'imagine que dans le nouveau fichier ressources.arsc compilé toutes les références d'images sont re-générées.

Icone de batterie:

Voici un guide étape par étape pour modifier l'icone de batterie dans le framework. Pour réaliser cela vous aurez besoin de télécharger - si ce n'est pas encore fait - apktool et installer 7zip.

Pour décompiler/recompiler le framework, vous pouvez utiliser les fichiers batch utilisés au post précédent Mettre le lien ou diretement les commandes en ligne de commande.

  • Décompilez le framework en utilisant decompile.bat. Ceci décompilera le framework dans le répertoire working\framework-res.
  • Vous pouvez maintenant éditer les fichiers XML décompilés, à condition que vous sachiez quoi faire ;).
    Pour notre exemple pour la batterie: dans le fichier res\drawable\stat_sys_battery.xml, remplacer tous les items:
    <item android:drawable="@drawable/stat_sys_battery_0" android:maxLevel="4" />
    <item android:drawable="@drawable/stat_sys_battery_10" android:maxLevel="14" />
    ...
    <item android:drawable="@drawable/stat_sys_battery_100" android:maxLevel="100" />
    


    par

    <item android:drawable="@drawable/stat_sys_battery_0" android:maxLevel="0" />
    <item android:drawable="@drawable/stat_sys_battery_1" android:maxLevel="1" />
    <item android:drawable="@drawable/stat_sys_battery_2" android:maxLevel="2" />
    ...
    <item android:drawable="@drawable/stat_sys_battery_100" android:maxLevel="100" />
    


  • Ajoutez les ressources (fichiers images) nécessaires. Pour l'icone de batterie vous devrez créer une image pour chaque pourcentage (ou les télécharger depuis Xda) et les ajouter au répertoire res\drawable_hdpi. Le nom doit correspondre aux noms dans le fichier XML (stat_sys_battery_*.png)
  • Recompilez l'apk avec le script build.bat. Un nouveau framework est créé dans le répertoire out\.
    IMPORTANT: Ne transférez pas le framework-res.apk vers votre téléphone maintenant! (à moins que vous ne vouliez tout reflasher...?)
  • Extraire les fichiers XML modifiés et les images du framework-res.apk qui vient d'être généré et ajoutez les à l'apk à modifier. (Ouvrez avec 7zip et faites glisser les fichiers vers le framework d'origine, cf la méthode Drag'n drop du post précédent).
  • Extraire le fichier ressources.arsc du framework généré.
  • Renommez votre framework-res.apk à modifier en framework-res.zip
  • Faites clique-droit sur le fichier ressources.arsc et sélectionner 7zip > Ajouter à l'archive
  • Dans la fenêtre qui s'ouvre, sélectionner le framework-res.zip dans le champ Archive. Fixer le format de l'archive à Zip, le niveau de compression à Aucun et cliquez sur OK. Si vous ne réglez pas ces paramètres, votre téléphone ne démarrera pas! Voir aussi la capture d'écran jointe.
  • Renommer votre framework en framework-res.apk. Vérifier sa taille qui doit avoisinner les 10 Mo (si c'est moins, recommencer l'étape précédente).
  • Voilà, vous pouvez transférer le framework-res.apk vers votre téléphone en suivant une des méthodes données plus haut.

Le texte de la barre de notification:

Le style de la plupart (de tous?) les éléments graphiques se trouvent dans res/values/styles.xml. Le fichier XML est visbile uniquement dans le framework décompilé.

Le style du texte de la barre de notification est nommé TextAppearance.StatusBar. Le fichier étant assez gros, mieux vaut faire une recherche sur ce nom. La définition ressemble à ça:

<style name="TextAppearance.StatusBar" parent="@style/TextAppearance">
 <item name="textSize">16.0sp</item> 
 <item name="textStyle">normal</item> 
 <item name="textColor">@color/semc_text_color_primary</item> 
</style>

Vous pouvez facilement modifier la taille et le style du texte en utilisant les éléments textSize et textStyle. Jetez un oeil ici pour une description de ces attributs. Pour les couleurs on utilise @color/... pour faire référence à une ressource définie dans colors.xml. On peut aussi définir directement la couleur en suivant ces indications.

En ouvrant le fichier colors.xml vous trouverez:

<color name="semc_text_color_primary">#ffffffff</color>

qui définit la couleur de base du texte, ici en blanc (#ffffff). Changer cette valer affectera tous les texte de base du téléphone (menu, etc..). Pour changer la couleur dans la barre de notification, mieux vaut cajouter une nouvelle couleur. Pour cela nous dupliquons juste la définition ci dessus en changeant le nom et la couleur:

<color name="semc_text_color_primary">#ffffffff</color>
<color name="semc_text_color_custom">#9900ff00</color>

Il faut ensuite modifier le style pour utiliser cette couleur:

<style name="TextAppearance.StatusBar" parent="@style/TextAppearance">
 <item name="textSize">16.0sp</item> 
 <item name="textStyle">normal</item> 
 <item name="textColor">@color/semc_text_color_custom</item> 
</style>

.

Une fois cette modification faite, suivez les instructions données pour l'icone de batterie ci dessus pour recompiler et ajouter le ressources.arsc à votre framework-res.apk. Il ne reste plus qu'à le transférer vers votre téléphone.

Modifié par Bartleby
Lien vers le commentaire
Partager sur d’autres sites

Modifications du services.jar

Les modifications du services.jar ne sont pas souvent nécessaires. Nous avons déjà vu comment changer la couleur du texte dans la barre de notificaiton et l'icone de batterie. Modifier la couleur de texte de l'horloge est assez simple et c'est ce que nous allons faire maintenant.

En fait, une autre méthode est possible juste en modifiant des xml dans res/layout, mais cela reste un exemple assez simple pour comprendre modifier le services.jar.

Pour modifier le services.jar nous devons décompiler le fichier classes.dex. Pour cela nous utilisons baksmali. Télécharger les 2 jar (baksmali et smali).

1. Extraire le fichier services.jar du téléphone(situé dans /system/framework) en utilisant une des méthodes données dans le post ci dessus. Et gardez-en un copie de sauvegarde!

2. Ourvir services.jar avec 7zip.

3. Extraire classes.dex de l'archive

4. ouvrez une fenetre de commandes (MS-DOS par exemple) et exécuter cette commande pour décompiler le fichier:

java -jar baksmali-1.2.5.jar -o working\services classes.dex

5. Vous avez maintenant un sous répertoire out\services\ avec le classes.dex décompilé (les fichiers smali).

Vous pourrez trouver un guide de référence du smali ici. Cet autre guide est plus complet mais je préfère le premier simplement car il est plus comapct et suffit en général.

Analyse du fichier StatusBarIcon.smali

Tout d'abord, jetons un oeil au fichier suivant com\android\server\status\StatusBarIcon.smali pour comprendre comment la couleur de l'horloge est définie. Une fois décrit la gestion de la coleur de l'horloge nous commenceront les modifications.

J'utilise Visual Studio pour éditer ces fichiers mais vous pouvez utiliser n'importe quel éditeur de texte (PSPad ou Notepad++ par exemple).

si nous regardons la méthode init nous trouvons:

Le contenu peut différer légèrement, pas d'impact pour nous dans ce cas.

    .line 44
   .local v15, textColor:I
   const/4 v13, -0x1

   .line 50
   .local v13, styleIndex:I
   const v18, 0x1030079

   :try_start_1f
   sget-object v19, Lcom/android/internal/R$styleable;->TextAppearance:[i

   move-object/from16 v0, p1

   move/from16 v1, v18

   move-object/from16 v2, v19

   invoke-virtual {v0, v1, v2}, Landroid/content/Context;->obtainStyledAttributes(I[i)Landroid/content/res/TypedArray;

   move-result-object v5

   .line 53
   .local v5, a:Landroid/content/res/TypedArray;
   const/16 v18, 0x0

   move-object v0, v5

   move/from16 v1, v18

   move/from16 v2, v16

   invoke-virtual {v0, v1, v2}, Landroid/content/res/TypedArray;->getDimension(IF)F

   move-result v16

   .line 54
   const/16 v18, 0x3

   move-object v0, v5

   move/from16 v1, v18

   move v2, v15

   invoke-virtual {v0, v1, v2}, Landroid/content/res/TypedArray;->getColor(II)I

   move-result v15

En résumé:

Je suis persuadé que les lignes commençant par un point '.' sont des commentaires du décompileur.

Les lignes .line xx font juste référence au numéro de lignes du code Java. Et je pense que les lignes .local v15, textColor:I font juste référence au nom et au type de la variable v15.

Ce qui nous intéresse en premier lieu est la ligne

invoke-virtual {v0, v1, v2}, Landroid/content/Context;->obtainStyledAttributes(I[i)

On trouve la définition de la méthode obtainStyledAttributes )"]ici.

Il y a des surcharges, mais on appelle ici la méthode qui prend comme paramètres un entier et un tableau d'entiers - ce qui nous est indiqué par (I[i), soit I et [i .

Les trois variables entre accolades au début indiquent respectivement l'objet sur lequel sera appelé la méthode et les 2 paramètres de la méthode.

Le premier paramètre (v1) est un ID de ressource et quelques lignes plus haut, le contenu de la variable v18 y est copié (move/from16 v1, v18). v18 a été déclaré encore quelques lignes plus haut avec la valeur 0x1030079. On retrouve cet ID dans le fichier res/values/public.xml du framework associé au nom d'un style (TextAppearance.StatusBar). On retrouve la définition de ce style dans le fichier res/values/styles.xml

Le résultat de obtainStyledAttributes est copié vers la variable v5 qui est copié vers v0. Celle-ci est utilisée pour appeler Landroid/content/res/TypedArray;->getColor avec les deux paramètres v18 et v15. Le premier paramètre est l'index de la couleur dans le tableau de styles (index 3 dans v5) et le second est la valeur par défaut (noir).

Le résultat de getColor() est alors copié vers v15 et réutilisé à la construction du texte pour l'horloge:

    .line 61
   .local v14, t:Landroid/widget/TextView;
   move-object v0, v14

   move-object/from16 v1, p0

   iput-object v0, v1, Lcom/android/server/status/StatusBarIcon;->mTextView:Landroid/widget/TextView;

   .line 62
   new-instance v11, Landroid/widget/LinearLayout$LayoutParams;

   const/16 v18, -0x2

   const/16 v19, -0x1

   move-object v0, v11

   move/from16 v1, v18

   move/from16 v2, v19

   invoke-direct {v0, v1, v2}, Landroid/widget/LinearLayout$LayoutParams;-><init>(II)V

   .line 65
   .local v11, layoutParams:Landroid/widget/LinearLayout$LayoutParams;
   const/16 v18, 0x0

   move-object v0, v14

   move/from16 v1, v18

   move/from16 v2, v16

   invoke-virtual {v0, v1, v2}, Landroid/widget/TextView;->setTextSize(IF)V

   .line 66
   invoke-virtual {v14, v15}, Landroid/widget/TextView;->setTextColor(I)V

Ainsi nous en déduisons que pour changer uniquement la couleur de l'horloge, nous devons déclarer un nouveau style et utiliser l'ID de ce style au moment d'appeler obtainStyledAttributes.

Modifications à apporter

Passons aux choses sérieuses...!

On ajoute le style TextAppearance.StatusBar.Clock au fichier styles.xml au même endroit que les autres définitions de style de la barre de notification:

...
<style name="TextAppearance.StatusBar" parent="@style/TextAppearance">
 <item name="textSize">16.0sp</item> 
 <item name="textStyle">normal</item> 
 <item name="textColor">@color/semc_text_color_primary</item> 
</style>
<style name="TextAppearance.StatusBar.Clock" parent="@style/TextAppearance">
 <item name="textSize">16.0sp</item> 
 <item name="textStyle">normal</item> 
 <item name="textColor">@color/semc_text_color_clock</item> 
</style>
...

Le nom du nouveau style peut être n'importe quoi, ce qui est important c'est son ID dans public.xml. On y associe soit une couleur déjà définie dans colors.xml, soit comme ici une nouvelle, comme nous l'avons vu dans le post précédent.

Pour un rouge un peu transparent par exemple, ajoutez cette ligne au fichier colors.xml:

    <color name="semc_text_color_clock">#99ff0000</color>

Le style dans public.xml doit avoir un ID commençant par 0x103xxxx. C'est la fourchette d'ID utilisable pour les styles. Les chaines de caractères et les autres ressources ont des fourchettes d'ID différentes. J'ajoute toujours un nouveau style à la fin de la liste des styles pour être sûr d'utiliser le premier ID disponible:

....
<public type="style" name="SEMCTheme.Dialog.Alert.Vanilla" id="0x01030139" />
<public type="style" name="TextAppearance.StatusBar.Clock" id="0x0103013a" />
....

Maintenant que nous avons ajouté un style nous devons juste modifier le code pour l'utiliser. Modifiez ce code :

    .line 50
   .local v13, styleIndex:I
   const v18, 0x1030079

par:

    .line 50
   .local v13, styleIndex:I
   const v18, 0x103013a

Notre nouveau style est maintenant utilisé quand on appelle StyledAttributes. Nous devons recompiler le code smali vers le fichier classes.dex et mettre à jour le services.jar:

Exécutez la commande suivante pour recompiler le smali:

java -jar smali-1.2.5.jar -o out\classes.dex working\services

Le fichier en résultant peut être d'une taille légèrement différente que le fichier classes.dex original, mais tant que vous n'avez pas d'erreurs, c'est bon.

Ouvrez maintenant services.jar avec 7zip et ajouter le nouveau classes.dex à l'archiver en le faisant glisser vers 7zip.

Regénérez un fichier ressources.arsc (voir post prédéent) pour que les nouveaux ID soient pris en compte.

Et voilà! Tranférer le services.jar puis le framework-res.apk vers votre téléphone (avec adb ou la méthode de votre choix). Au rédémarage, la couleur de l'horloge a changé!

Modifié par Bartleby
Lien vers le commentaire
Partager sur d’autres sites

Localisation des ressources

Quelques infos sur les modifications possibles:

Couleur d'arrière plan dans la barre de notification:

Fichiers à modifier dans /res/drawable/ :

- statusbar_background.png

- status_bar_background.png

- status_bar_close_on.9.png

- status_bar_header_background.9.png

- status_bar_item_background_normal.9.png

Fichiers xml

On peut voir sur les images jointes le changement de pas mal de couleurs dans res/values/colors.xml. C'est plutôt moche, mais on voit ce qui peut être changé!

Il reste quelques couleurs que je ne sais pas changer mais j'essaierai de mettre à jour quand j'en saurai plus.

Modifié par Bartleby
Lien vers le commentaire
Partager sur d’autres sites

Themes existants

Voici quelques thèmes existants pour le X10:

2.1:

Carbon Blue par Malabarth

Les thèmes suivants sont sur Xda:

Dark10 par Chewitt

X10 Res Mods par XperiaX10iUser

ElementaL par Mr_Element (en béta pour le moment)

Pitch Black par Shukla

Xdre4m par PoTi_96

PGFX™ Eternity par SEMPITERNAL

Transparent Status Bar Theme par thefunkaygibbon

Stock Android Status Bar par dk2000zx

Enigma by Mobzter

1.6:

Dark10 par Chewitt

Frankendroid par Bazza1976

Enigma par Mobzter

Red Theme par djsystem

Il y en a encore d'autres ici grâce à gavriel18

N'hésitez pas à m'envoyer un MP si vous en connaissez d'aures pour que je les ajoute ici.

Modifié par Bartleby
Lien vers le commentaire
Partager sur d’autres sites

En cas de souci

Ce post regroupe des astuces au cas où votre téléphone ne booterait pas suite à un changement de thème (Si ça ne vous est jamais arrivé, c'est que vous n'avez pas bien essayé! :P )

Dans ce post:

Pour ceux qui ont besoin de reflasher après le téléchargement d'un apk, vous pouvez essayer de ne flasher que le fichier .sin. Votre téléphone va rebooter (en mettant plus de temps que d'habitude) et ainsi vous aurez toujours toutes vos applis. Par contre il faudra re-rooter.

Dans ce post::

Purquoi vous téléphone ne boote pas

- les images ne sont pas correctement stockées, leur format n'est pas le bon, pas la bonne taille, ..

- votre apk n'a pas été correctement décompressée ou recompressée

- vous avez signé l'apk avant de l'envoyer vers le téléphone - à moins que vous ne sachiez exactement ce que vous faites, suivez les instructions de ce topic et ça devrait foncitonner.

- vous avez envoyé l'apk au mauvais endroit

Si le téléphone reste bloqué sur le bootscreen, replacer votre sauveagrde du framework-res.apk sur le téléphone.

Une autre:

Si votre téléphone est bloqué au point qu' aucun logo SE n'apparaît, SEUS peut ne pas suffire pour le récupérer. Dans ce cas, reflashez en 1.6 ou 2.1 generic (en utilisant ce topic par exemple)

Une perso:

Si vous avez installé le recovery (ici sur Frandroid, ici sur Xda) :

- si le téléphone ne boot pas assez pour que vous puissiez accéder à la partition système, lancer le recovery au démarrage, puis sélectionnez Partition tools => Mount /system et Mount /sdcard. A partir de là, vous pourrez renvoyer le framework-res.apk de sauvegarde vers votre téléphone.

- Sinon, vous pouvez toujours restaurer votre sauvegarde (Backup & restore => restore)

Modifié par Bartleby
Lien vers le commentaire
Partager sur d’autres sites

Bon, moi je vais te dire...

Intéressant mais super long.

Moi j'installe un thème en 5 minutes(téléchargement du thème et reboot compris).

Ton tuto est bien mais beaucoup trop long.

Il serait plus rapide d'expliquer comment placer les .apk au bon endroit...

PS : message à ne surtout pas prendre mal, c'est une simple remarque objective.

Lien vers le commentaire
Partager sur d’autres sites

Bravo à toi pour ce tuto.

Très réussi. :)

En revanche, je suis pas d'accord pour le "bidouilleur en herbe".

Ces manipulations sont loin de la bidouille. Même avec mes connaissances et mes précautions, je continue d'avoir recours au flashage et à la réparation système.

À prendre avec des pincettes. ;)

Lien vers le commentaire
Partager sur d’autres sites

Pas de soucis. C'est vrai que c'est (très) long, mais comme je l'ai dit, c'est une traduction du tuto original.

Ce qui m'intéressait dans ce tuto c'est justement de comprendre comment modifier un thème. Et pas juste installer un truc déjà fait.

Bravo à toi ! je te rejoins et c'est fort ce que tu fais continu. (et encore il devrait avoir encore plus de détails)

Eh ouai c'est pas en qielques click que l on créé un theme

Par contre changer un theme A Par un theme B oui c'est rapide si initialement il y a eu un travail qui a été fait pour elaborer le theme B

Lien vers le commentaire
Partager sur d’autres sites

Invité petit noobz

Excellant tuto!!!big_smile.pngComme de quoi il est assez complexe de crée un simple thème !!

Je me lancerais dans la création d'un thème(enfin j’essayeraitongue.png) lundi(enfin les vacances big_smile.png)!!

Merci pour ta traduction de se très long tutosmile.png

Tu a suivi quel procédure Malabarth ?

Modifié par petit noobz
Lien vers le commentaire
Partager sur d’autres sites

  • 2 months later...

Heu j'ai une petite question ^^"

J'ai décompiler mon framework avec décompile.bat puis après j'ai fais mes modifications, puis j'ai fais un build.bat mais il manque une étape avant d'envoyer le framework

Je dis ça parce que de 11Mo il est passé à 5 Mo Oo

Lien vers le commentaire
Partager sur d’autres sites

Bin ouai xD

Mais là bloque pour le recompiler ^^"

sa me parait bizarre avec un framework de 11 Mo qui ressort avec 5 Mo ...

Je le posterais si j'arrive à en faire quelque chose xD

MAJ Sinon je te file mes images et tu me le compile ;PP

Allez c'est pour la communauté hein !!!

Parque je te confirme qu'il n'était pas compressé le framework, d’ailleurs le tel ne démarre plus xD

Modifié par freedent
Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.




×
×
  • Créer...