[Tuto] Démystifier les update.zip

Toutes les ressources pour les développeurs et moddeurs.
#1

[Tuto] Démystifier les update.zip

Messagepar jhowlett468 » 08 Mars 2014, 23:39

recovery.png

Image choppée sur Google (recovery pour XPeria Arc, avec quelques retouches de l'image - crédit...Phonandroid, désolé c'était la seule image qui me convenait)

Merci à Gabs de m'avoir donné l'idée du titre ;)



Topic à lire en parallèle avec celui-ci : [Tuto] Quelques explications sur l'updater-script


Un update.zip ou zip flashable çà sert à quoi et comment çà marche ? Le but de ce topic est de répondre à ces questions... Pour pouvoir par la suite bidouiller les votres :mrgreen:
Déjà, çà sert à quoi ? A rajouter des apk manquants (surtout dans la partie système sinon y'a Google Play en règle générale) ou moddés, à changer le modem du téléphone, à fixer une fonction défaillante (GPS...) ou à nettoyer votre téléphone...
Comment çà marche ? Lisez la suite :mrgreen:
Ce topic s'inspire librement de ce topic d'Okaryn, un peu daté car plus mis à jour depuis des lustres (DOMMAGE) : Comment réaliser son update.zip post flash

Pré-requis :
  • s'être documenté dans la section Pour bien débuter sur le forum ou avoir au moins lu mon topic Récap' : De l'inscription au bidouillage
  • avoir lu mon topic Quelques explications sur l'updater-script ou un autre topic équivalent sur un autre site (XDA...) - référez-vous y si vous ne comprenez pas certaines choses dans le code montré dans le topic
  • avoir un PC sous Windows (XP ou 7 chez moi) avec un logiciel de compression / décompression (7zip,WinRAR...) et Notepad++, je ne connais pas les solutions équivalentes sur Mac ou sous Linux (à part faire tourner une VM Windows ou d'utiliser, sur Mac, Windows sur une partition Bootcamp)

Je vais me servir pour ce topic du zip permettant de réinstaller les APK système supprimés sur la ROM TGP v11.30 pour I9305.
A ce zip, j'ai rajouté le flash d'une app utilisateur (celles qui vont dans /data/app) et le vidage de la partition cache et du dalvik cache afin de couvrir un large spectre dans mes explications.Par convention, dans ce topic, un chemin de fichier ne commencant pas par un slash (le "/") concerne un dossier ou un fichier dans le zip (ex. data/app) et un chemin de fichier commencant par un slash (le "/") concerne un dossier ou un fichier dans le téléphone (ex. /data/app).
NI MOI, NI AUCUN AUTRE MEMBRE DU FORUM NE POURRAIT ETRE RESPONSABLE SUITE AU BRICK DE VOTRE TELEPHONE EN CAS DE MAUVAISE MANIP.

VERIFIEZ BIEN QUE LES ZIP QUE VOUS FLASHEZ SONT BIEN PREVUS POUR VOTRE TELEPHONE ET POUR VOTRE ROM.

AVANT DE FLASHER QUOI QUE CE SOIT, PENSEZ A FAIRE UN NANDROID BACKUP.

CONCERNANT LA PROCEDURE DE FLASH D'UN ZIP, REFEREZ AUX TOPICS CONCERNES.

JE N'AI A LA BASE AUCUNE FORMATION EN INFORMATIQUE, J'AI APPRIS SUR LE TAS ET LE GROS DE MES CONNAISSANCES EST EMPIRIQUE... SI CE QUE J'AI ECRIT CONTIENT DES ERREURS, NE M'EN VEUILLEZ PAS ET SIGNALEZ-LES MOI AFIN QUE JE LES CORRIGE... MERCI.


STRUCTURE D'UN ZIP FLASHABLE

Déjà, comment s'organise un zip flashable ? De fichiers à flasher (mais pas toujours par exemple dans le cas d'un zip de nettoyage comme ce zip de nettoyage de mon tél dispo ICI qui purge /cache et le dalvik cache) et de scripts disant au recovery quelles opérations effectuer.
Celui que je vais présenter (dispo ICI) va rajouter des app système (dans /system/app donc) et utilisateur (dans /data/app) et vider la partition cache et le dalvik cache. Quelques captures d'écran dudit zip :

Image

On trouve 3 dossier dans le zip : data (pour l'extraction vers /data), META-INF (qui contient l'updater-script) et system ((pour l'extraction vers /system), j'y reviendrai vite.

Image

Dans META-INF/com/google/android, on trouve l'updater-script et l'update-binary (cf Quelques explications sur l'updater-script). L'emplacement est important...Ne les bougez pas !!!

Image

Image

Quand on ouvre le dossier data, on trouve le dossier data/app et quand on ouvre data/app, on trouve son contenu, ici un apk qui finira dans /data/app (ici Flash Player).
On peut rajouter (ou supprimer) n'importe quel apk dans ce dossier si on veut qu'il aille dans /data/app (la commande correspondante dans l'updater-script gère le dossier dans son intégralité, pas une liste prédéfinie de son contenu). **
Si vous ne voulez rien flasher vers /data/app, supprimez le dossier data et supprimez la commande package_extract_dir("data", "/data"); (pas utile si on ne veut rien flasher dans /data) mais gardez la ligne de montage de /data à cause du wipe dalvik cache ;)

Image

Image

Quand on ouvre le dossier system, on trouve le dossier system/app et quand on ouvre system/app, on trouve son contenu, ici les apk qui finiront dans /system/app
On peut rajouter (ou supprimer) n'importe quel apk dans ce dossier si on veut qu'il aille dans /system/app (la commande correspondante dans l'updater-script gère le dossier dans son intégralité, pas une liste prédéfinie de son contenu). **
Si vous ne voulez rien flasher vers /system/app, supprimez le dossier system et supprimez la commande package_extract_dir("system", "/system"); (pas utile si on ne veut rien flasher dans /system) mais gardez la ligne de montage de /system on sait jamais ;)

Pourquoi cette structure dans les dossiers data et system (data/app et system/app) ? Parce-que ces dossiers reprennent la même structure que les dossiers (partitions) /system (/system/app) et /data (/data/app), ce qui fait que la commande package_extract_dir("data", "/data"); extrait le contenu de data vers /data. Les 2 dossiers ayant la même structure, le contenu du (ou des) dossier(s) de plus bas niveau est copié du 1er vers le 2ème (ici package_extract_dir("data", "/data"); fait que le contenu de data/app est copié vers /data/app). En cas de fichier déjà présent, celui-ci est écrasé.
Pour faire court, la structure des dossiers des fichiers à flasher doit être la même que celle des dossiers équivalents dans le téléphone.

Dans ce zip, si vous ne changez aucune destination, vous pouvez rajouter tous les apk que vous voulez dans data/app ou system/app.Si vous voulez rajouter (ou supprimer) des fichiers ailleurs, il faudra modifier l'updater-script (par exemple si vous rajoutez un dossier sbin pour rajouter un fichier dans /sbin).
Les fichiers présents dans le zip peuvent extraits en utilisant 7zip ou WinRAR (entre autres...) et l'inverse est vrai (on peut rajouter des fichiers au zip via ces programmes).

** : ceci est vrai dans n'importe quel dossier dans le zip. On peut rajouter / supprimer des fichiers / dossiers où on veut du moment qu'on respecte l'arborescence du téléphone et qu'on adapte l'updater-script en fonction (on ne flashe pas un fichier sur une partition non montée, çà marche moins bien).



UPDATER-SCRIPT

Maintenant que la structure est expliquée, passons au code de l'updater-script (code source dispo ICI). Présent dans META-INF/com/google/android, c'est lui qui va dire au recovery quoi faire et surtout quoi faire avec le zip s'il contient des fichiers flashables (ce qui est le cas dans l'exemple, le but principal étant d'installer des apk manquants et de purger /cache et le dalvik cache). Toute modification de l'updater-script doit être faite via Notepad ++ et par aucun autre programme (bloc-notes, Word...)

Code : Tout sélectionner
run_program("/sbin/mount", "/cache");


Montage de la partition cache via la commande busybox "mount" (qui se trouve dans le dossier /sbin à la racine du téléphone)

Code : Tout sélectionner
assert(getprop("ro.product.device") == "m3" || getprop("ro.build.product") == "m3" ||
       getprop("ro.product.device") == "m3xx" || getprop("ro.build.product") == "m3xx" ||
       getprop("ro.product.device") == "i9305" || getprop("ro.build.product") == "i9305" ||
       getprop("ro.product.device") == "GT-I9305" || getprop("ro.build.product") == "GT-I9305");


Vérification par le zip que le téléphone est bien un I9305 (arrêt de la procédure de flash à cette étape si au moins UNE des conditions n'est pas respectée)

Code : Tout sélectionner
show_progress(1.000000, 0);
ui_print(" ");
ui_print("+-----------------------------------------+");
ui_print(" ");
ui_print("      @@@@@@@@@@    @@@@@  @@@@@@@");
ui_print("      @@@@@@@@@#  @@@@@@@  @@@@@@@@+");
ui_print("      @@@@@@@@@+ @@@@@@@@` @@@@@@@@@:");
ui_print("      @@@@@@@@@'.@@@@@@@@. @@@@@@@@@@");
ui_print("      @@@@@@@@@:@@@@@@@@@: @@@@@@@@@@");
ui_print("        .@@@@   @@@@@@@  ` #@@@@  @@@");
ui_print("        `@@@@   @@@@@`     #@@@@ `@@@");
ui_print("         @@@@   @@@@@  #@@;'@@@@ ;@@+");
ui_print("         @@@@   @@@@@  ;@@.'@@@@@@@@");
ui_print("         @@@@   `@@@@` :@@`;@@@@@@;");
ui_print("         @@@@    #@@@@@@@@`:@@@@");
ui_print("         @@@@     :@@@@@@@ .@@@@");
ui_print("                     @@@@:");
ui_print(" ");
ui_print("+-----------------------------------------+");
ui_print(" ");
ui_print("-- Mounting Partitions ...");
set_progress(0.100000);


Défilement de bla bla

Code : Tout sélectionner
unmount("/system");
mount("ext4", "EMMC", "/dev/block/mmcblk0p12", "/cache");
mount("ext4", "EMMC", "/dev/block/mmcblk0p13", "/system");
mount("ext4", "EMMC", "/dev/block/mmcblk0p16", "/data");


Démontage de la partition /system puis montage (dans l'ordre) des partitions /cache /system et /data
Concernant les noms des partitions (mmcblkXpXX), si vous en avez besoin, regardez ce topic

Code : Tout sélectionner
delete_recursive("/cache");
delete_recursive("/data/dalvik-cache");
set_progress(0.300000);


Purge de la partition cache et du dalvik cache par effacement de leur contenu

Code : Tout sélectionner
ui_print("-- Installing Apps ...");


Bla bla : "-- Installing Apps ..."

Code : Tout sélectionner
package_extract_dir("system", "/system");
package_extract_dir("data", "/data");
set_perm_recursive(0, 0, 0755, 0644, "/system/app");
set_perm_recursive(0, 0, 0755, 0644, "/data/app");


Extraction du contenu des dossiers system et data du zip vers les partitions system et data du téléphone (veiller à bien respecter la même arborescence dans le zip que celle qu'on trouve dans le téléphone ---> le contenu data/app s'extrait dans /data/app via la commande package_extract_dir("data", "/data"); )
Attribution des permissions adéquates aux dossiers concernés


Code : Tout sélectionner
set_progress(0.25);
ui_print(" ");
set_progress(0.800000);
ui_print("-- Unmounting Partitions ... ");


Bla bla : "-- Unmounting Partitions ... "

Code : Tout sélectionner
unmount("/system");
unmount("/data");
unmount("/cache");


Démontage (dans l'ordre) des partitions /system /data et /cache (inverse de l'ordre de montage du début du zip)


Code : Tout sélectionner
ui_print(" ");
set_progress(1.000000);
show_progress(1.000000, 0);
ui_print("   Installation Complete ...");
ui_print(" ");
ui_print("+-----------------------------------------+");


Bla bla : " Installation Complete ..."

Installation... Et explications terminés... Est-ce clair pour vous maintenant ?
Ne vous attendez pas à tout comprendre d'un coup... Le meilleur moyen de comprendre le fonctionnement d'un zip flashable, c'est d'en récupérer un qui marche pour votre téléphone ET votre ROM et de modifier les fichiers inclus ainsi que l'updater-script pour voir comment il se comporte ;)
Dernière édition par jhowlett468 le 30 Mars 2014, 00:44, édité 7 fois.
Image
Image
|| Galaxy S5 SM-G900FImage|| Gear Fit ( SM-R350 )
ROM xXx No Limits 6.1 base CQAVImageROM BOA2
Modem CQAW / CSC XEFImage
Kernel stock / recovery TWRP 3.0.2.2
Knox 0x1, garantie finie
Charte du forum
Liens importantsNouveau ?Drivers Samsung 1.5.51 -> Install
Vérifiez votre modèleEn ULTIME recours ? ---> ICI
Rédac' chef du Blog
Téléphone qui bootloope ?
Image
Avatar de l’utilisateur
jhowlett468
Modérateur
Modérateur
 
Message(s) : 9260
Inscription : 16 Août 2011, 20:28
Localisation : Xavier's Intitute for Gifted Youngers, 1407 Graymalkin Lane, Westchester County, NY /// La DZ

#2

Re: Démystifier les update.zip

Messagepar jhowlett468 » 08 Mars 2014, 23:40

CONSEILS

Ayez toujours un nandroid backup sous la main, on ne sait jamais comment un flash tourne même si tout doit se passer comme il faut.

Ne flashez des zips que pour votre modèle de téléphone ET la ROM sous laquelle il tourne. En cas de doute, ne flashez pas.

Ne flashez des zips dont vous ne connaissez pas le comportement ou qui impacte des fonctions clés du téléphone (kernel, modem... ) que si vous avez un nandroid backup et/ou un PC sous la main à dispo (une fois j'ai fait partir mon tél en bootloop au taf : besoin d'être joignable et pas moyen de restaurer mon nandroid backup, j'avais pas la main pour redémarrer en recovery. J'ai du attendre de pouvoir accéder à un PC pour reflasher un kernel.

En cas de bricolage de zip avec extraction de fichiers, vérifiez que les dossiers / partitions cibles ont assez de place pour les recevoir (surtout vrai pour le S1 qui avait un stockage plus que limité - j'ai déjà accidentellement créé une bombe de décompression et là c'est bootloop assuré). En cas de doute, faites du ménage via un script ou à mano.

En cas de flash de ROM, pensez à tout bien sauvegarder, y compris le contenu des SD interne et externe car certains zips de ROMs sont "super wipe" : ils effacent TOUS les stockage présents sur le téléphone.
Dernière édition par jhowlett468 le 13 Mars 2014, 22:05, édité 3 fois.
Image
Image
|| Galaxy S5 SM-G900FImage|| Gear Fit ( SM-R350 )
ROM xXx No Limits 6.1 base CQAVImageROM BOA2
Modem CQAW / CSC XEFImage
Kernel stock / recovery TWRP 3.0.2.2
Knox 0x1, garantie finie
Charte du forum
Liens importantsNouveau ?Drivers Samsung 1.5.51 -> Install
Vérifiez votre modèleEn ULTIME recours ? ---> ICI
Rédac' chef du Blog
Téléphone qui bootloope ?
Image
Avatar de l’utilisateur
jhowlett468
Modérateur
Modérateur
 
Message(s) : 9260
Inscription : 16 Août 2011, 20:28
Localisation : Xavier's Intitute for Gifted Youngers, 1407 Graymalkin Lane, Westchester County, NY /// La DZ

#3

Re: Démystifier les update.zip

Messagepar jhowlett468 » 08 Mars 2014, 23:40

FAQ
Dernière édition par jhowlett468 le 09 Mars 2014, 13:29, édité 1 fois.
Image
Image
|| Galaxy S5 SM-G900FImage|| Gear Fit ( SM-R350 )
ROM xXx No Limits 6.1 base CQAVImageROM BOA2
Modem CQAW / CSC XEFImage
Kernel stock / recovery TWRP 3.0.2.2
Knox 0x1, garantie finie
Charte du forum
Liens importantsNouveau ?Drivers Samsung 1.5.51 -> Install
Vérifiez votre modèleEn ULTIME recours ? ---> ICI
Rédac' chef du Blog
Téléphone qui bootloope ?
Image
Avatar de l’utilisateur
jhowlett468
Modérateur
Modérateur
 
Message(s) : 9260
Inscription : 16 Août 2011, 20:28
Localisation : Xavier's Intitute for Gifted Youngers, 1407 Graymalkin Lane, Westchester County, NY /// La DZ

#4

Re: Démystifier les update.zip

Messagepar jhowlett468 » 08 Mars 2014, 23:42

Variations sur l'update.zip : vrtheme et Aroma

Il existe deux variantes de l'update.zip "classique" : vrtheme et Aroma.

Vrtheme ( Villain Theme System ) permet de flasher des fichiers dans un apk ( PNG, XML... les fichiers sont "injectés" directement dans l'apk ) sans avoir à flasher l'apk entier : on gagne en place ( quelques petits fichiers au lieu d'un gros apk ) et on a un mod plus "universel" ( sous réserve de compatiblité du mod vrtheme avec les apk cibles, surtout pour les fichiers XML qui sont en général des fichiers de config, c'est plus souple pour les fichiers PNG ), là où un mod "classique" doit être mis à jour en cas de changement de ROM ou de simple mise à jour de celle-ci. Ce genre de mod est assez utile donc pour gagner en place ( stockage en local, upload sur un site de stockage en ligne... ) et peut donc être flashé sur plusieurs ROMs différentes ( version différente après mise à jour par exemple ).

Quant à Aroma ( pour Android ROM Manifestation - monpêché mignon ), il permet via une interface graphique tactile d'installer un mod à la carte ( dans la limite de ce que le dev a inclus comme fichiers et comme choix ) : comme sur PC qd on installe un logiciel, à chaque étape on a plusieurs choix ( çà va du kernel au thème en passant par le mod batterie ou le modem... tout est possible, tout est réalisable, c'est le grand jeu de la vie :mrgreen: ). L'intérêt ? Avoir un seul mod pour flasher plusieurs paramètres avec plusieurs choix sans avoir à jongler avec 50 mods séparés.

Aroma et vrtheme peuvent être mixés : les mods GSTeam pour CM et mes mods pour TGP les intègrent conjointement qd celà est possible.

J'aurai bien fait des vrais topics sur ces thèmes mais mes connaissances sont bien trop limitées...

Topic XDA sur vrtheme : ICI
Topic XDA sur Aroma : ICI

Edit topic Aroma de moi-même sur le fofo ICI
Dernière édition par jhowlett468 le 25 Avr 2014, 21:03, édité 3 fois.
Image
Image
|| Galaxy S5 SM-G900FImage|| Gear Fit ( SM-R350 )
ROM xXx No Limits 6.1 base CQAVImageROM BOA2
Modem CQAW / CSC XEFImage
Kernel stock / recovery TWRP 3.0.2.2
Knox 0x1, garantie finie
Charte du forum
Liens importantsNouveau ?Drivers Samsung 1.5.51 -> Install
Vérifiez votre modèleEn ULTIME recours ? ---> ICI
Rédac' chef du Blog
Téléphone qui bootloope ?
Image
Avatar de l’utilisateur
jhowlett468
Modérateur
Modérateur
 
Message(s) : 9260
Inscription : 16 Août 2011, 20:28
Localisation : Xavier's Intitute for Gifted Youngers, 1407 Graymalkin Lane, Westchester County, NY /// La DZ

#5

Re: Démystifier les update.zip

Messagepar edem84 » 09 Mars 2014, 01:36

Ouch!!! Gros boulot, bravo et merci pour ce partage.
Galaxy Note 4 - SM-N910C : MM 6.0.1 N910CXXU2DPI7 / Root : CF-Autoroot
Opérateur : Maroc Telecom
Avatar de l’utilisateur
edem84
Ancien du Staff
Ancien du Staff
 
Message(s) : 4211
Inscription : 08 Sep 2010, 00:47
Localisation : Maroc

#6

Re: Démystifier les update.zip

Messagepar DuD » 09 Mars 2014, 09:40

Super.Merci pour le boulot et le partage ;-)

Envoyé depuis mon Atari 520 ST ;-)
Galaxy Note EDGE ;-)
SM-N915FY
ANDROID 5.1.1 LOLLIPOP
N915FXXU1COI1
Version Kernel 3.10.40-5674927
KNOX : 0X0
-------------------------
-------------------------
-------------------------
Avatar de l’utilisateur
DuD
Ancien du Staff
Ancien du Staff
 
Message(s) : 1647
Inscription : 04 Oct 2013, 11:40

#7

Re: [Tuto] Démystifier les update.zip

Messagepar franck_29 » 10 Mars 2014, 13:16

Merci, dans le blog participatif de la communauté;-)
Pour bien débuter sur le forum : la charte, FAQ, Comment faire ?
Les points essentiels en quelques clics : Notre Blog
Modèle Galaxy S (GT-I9000) | Galaxy S II (GT-I9100) | Galaxy Note II (GT-N7100) | Galaxy Note 3 (SM-N9005)
Firmware CyanogenMod 10.2 | Stock XWLSD | Stock N7100XXUFNE1 | stock XXUDMK2
Modifications ROOT
Réseau B&You
Mon péché mignon développement de l'appli NokyART
Avatar de l’utilisateur
franck_29
Ancien du Staff
Ancien du Staff
 
Message(s) : 9030
Inscription : 20 Juil 2010, 15:31
Localisation : France, Paris, Cléder

#8

Re: [Tuto] Démystifier les update.zip

Messagepar jhowlett468 » 10 Mars 2014, 15:34

franck_29 a écrit:Merci, dans le blog participatif de la communauté;-)


J'ai vu merki ;)
Ainsi que la faute : pas de majuscule après deux points à ma connaissance :lol: :mrgreen:
Image
Image
|| Galaxy S5 SM-G900FImage|| Gear Fit ( SM-R350 )
ROM xXx No Limits 6.1 base CQAVImageROM BOA2
Modem CQAW / CSC XEFImage
Kernel stock / recovery TWRP 3.0.2.2
Knox 0x1, garantie finie
Charte du forum
Liens importantsNouveau ?Drivers Samsung 1.5.51 -> Install
Vérifiez votre modèleEn ULTIME recours ? ---> ICI
Rédac' chef du Blog
Téléphone qui bootloope ?
Image
Avatar de l’utilisateur
jhowlett468
Modérateur
Modérateur
 
Message(s) : 9260
Inscription : 16 Août 2011, 20:28
Localisation : Xavier's Intitute for Gifted Youngers, 1407 Graymalkin Lane, Westchester County, NY /// La DZ

#9

Re: Démystifier les update.zip

Messagepar jhowlett468 » 24 Mars 2014, 00:05

edem84 a écrit:Ouch!!! Gros boulot, bravo et merci pour ce partage.


DuD a écrit:Super.Merci pour le boulot et le partage ;-)


J'avais pas fait gaffe, désolé les gars !!!
Merci :)
Image
Image
|| Galaxy S5 SM-G900FImage|| Gear Fit ( SM-R350 )
ROM xXx No Limits 6.1 base CQAVImageROM BOA2
Modem CQAW / CSC XEFImage
Kernel stock / recovery TWRP 3.0.2.2
Knox 0x1, garantie finie
Charte du forum
Liens importantsNouveau ?Drivers Samsung 1.5.51 -> Install
Vérifiez votre modèleEn ULTIME recours ? ---> ICI
Rédac' chef du Blog
Téléphone qui bootloope ?
Image
Avatar de l’utilisateur
jhowlett468
Modérateur
Modérateur
 
