Bonjour tout le monde, je vais créer plusieurs tutos au fur et à mesure pour tous : Comment créer une ROM ? Comment porter une ROM ?
Chaque chose en son temps, j'ai créer S3nsation (oui, j'ai stopper le développement parce qu'il y'a de meilleure ROM dispo mais je vais bientôt m'y remettre
) pour commencer dans le développement, j'ai finalement réussi, puis y'en a plein qui aimerais savoir donc je fais ce petit tuto ![]()
_____________________________________________________________________________________
CHAPITRE 1 : Se baser sur un firmware officiel
On peut aussi se baser sur une ROM déjà prête mais bon c'est pas intéressant ![]()
Premièrement, RDV sur SamFirmware, pour choisir un ... (le premier qui me dit ROM je lui paye un iFoufoune !) firmware biensur ...
Pour la S3nsation, je me suis basé sur la dernière en date : S5830XWKTM 2.3.6
Mais vous pouvez prendre n'importe lequel
Téléchargez le donc ...
CHAPITRE 2 : Décompresser le firmware
Décompresser le, vous allez vous retrouvez nez à nez avec un fichier .tar.md5 un truc comme ça
pas de pitié, décompressez le aussi
Dans votre dossier, vous devrez avoir des trucs chelous : boot.img, recovery.img ect ...
Télécharger MagicISO pour pouvoir poursuivre ...
Une fois que c'est fait (bravo, tu veux un gâteau ?!), ouvrez le et cliquez sur try it
Vous naviguez dans le dossier où vous avez extrait le firmware, "type de fichier : tout les fichiers"
On a besoin que de récupérer system.rfs, vous le sélectionnez, et la ... impression de déjà vu : app, framework, media, lib, ect ... mais biensur ! c'est /system !
Allez hop, pas de temps pour l'admiration, on a du pain du la planche (bande de branleur ...)
On extrait tout dans un nouveau dossier qui sera alors le fichier de votre ROM (donc admettons que clad veuille créer une ROM, et qu'il veut la nommer CladROM, il va créer un dossier nommé CladROM : son environnement de travail, dans lequel il va recréer un fichier qui s'appellera CladROM_build, qui contiendra la ROM.)
Et ensuite, revenez dans magicISO, et ouvrez cette fois ci CSC.rfs, puis recovery, puis sec.csc.zip
Vous obtenez ... ouahou ! META-INF qui contient le script de flashage (donc pas touche manouche ! ), app (que vous pouvez supprimer car il ne sert à rien, sauf pour les ROMs opérateurs), lib (lui aussi vide donc ==> delete, CSC (celui là on garde) au même titre que T9DB, ansi que CSCVersion et SWconfig : mettez le dans votre fichier de la ROM.
CHAPITRE 3 : DEODEXER LE FIRMWARE
Dans 100% des cas (oui c'est injuste), vous avez dans votre /system/app, plein de petit fichiers en .odex, c'est normal, ces petits fichiers font en sorte d'accelerer le démarrage des applications et du telephone, mais on ne peut rien ajouter, ni modifier (c'est embêtant ... it's agacing...
) donc on va devoir faire le sale travail !
IL VOUS FAUT :
-xUltimate
-ADB + SDK (alors j'espère que vous êtes en vacance car c'est long à installer...)
-votre "ROM"
-votre cerveau aussi (Ah bon ?! Oui.)
Mr Clad veut déodexer sa ROM (on l'encourage tous, car c'est chiant quand il y'a un problème ...)
dézipper xUltimate dans votre environnement de travail, créez un dossier "développements" et mettez le ici.
Dans xUltimate, il faut couper les fichiers de votre "ROM" /system/app et /system/framework et les coller dans origi_app et origi_framework.
Maintenant, concentration ... lancer main.exe, une console s'affiche, sélectionner l'option 3 et 4
patientez ... patientez ...
Si tout ce passe bien, un fichier done_app et done_frame devraient apparaître, et à l'interieur, vos fichiers déodexer ... CEPENDANT, si il reste un fichier .odex, votre deodexage s'est mal passé, et il faut savoir ce qu'il s'est passé =) bon courage ...
en général, c'est parce qu'il y'a un fichier qui gène, ou autre ...
Vous n'êtes pas obliger de suivre ma méthode et d'en chercher une autre.
CHAPITRE 4 : Les modifications maintenant ...
Reprenons, vous avez maintenant la base de votre ROM (on reste sur l'exemple de la CladROM), c'est bien, c'est beau, mais ... pas assez personnel !
Vous avez déjà entendu parler des scripts, des tweaks et si ce n'est pas le cas, je vous demande de le savoir, y'en a plusieurs que je vous conseille en stock ROM :
-Adrenaline Engine de imbawind
-14toggles mod
-Touch improvement
et j'en passe ...
Prenons le cas le plus simple : le 14 toggles mod
ATTENTION : LE MOD DEPEND DE VOTRE FIRMWARE, Je m'explique, si vous télécharger le 14 toggles mods du DWKQ8 pour le mettre sur un firmware XWKTM, ça ne marchera pas =P (mouahahaha) donc faites attention à cela, au pire des cas, demandez sur XDA
Pour l'intègrer, il faut donc ... extraire les fichiers de votre mod (/system/app; /system/lib;/system/framework;/system/ect/init.d...) dans la ROM, au bon emplacement, c'est à dire dans /system/app; /system/framework; ect ...
Voilà =) Vous pouvez faire ça avec tout les mods, themes, du moment qu'ils sont compatible avec votre firmware (oui c'est la merde.)
CHAPITRE 5 : METTRE UN KERNEL
On va faire pareil que le chapitre 4, mais cette fois ci vous devez mettre le boot.img (dites moi si je me trompe) dans la racine de votre ROM, et si un /data se montre, vous l'ajouter à la racine de votre ROM =)
CHAPITRE 6 : LE SCRIPT DE FLASHAGE
Vous avez dans la racine de votre ROM /META-INF, mais à quoi sert-il ?!
Y'en a au moins 1 qui l'a supprimer, j'en suis sur ...
Il contient l'algorithme qui va donner les ordres pour le flash de la ROM, sans ça vous êtes dans la merde.
Direction /META-INF/com/google/android
il y'a update-binary et updater-script, d'après vous lequel on va modifier ?!
...
Updater-script bien sur
Ouvrez le avec NotePad++ (téléchargez le si vous ne l'avez pas), paramètrez le en saut de ligne UNIX (dans edition => conversion saut de ligne ==> UNIX)
Là il y'a les instructions pour le flash
assert(getprop("ro.product.device") == "GT-S5570L" ||
getprop("ro.product.product") == "GT-S5570L"||
getprop("ro.product.device") == "GT-S5570B" ||
getprop("ro.build.product") == "GT-S5570B" ||
getprop("ro.product.device") == "GT-S5670L" ||
getprop("ro.product.product") == "GT-S5670L"||
getprop("ro.product.device") == "GT-S5670B" ||
getprop("ro.product.product") == "GT-S5670B"||
getprop("ro.product.device") == "GT-S5830L" ||
getprop("ro.build.product") == "GT-S5830L" ||
getprop("ro.product.device") == "GT-S5830B" ||
getprop("ro.build.product") == "GT-S5830B" ||
getprop("ro.product.device") == "GT-S5830T" ||
getprop("ro.build.product") == "GT-S5830T" ||
getprop("ro.product.device") == "GT-S5830" ||
getprop("ro.build.product") == "GT-S5830" ||
getprop("ro.product.device") == "GT-S5570" ||
getprop("ro.build.product") == "GT-S5570" ||
getprop("ro.product.device") == "GT-S5571" ||
getprop("ro.build.product") == "GT-S5571" ||
getprop("ro.product.device") == "GT-S5670" ||
getprop("ro.product.product") == "GT-S5670"||
getprop("ro.product.device") == "GT-B7510" ||
getprop("ro.product.product") == "GT-B7510" ||
getprop("ro.product.device") == "GT-I5510" ||
getprop("ro.build.product") == "GT-I5510" ||
getprop("ro.product.device") == "GT-S5660V" ||
getprop("ro.product.product") == "GT-S5660V" ||
getprop("ro.product.device") == "GT-S5660" ||
getprop("ro.build.product") == "GT-S5660" );
show_progress(0.100000, 0);
show_progress(0.500000, 0);
# format("MTD", "system");
# mount("MTD", "system", "/system");
package_extract_dir("system", "/system");
# unmount("/system");
vous devez avoir ceci,
Pour afficher un message lors du flashage (Mr Clad qui veux remercier ses amis, et FrAndroid par exemple)
il va devoir entrer ce code :
ui_print("Merci à SweetPurple, AlexGeek, NeG, et ceux de FrAndroid");
Et BIEN FAIRE ATTENTION qu'à chaque fin de ligne, il y'a un point virgule ";" sinon, Installation aborted ...
Voici un exemple du script de stocklite v7
assert(getprop("ro.product.device") == "GT-S5830L" ||
getprop("ro.product.board") == "GT-S5830L"||
getprop("ro.build.product") == "GT-S5830L"||
getprop("ro.product.device") == "GT-S5830B"||
getprop("ro.product.board") == "GT-S5830B"||
getprop("ro.build.product") == "GT-S5830B"||
getprop("ro.product.device") == "GT-S5830T"||
getprop("ro.product.board") == "GT-S5830T"||
getprop("ro.build.product") == "GT-S5830T"||
getprop("ro.product.device") == "GT-S5830"||
getprop("ro.product.board") == "GT-S5830"||
getprop("ro.build.product") == "GT-S5830"||
getprop("ro.product.model") == "GT-S5830"||
getprop("ro.product.device") == "cooper"||
getprop("ro.product.board") == "cooper"||
getprop("ro.build.product") == "cooper" );
show_progress(0.1, 0);
ui_print("================================");
ui_print("================================");
ui_print("=== StockLite v7 by tj_droid ==");
ui_print("================================");
ui_print("================================");
ui_print("Starting Installation");
package_extract_file("format.sh", "/tmp/format.sh");
package_extract_file("mkfs.ext4", "/tmp/mkfs.ext4");
set_perm(0, 0, 0755, "/tmp/format.sh");
set_perm(0, 0, 0755, "/tmp/mkfs.ext4");
run_program("/tmp/format.sh");
delete("/tmp/format.sh");
delete("/tmp/mkfs.ext4");
mount("ext4", "EMMC", "/dev/block/stl12", "/system");
mount("ext4", "EMMC", "/dev/block/stl13", "/data");
ui_print("Extracting files and settings");
package_extract_dir("data", "/data");
set_perm_recursive(1000, 1000, 0771, 0644, "/data/app");
set_perm(2000, 2000, 0771, "/data/local");
package_extract_dir("system", "/system");
symlink("toolbox", "/system/bin/cat");
symlink("toolbox", "/system/bin/chmod");
symlink("toolbox", "/system/bin/chown");
symlink("toolbox", "/system/bin/cmp");
symlink("toolbox", "/system/bin/date");
symlink("toolbox", "/system/bin/dd");
symlink("toolbox", "/system/bin/df");
symlink("toolbox", "/system/bin/dmesg");
symlink("toolbox", "/system/bin/getevent");
symlink("toolbox", "/system/bin/getprop");
symlink("toolbox", "/system/bin/hd");
symlink("toolbox", "/system/bin/id");
symlink("toolbox", "/system/bin/ifconfig");
symlink("toolbox", "/system/bin/iftop");
symlink("toolbox", "/system/bin/insmod");
symlink("toolbox", "/system/bin/ioctl");
symlink("toolbox", "/system/bin/ionice");
symlink("toolbox", "/system/bin/kill");
symlink("toolbox", "/system/bin/ln");
symlink("toolbox", "/system/bin/log");
symlink("toolbox", "/system/bin/ls");
symlink("toolbox", "/system/bin/lsmod");
symlink("toolbox", "/system/bin/lsof");
symlink("toolbox", "/system/bin/mkdir");
symlink("toolbox", "/system/bin/mount");
symlink("toolbox", "/system/bin/mv");
symlink("toolbox", "/system/bin/nandread");
symlink("toolbox", "/system/bin/netstat");
symlink("toolbox", "/system/bin/newfs_msdos");
symlink("toolbox", "/system/bin/notify");
symlink("toolbox", "/system/bin/printenv");
symlink("toolbox", "/system/bin/ps");
symlink("toolbox", "/system/bin/reboot");
symlink("toolbox", "/system/bin/renice");
symlink("toolbox", "/system/bin/rm");
symlink("toolbox", "/system/bin/rmdir");
symlink("toolbox", "/system/bin/rmmod");
symlink("toolbox", "/system/bin/route");
symlink("toolbox", "/system/bin/schedtop");
symlink("toolbox", "/system/bin/sendevent");
symlink("toolbox", "/system/bin/setconsole");
symlink("toolbox", "/system/bin/setprop");
symlink("toolbox", "/system/bin/sleep");
symlink("toolbox", "/system/bin/smd");
symlink("toolbox", "/system/bin/start");
symlink("toolbox", "/system/bin/stop");
symlink("toolbox", "/system/bin/sync");
symlink("toolbox", "/system/bin/top");
symlink("toolbox", "/system/bin/umount");
symlink("toolbox", "/system/bin/uptime");
symlink("toolbox", "/system/bin/vmstat");
symlink("toolbox", "/system/bin/watchprops");
symlink("toolbox", "/system/bin/wipe");
symlink("dumpstate", "/system/bin/dumpcrash");
symlink("dumpstate", "/system/bin/dumpmesg");
set_perm_recursive(0, 0, 0755, 0644, "/system");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");
set_perm(0, 3003, 06755, "/system/bin/ip");
set_perm(0, 3003, 02750, "/system/bin/netcfg");
set_perm(0, 3004, 02755, "/system/bin/ping");
set_perm(0, 2000, 06750, "/system/bin/run-as");
set_perm_recursive(1002, 1002, 0755, 0440, "/system/etc/bluetooth");
set_perm(0, 0, 0755, "/system/etc/bluetooth");
set_perm(1000, 1000, 0640, "/system/etc/bluetooth/auto_pairing.conf");
set_perm(3002, 3002, 0444, "/system/etc/bluetooth/blacklist.conf");
set_perm(1002, 1002, 0440, "/system/etc/dbus.conf");
set_perm(1014, 2000, 0550, "/system/etc/dhcpcd/dhcpcd-run-hooks");
set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh");
set_perm_recursive(0, 0, 0755, 0555, "/system/etc/ppp");
set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin");
set_perm_recursive(0, 0, 0777, 0777, "/system/etc/init.d");
set_perm(0, 0, 06755, "/system/xbin/su");
set_perm(0, 2000, 0644, "/system/bin/apps2sd.hlp");
set_perm (0, 0, 0755, "/data/dtinstall.launch");
run_program("/data/dtinstall.launch");
delete("/system/bin/dtinstall");
delete("/data/dtinstall.launch");
show_progress(0.1, 10);
show_progress(0.2, 0);
ui_print("Flashing kernel");
assert(package_extract_file("boot.img", "/tmp/boot.img"), write_raw_image("/tmp/boot.img", "boot"), delete("/tmp/boot.img"));
#ui_print("Flashing modem");
#assert(package_extract_file("amss", "/tmp/amss"), # run_program("/sbin/dd", "if=/tmp/amss", "of=/dev/block/bml4", "bs=4096"), # delete("/tmp/amss"));
show_progress(0.2, 10); unmount("/system");
unmount("/data"); ui_print("Done!");
C'est donc fini pour cette première partie, si j'ai oublier quelque chose, merci de me le dire s'il vous plait =)
Modifié par SweetPurple, 05 July 2012 - 13:40.







Retour en haut










