Forum Génération mobiles
Le Staff et tous les membres de Génération mobiles sont heureux de vous accueillir.

Toutefois, afin de pouvoir en profiter pleinement, il est fortement conseillé de vous inscrire ou de vous identifier

[Question] : Comment modifier le repertoire system/app/systemui.apk sur htc one x

Voir le sujet précédent Voir le sujet suivant Aller en bas

[Question] : Comment modifier le repertoire system/app/systemui.apk sur htc one x

Message par filou80 le Jeu 7 Juin 2012 - 22:17

Voila je veux modifier mes icones reseau et autre sur mon htc one x, je me suis connecter via winscp j'arrive a extraire les images mais quand je veux les remettrres sa me met probleme d'autorisation je modifie mais les autorisation 777 ne sont pas prise en compte je suis novice habituer a apple.
De plus j'arrive a extraire les images via astro avec le tel et les mettres dans mon dossier afin de les avoir sur mon pc.Mais quand j'extraie le repertoire en entier systemui.apk sur mon pc pas moyen de lire le repertoire.
quelqu'un peux me dire comment faire ou me mettre un lien ou tuto merci d'avance de cotre comprehension.



Dernière édition par filou80 le Ven 8 Juin 2012 - 9:34, édité 3 fois
avatar
filou80
Integré

Integré

Appareil principal : Samsung A5
ROMs : Nu 5.0.1
Messages : 217

http://yakasolution.fr

Revenir en haut Aller en bas

Re: [Question] : Comment modifier le repertoire system/app/systemui.apk sur htc one x

Message par colonel59 le Jeu 7 Juin 2012 - 22:34

Bonsoir Filou,

S'il-te-plait, peux-tu ajouter la balise "QUESTION" à ton titre que tu as oublié d'ajouter.

Pour ce faire, tu appuies sur le bouton "Modifier" et tu ajoutes la balise [QUESTION].


Merci par avance.
avatar
colonel59
Surhomme

Surhomme

ROMs : RD-MIUI JellyBean
: : MIUI FR v2.4.13

Messages : 17583

Revenir en haut Aller en bas

Re: [Question] : Comment modifier le repertoire system/app/systemui.apk sur htc one x

Message par Gill le Sam 9 Juin 2012 - 18:07

@filou80: j'ai répondu à ton MP. Wink
avatar
Gill
VIP

VIP

Appareil principal : NOKIA LUMIA 830
ROMs : Stock
Messages : 6610

Revenir en haut Aller en bas

Re: [Question] : Comment modifier le repertoire system/app/systemui.apk sur htc one x

Message par DEDO le Sam 9 Juin 2012 - 18:11

j'imagine que la solution passe d'abord par le root
si on pouvait savoir? Very Happy

DEDO
VIP

VIP

ROMs : Officielle
Messages : 17053

Revenir en haut Aller en bas

Re: [Question] : Comment modifier le repertoire system/app/systemui.apk sur htc one x

Message par Gill le Sam 9 Juin 2012 - 18:42

@DEDO: je lui ai répondu que je ne savais pas faire ce genre de choses, et qu'il pourrait demander à un cuistot. Wink
Le root me parait nécessaire, et peut-être faut-il re-zipaligner avec un outil apktool ou autre. study
avatar
Gill
VIP

VIP

Appareil principal : NOKIA LUMIA 830
ROMs : Stock
Messages : 6610

Revenir en haut Aller en bas

Re: [Question] : Comment modifier le repertoire system/app/systemui.apk sur htc one x

Message par DEDO le Sam 9 Juin 2012 - 19:11

Merki mon Gillou Wink

DEDO
VIP

VIP

ROMs : Officielle
Messages : 17053

Revenir en haut Aller en bas

Re: [Question] : Comment modifier le repertoire system/app/systemui.apk sur htc one x

Message par filou80 le Dim 10 Juin 2012 - 18:41

Je susi novice j'ai suivi le tuto la : http://www.forum-generationmobiles.net/t58838-tuto-preparer-le-htc-one-x-pour-le-debloquer-pour-installer-le-recovery-le-rooter-et-installer-des-roms-customs-windows-26052012 sa a fonctionner la je voudrais personnaliser ma status bar en haut ou il y a l'heure mais je sais pas comment faire j'ai essayer d'installer des barres toutes faite mais sa fonctionne pas sa me met systemui a cesser de fonctionner. De plus j'arrive pas a etre en root apparement cela est important.
Veuillez encore m'excuser je suis novice sur android avant j'étais avec la marque a la pomme ( je regrette pas mon passage sous android)
avatar
filou80
Integré

Integré

Appareil principal : Samsung A5
ROMs : Nu 5.0.1
Messages : 217

http://yakasolution.fr

Revenir en haut Aller en bas

Re: [Question] : Comment modifier le repertoire system/app/systemui.apk sur htc one x

Message par colonel59 le Dim 10 Juin 2012 - 18:52

Re Filou80,

Pourquoi poser la même question que sur l'autre topic alors que je t'ai répondu ?
avatar
colonel59
Surhomme

Surhomme

ROMs : RD-MIUI JellyBean
: : MIUI FR v2.4.13

Messages : 17583

Revenir en haut Aller en bas

Re: [Question] : Comment modifier le repertoire system/app/systemui.apk sur htc one x

Message par VM54 le Dim 10 Juin 2012 - 19:00

j'ai fermé l'autre topic. On continue ici.
avatar
VM54
Modo

Modo

Appareil principal : HTC One M8
ROMs : stock 4.19.118.9 S-Off
Appareil secondaire : HTC One X , HTC HD2, HTC One S
Messages : 12002

http://generationmobiles.net/

Revenir en haut Aller en bas

Re: [Question] : Comment modifier le repertoire system/app/systemui.apk sur htc one x

Message par filou80 le Dim 10 Juin 2012 - 19:21

J'ai reussi a installer super user et titanium backup
avatar
filou80
Integré

Integré

Appareil principal : Samsung A5
ROMs : Nu 5.0.1
Messages : 217

http://yakasolution.fr

Revenir en haut Aller en bas

Re: [Question] : Comment modifier le repertoire system/app/systemui.apk sur htc one x

Message par colonel59 le Dim 10 Juin 2012 - 19:30

Content que tu es réussis Filou80 cheers

N'oublie pas de faire un Backup de ta rom via le Recovery avant de faire quoi que ce soit.

Puis ensuite, essaye de reflasher le Mod pour modifier la status bar.
avatar
colonel59
Surhomme

Surhomme

ROMs : RD-MIUI JellyBean
: : MIUI FR v2.4.13

Messages : 17583

Revenir en haut Aller en bas

Re: [Question] : Comment modifier le repertoire system/app/systemui.apk sur htc one x

Message par DEDO le Dim 10 Juin 2012 - 19:41

Une réponse courte et précise pour modifier un thème Very Happy


Les pré-requis


Un téléphone rooté.
Le JDK (avec le JRE) Java JDK
Le SDK Android SDK ADB vous servira à extraire et remettre les fichiers sur votre téléphone.
7zip outil de décompression 7zip

Pour vous familiariser et être sur que tout fonctionne, il est conseillé de s'entrainer à l'installation avec un thème existant.

Video pour ceux qui auraient des problèmes avec le JDK et les sytèmes en 64bits:



Utilisation de ADB