Message(s) : 9260
Inscription : 16 Août 2011, 20:28
Localisation : Xavier's Intitute for Gifted Youngers, 1407 Graymalkin Lane, Westchester County, NY /// La DZ

#10

Re: [Tuto] Démystifier les update.zip

Messagepar jhowlett468 » 27 Mars 2014, 16:35

Pas de questions de bidouilleurs en herbe ?
Personne n'ose se lancer dans le bidouillage de zip ou tout le monde préfère utiliser des solutions "clés en main" ? ;)
Image
Image
|| Galaxy S5 SM-G900FImage|| Gear Fit ( SM-R350 )
ROM xXx No Limits 6.1 base CQAVImageROM BOA2
Modem CQAW / CSC XEFImage
Kernel stock / recovery TWRP 3.0.2.2
Knox 0x1, garantie finie
Charte du forum
Liens importantsNouveau ?Drivers Samsung 1.5.51 -> Install
Vérifiez votre modèleEn ULTIME recours ? ---> ICI
Rédac' chef du Blog
Téléphone qui bootloope ?
Image
Avatar de l’utilisateur
jhowlett468
Modérateur
Modérateur
 
Message(s) : 9260
Inscription : 16 Août 2011, 20:28
Localisation : Xavier's Intitute for Gifted Youngers, 1407 Graymalkin Lane, Westchester County, NY /// La DZ

Suivant

Retour vers Développement : Tutoriels, Astuces, Méthodes et Outils

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité