Génération mobiles - Forum smartphones & tablettes
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Génération mobiles - Forum smartphones & tablettesConnexion

Forum Android pour smartphones & tablettes Asus, HTC, Huawei, Honor, LG, Nokia, OnePlus, Samsung, Sony, Xiaomi... Retrouvez applications, astuces, aide, jeux, tutos,...

description[TUTO]  Modifier le framework-res.apk. Modifier des thèmes Empty[TUTO] Modifier le framework-res.apk. Modifier des thèmes

more_horiz

:

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)

SOURCE XDA
SOURCE FrAndroid

description[TUTO]  Modifier le framework-res.apk. Modifier des thèmes EmptyPROGRESSION FULGURANTE

more_horiz
réservé [TUTO]  Modifier le framework-res.apk. Modifier des thèmes 61393

description[TUTO]  Modifier le framework-res.apk. Modifier des thèmes EmptyRe: [TUTO] Modifier le framework-res.apk. Modifier des thèmes

more_horiz
Voilà un joli pavé qui va faire peur à pas mal de monde study

Pour vous rassurer ce tuto est le seul moyen que j'ai en tant qu'utilisateur d'Incredible S d'avoir une barre un peu personnalisée, et ça fonctionne parfaitement bien, c'est assez simple à mettre en pratique, donc n'hésitez pas à vous lancer Wink

ps: au cas où c'est la barre avec le wifi, batterie, barre réseau qu'il faut regarder Wink

[TUTO]  Modifier le framework-res.apk. Modifier des thèmes Snap2050 [TUTO]  Modifier le framework-res.apk. Modifier des thèmes Snap2063
[TUTO]  Modifier le framework-res.apk. Modifier des thèmes Snap2037

description[TUTO]  Modifier le framework-res.apk. Modifier des thèmes EmptyRe: [TUTO] Modifier le framework-res.apk. Modifier des thèmes

more_horiz
oula c'est clair que c'est du pavé de chez pavé affraid
me lancerai pas la dedans [TUTO]  Modifier le framework-res.apk. Modifier des thèmes 812251

description[TUTO]  Modifier le framework-res.apk. Modifier des thèmes EmptyRe: [TUTO] Modifier le framework-res.apk. Modifier des thèmes

more_horiz
OMG, tout ça pour une petite barre :P !!

BRAVO pour le tuto mais ce n'est pas non plus pour moi :P

description[TUTO]  Modifier le framework-res.apk. Modifier des thèmes EmptyRe: [TUTO] Modifier le framework-res.apk. Modifier des thèmes

more_horiz
On reconnait bien là ceux qui n'aiment pas se salir les mains dans le cambouis [TUTO]  Modifier le framework-res.apk. Modifier des thèmes 978827

description[TUTO]  Modifier le framework-res.apk. Modifier des thèmes EmptyRe: [TUTO] Modifier le framework-res.apk. Modifier des thèmes

more_horiz
Même pas peur...

Le seul hic c'est que je ne peux pas installer SDK, il me dit que jdk n'est pas installer alors qu'il est installer...j'ai même suivi le tuto vidéo, pour vérifier et tout est ok ! C'est pas grave je verrai plus tard, il est trop tard là ! ^^

Mais sinon je suis preneur, super tuto!

j'avais pas mis les mains dans le camboui depuis wm6... Ca fait du bien quand même... cheers

description[TUTO]  Modifier le framework-res.apk. Modifier des thèmes EmptyRe: [TUTO] Modifier le framework-res.apk. Modifier des thèmes

more_horiz
c'est avec ce genre de tuto que l'on voit le travail fait par les cuistos!
chapeau bas!
ps :super theme nvidia [TUTO]  Modifier le framework-res.apk. Modifier des thèmes 2325459160

description[TUTO]  Modifier le framework-res.apk. Modifier des thèmes EmptyTransparence de la Statusbar

more_horiz
Comment dois-je procéder pour rendre ma statusbar transparente (et toujours voir mes icones).
J'ai essayé avec UOT kitchen, mais ça ne me donne pas ce que je souhaite.

Si je ne me trompe pas je dois modifier cette image : status_bar_header_background.9.png qui se trouve dans systemUI.apk.

Dois je utiliser Draw-9-patch ou photoshop?

Merci pour la réponse
privacy_tip Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
power_settings_newSe connecter pour répondre