Avant de démarrer, vous devez "dé-sécuriser" le shell.
Lancez le terminal de commande et tapez.
(Au moment de la commande su, vérifiez qu'on ne vous demande pas les droits root sur le téléphone.)

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

Quand vous avez terminé, pour sécuriser à nouveau le shell, il suffit de faire les mêmes commandes en modifiant la valeur 4755 par 0755.

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

Activez le mode débogage sur votre téléphone.
Connectez votre téléphone au pc.
Lancez le terminal de commande et placez vous dans le dossier ou vous extrairez votre fichier.
(Vous pouvez aussi,en y plaçant le CMD, le lancez directement depuis le dossier concerné )

Tapez.
Code:
adb pull /system/framework/framework-res.apk framework-res.apk

Cela copiera votre "framework-res.apk" du téléphone à votre dossier.
(Faites une sauvegarde de ce fichier dans un autre coin de votre pc au cas ou vous auriez des problèmes)

Une fois les modifications apportées à votre fichier pour le replacer tapez.

Code:
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
Le téléphone redémarre automatiquement.

Modification du thème



Vous aurez besoin de apktool Android-apktoll
draw9patch draw9patch
Le fichier thème Thème.zip
(Dans le dossier "stock" du fichier thème remplacez le "framework-res-apk" par le votre)

Utiliser Drag/Drop pour la mise à jour de vos images.

Méthode à utiliser si ne modifiez pas les images .9.png ou bien si vous n'ajoutez pas d'autres images.

Ouvrir sans extraire l'apk avec 7zip et trouver le répertoire des images (res\drawable-hdpi folder)
Déplacez les images à modifier depuis 7zip vers un répertoire de votre disque dur (laissez 7zip ouvert)
Modifier les images avec votre programme favori.
Déplacez les imagés modifiées vers l'apk (toujours ouvert avec 7zip).
Remettre le framework-res.apk sur votre téléphone en utilisant ADB.

Les fichiers .9.png

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: Normalement vous ne devriez pas toucher à la bordure mais dans le cas contraire un lien vers xda..9.pngs figured out


Editer le Framework

Dans le fichier "thème.zip" vous trouverez 3 batch.

"install_framework.bat"
Ce batch permet à 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 le faites pas vous risquez d'avoir le message "RessourceNotFound error".

"decompile.bat" et "build.bat" servent à décompiler et reconstruire le framework.
Ces fichiers seront à modifier si vous modifiez d'autres apk.

Décompilation et reconstruction.

Lancez "decompile.bat"
Les contenus de l'apk doivent être maintenant dans le dossier "working"
Les images à modifier se trouvent dans le répertoire "res/drawable-hdpi et res/drawable-land-hdpi".

Editez les images que vous voulez.
Pour les images .9.png travaillez sur une copie sans les guides puis recollez la copie au centre de l'image originale.
Vous pouvez modifier ces images sans soucis tant que vous ne touchiez pas au "guide".

Lancez "build.bat"
Cela reconstruit le framework modifié et le place dans le dossier "out".
N'installez pas encore celui ci dans votre téléphone.
Pour terminer utiliser la méthode Drag/Drop pour déplacer les images modifiés et finaliser le framework.

Modifier les fichiers XML et ajouter des ressources



Les fichiers XML dans le framework-res.apk sont compilés dans l'archive ce qui empêche de les éditer sans les décompiler. Le processus est assez simple à condition de prendre des précautions.
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 de l'icône batterie dans la barre de notification pour indiquer le pourcentage par tranche de 1% au lieu de 10%.

Si vous modifiez les fichiers XML ou ajouter des ressources à l'apk, copier toutes les modifications effectuées vers l'apk d'origine après chaque compilation.

Icône de batterie.

Pour décompiler et recompiler vous pouvez utiliser les batch dans le dossier "thème.zip"
Ou avec le terminal de commande.
Décompiler
Code:
java -jar apktool.jar d framework-res.apk framework-res
Recompiler
Code:
java -jar apktool.jar b framework-res out\framework-res.apk

Avec decompile.bat, le framework sera placé dans le répertoire working\framework-res.

Editez le fichier res\drawable\stat_sys_battery.xml
Code:

<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" />
Remplacer tous les items par
Code:

<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'icône de batterie vous devrez créer une image pour chaque pourcentage et les ajouter au répertoire res\drawable_hdpi. Le nom doit correspondre aux noms dans le fichier XML (stat_sys_battery_*.png)
Les images sont disponible ici Super Circle Battery
Recompilez l'apk avec le script build.bat. Un nouveau framework est créé dans le répertoire out\.
N'installez pas encore celui ci dans votre téléphone.
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 en utilisant la méthode Drag/Drop.
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!
Renommer votre framework en framework-res.apk. Vérifier sa taille qui doit faire environ 10 Mo.
Voilà, vous pouvez transférer le framework-res.apk vers votre téléphone.

Le texte de la barre de notification

Le style des éléments graphiques se trouvent (normalement) 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. Mieux vaut faire une recherche sur ce nom.
Cela ressemble à ça

Code:

<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.
La description de ces attributs TextView
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 textColor

En ouvrant le fichier colors.xml vous avez.
Code:

<color name="semc_text_color_primary">#ffffffff</color>
Cela définit la couleur de base du texte, ici en blanc (#ffffff). Changer cette valeur affectera tous les texte de base du téléphone (menu, etc..). Pour changer la couleur dans la barre de notification, mieux vaut ajouter une nouvelle couleur. Pour cela nous dupliquons juste la définition ci dessus en changeant le nom et la couleur:

Code:

<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.
Code:

<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>
Ensuite suivez les instructions données pour l'icône de batterie ci dessus pour recompiler et ajouter le ressources.arsc à votre framework-res.apk.

Modification du service .jar



Les modifications du services.jar ne sont pas souvent nécessaires.
Modifier la couleur de texte de l'horloge est assez simple.
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.

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

1. Extraire le fichier services.jar du téléphone(situé dans /system/framework) en utilisant une des méthodes.
(faites une copie de sauvegarde)
2. Ourvir services.jar avec 7zip.
3. Extraire classes.dex de l'archive
4. Lancez le terminal de commande et tapez.
Code:

java -jar baksmali-1.2.5.jar -o working\services classes.dex
pour décompiler le fichier.

5. Vous avez maintenant un sous répertoire out\services\ avec le classes.dex décompilé (les fichiers smali).
Un guide de référence du smali ICI ou LA

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.
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.
Code:

    .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
Code:

invoke-virtual {v0, v1, v2}, Landroid/content/Context;->obtainStyledAttributes(I[I)
On trouve la définition de la méthode obtainStyledAttributes ici StyledAttributes
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:
Code:

.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

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.
Code:

...
<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:
Code:

 <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.
Code:

....
<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.
Code:

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

Par.
Code:

  .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.
Code:

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.

Régénérez un fichier ressources.arsc (voir méthode) pour que les nouveaux ID soient pris en compte.

Et voilà! Transférer le services.jar puis le framework-res.apk vers votre téléphone (avec la méthode de votre choix). Au redémarrage, la couleur de l'horloge a changé!

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

Si vous avez un problème



Quelques retours d'expérience.
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é)


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.


Pourquoi votre téléphone ne boot 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 fonctionner.
- 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.

Si vous avez installé le recovery
- 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)

DEDO
VIP

VIP

ROMs : Officielle
Messages : 17053

Revenir en haut Aller en bas

Re: [Question] : Comment modifier le repertoire system/app/systemui.apk sur htc one x

Message par gil78 le Dim 10 Juin 2012 - 19:48

courte Mort de Rire
avatar
gil78
Posteur

Posteur

ROMs : One-X Play! v4.0
Messages : 613

Revenir en haut Aller en bas

Re: [Question] : Comment modifier le repertoire system/app/systemui.apk sur htc one x

Message par DEDO le Dim 10 Juin 2012 - 19:51

htc-dev Powaa

DEDO
VIP

VIP

ROMs : Officielle
Messages : 17053

Revenir en haut Aller en bas

Re: [Question] : Comment modifier le repertoire system/app/systemui.apk sur htc one x

Message par gil78 le Dim 10 Juin 2012 - 19:56

Super DEDO
avatar
gil78
Posteur

Posteur

ROMs : One-X Play! v4.0
Messages : 613

Revenir en haut Aller en bas

Re: [Question] : Comment modifier le repertoire system/app/systemui.apk sur htc one x

Message par VM54 le Dim 10 Juin 2012 - 20:07

gil78 a écrit:courte Mort de Rire
mais précise...


avatar
VM54
Modo

Modo

Appareil principal : HTC One M8
ROMs : stock 4.19.118.9 S-Off
Appareil secondaire : HTC One X , HTC HD2, HTC One S
Messages : 12002

http://generationmobiles.net/

Revenir en haut Aller en bas

Re: [Question] : Comment modifier le repertoire system/app/systemui.apk sur htc one x

Message par gil78 le Dim 10 Juin 2012 - 20:12

Oui c'est vrai
avatar
gil78
Posteur

Posteur

ROMs : One-X Play! v4.0
Messages : 613

Revenir en haut Aller en bas

Re: [Question] : Comment modifier le repertoire system/app/systemui.apk sur htc one x

Message par Gill le Dim 10 Juin 2012 - 23:27

Et une leçon de codage, une!
avatar
Gill
VIP

VIP

Appareil principal : NOKIA LUMIA 830
ROMs : Stock
Messages : 6610

Revenir en haut Aller en bas

Re: [Question] : Comment modifier le repertoire system/app/systemui.apk sur htc one x

Message par Fredoah le Lun 3 Déc 2012 - 20:22

Bonjour,
Cette "courte" démonstration s'applique-t-elle à toutes les ROM's ?

Spoiler:
DEDO a écrit:Une réponse courte et précise pour modifier un thème Very Happy


Les pré-requis


Un téléphone rooté.
Le JDK (avec le JRE) Java JDK
Le SDK Android SDK ADB vous servira à extraire et remettre les fichiers sur votre téléphone.
7zip outil de décompression 7zip

Pour vous familiariser et être sur que tout fonctionne, il est conseillé de s'entrainer à l'installation avec un thème existant.

Video pour ceux qui auraient des problèmes avec le JDK et les sytèmes en 64bits:



Utilisation de ADB



Avant de démarrer, vous devez "dé-sécuriser" le shell.
Lancez le terminal de commande et tapez.
(Au moment de la commande su, vérifiez qu'on ne vous demande pas les droits root sur le téléphone.)

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

Quand vous avez terminé, pour sécuriser à nouveau le shell, il suffit de faire les mêmes commandes en modifiant la valeur 4755 par 0755.

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

Activez le mode débogage sur votre téléphone.
Connectez votre téléphone au pc.
Lancez le terminal de commande et placez vous dans le dossier ou vous extrairez votre fichier.
(Vous pouvez aussi,en y plaçant le CMD, le lancez directement depuis le dossier concerné )

Tapez.
Code:
adb pull /system/framework/framework-res.apk framework-res.apk

Cela copiera votre "framework-res.apk" du téléphone à votre dossier.
(Faites une sauvegarde de ce fichier dans un autre coin de votre pc au cas ou vous auriez des problèmes)

Une fois les modifications apportées à votre fichier pour le replacer tapez.

Code:
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
Le téléphone redémarre automatiquement.

Modification du thème



Vous aurez besoin de apktool Android-apktoll
draw9patch draw9patch
Le fichier thème Thème.zip
(Dans le dossier "stock" du fichier thème remplacez le "framework-res-apk" par le votre)

Utiliser Drag/Drop pour la mise à jour de vos images.

Méthode à utiliser si ne modifiez pas les images .9.png ou bien si vous n'ajoutez pas d'autres images.

Ouvrir sans extraire l'apk avec 7zip et trouver le répertoire des images (res\drawable-hdpi folder)
Déplacez les images à modifier depuis 7zip vers un répertoire de votre disque dur (laissez 7zip ouvert)
Modifier les images avec votre programme favori.
Déplacez les imagés modifiées vers l'apk (toujours ouvert avec 7zip).
Remettre le framework-res.apk sur votre téléphone en utilisant ADB.

Les fichiers .9.png

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: Normalement vous ne devriez pas toucher à la bordure mais dans le cas contraire un lien vers xda..9.pngs figured out


Editer le Framework

Dans le fichier "thème.zip" vous trouverez 3 batch.

"install_framework.bat"
Ce batch permet à 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 le faites pas vous risquez d'avoir le message "RessourceNotFound error".

"decompile.bat" et "build.bat" servent à décompiler et reconstruire le framework.
Ces fichiers seront à modifier si vous modifiez d'autres apk.

Décompilation et reconstruction.

Lancez "decompile.bat"
Les contenus de l'apk doivent être maintenant dans le dossier "working"
Les images à modifier se trouvent dans le répertoire "res/drawable-hdpi et res/drawable-land-hdpi".

Editez les images que vous voulez.
Pour les images .9.png travaillez sur une copie sans les guides puis recollez la copie au centre de l'image originale.
Vous pouvez modifier ces images sans soucis tant que vous ne touchiez pas au "guide".

Lancez "build.bat"
Cela reconstruit le framework modifié et le place dans le dossier "out".
N'installez pas encore celui ci dans votre téléphone.
Pour terminer utiliser la méthode Drag/Drop pour déplacer les images modifiés et finaliser le framework.

Modifier les fichiers XML et ajouter des ressources



Les fichiers XML dans le framework-res.apk sont compilés dans l'archive ce qui empêche de les éditer sans les décompiler. Le processus est assez simple à condition de prendre des précautions.
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 de l'icône batterie dans la barre de notification pour indiquer le pourcentage par tranche de 1% au lieu de 10%.

Si vous modifiez les fichiers XML ou ajouter des ressources à l'apk, copier toutes les modifications effectuées vers l'apk d'origine après chaque compilation.

Icône de batterie.

Pour décompiler et recompiler vous pouvez utiliser les batch dans le dossier "thème.zip"
Ou avec le terminal de commande.
Décompiler
Code:
java -jar apktool.jar d framework-res.apk framework-res
Recompiler
Code:
java -jar apktool.jar b framework-res out\framework-res.apk

Avec decompile.bat, le framework sera placé dans le répertoire working\framework-res.

Editez le fichier res\drawable\stat_sys_battery.xml
Code:

<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" />
Remplacer tous les items par
Code:

<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'icône de batterie vous devrez créer une image pour chaque pourcentage et les ajouter au répertoire res\drawable_hdpi. Le nom doit correspondre aux noms dans le fichier XML (stat_sys_battery_*.png)
Les images sont disponible ici Super Circle Battery
Recompilez l'apk avec le script build.bat. Un nouveau framework est créé dans le répertoire out\.
N'installez pas encore celui ci dans votre téléphone.
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 en utilisant la méthode Drag/Drop.
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!
Renommer votre framework en framework-res.apk. Vérifier sa taille qui doit faire environ 10 Mo.
Voilà, vous pouvez transférer le framework-res.apk vers votre téléphone.

Le texte de la barre de notification

Le style des éléments graphiques se trouvent (normalement) 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. Mieux vaut faire une recherche sur ce nom.
Cela ressemble à ça

Code:

<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.
La description de ces attributs TextView
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 textColor

En ouvrant le fichier colors.xml vous avez.
Code:

<color name="semc_text_color_primary">#ffffffff</color>
Cela définit la couleur de base du texte, ici en blanc (#ffffff). Changer cette valeur affectera tous les texte de base du téléphone (menu, etc..). Pour changer la couleur dans la barre de notification, mieux vaut ajouter une nouvelle couleur. Pour cela nous dupliquons juste la définition ci dessus en changeant le nom et la couleur:

Code:

<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.
Code:

<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>
Ensuite suivez les instructions données pour l'icône de batterie ci dessus pour recompiler et ajouter le ressources.arsc à votre framework-res.apk.

Modification du service .jar



Les modifications du services.jar ne sont pas souvent nécessaires.
Modifier la couleur de texte de l'horloge est assez simple.
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.

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

1. Extraire le fichier services.jar du téléphone(situé dans /system/framework) en utilisant une des méthodes.
(faites une copie de sauvegarde)
2. Ourvir services.jar avec 7zip.
3. Extraire classes.dex de l'archive
4. Lancez le terminal de commande et tapez.
Code:

java -jar baksmali-1.2.5.jar -o working\services classes.dex
pour décompiler le fichier.

5. Vous avez maintenant un sous répertoire out\services\ avec le classes.dex décompilé (les fichiers smali).
Un guide de référence du smali ICI ou LA

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.
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.
Code:

    .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
Code:

invoke-virtual {v0, v1, v2}, Landroid/content/Context;->obtainStyledAttributes(I[I)
On trouve la définition de la méthode obtainStyledAttributes ici StyledAttributes
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:
Code:

.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

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.
Code:

...
<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:
Code:

 <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.
Code:

....
<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.
Code:

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

Par.
Code:

  .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.
Code:

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.

Régénérez un fichier ressources.arsc (voir méthode) pour que les nouveaux ID soient pris en compte.

Et voilà! Transférer le services.jar puis le framework-res.apk vers votre téléphone (avec la méthode de votre choix). Au redémarrage, la couleur de l'horloge a changé!

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

Si vous avez un problème



Quelques retours d'expérience.
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é)


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.


Pourquoi votre téléphone ne boot 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 fonctionner.
- 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.

Si vous avez installé le recovery
- 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)
Merci d'avance
avatar
Fredoah
Seigneur

Seigneur

Appareil principal : N9005
ROMs : XXUGBOF1 (5.0)
: : De passage... ::

Messages : 10125

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum