Aller au contenu

[TUTO] Comment créer une ROM Basé sur Officiel


Recommended Posts

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 m****.)

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 m****.

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
  • Like 4
Lien vers le commentaire
Partager sur d’autres sites

Je crois qu'avec un tuto comme sa, je vais m'y mettre aussi a dév une ROM ;)

Mais j'attends la fin pour être sur que sa soit pas trop compliqué !!

Lien vers le commentaire
Partager sur d’autres sites

Tu n'y touches pas du tout ^^'

Il y'a plusieurs versions du Ace : le i, le B, le N le L mais on ne les distinguent pas (sauf le i)

Donc en gros , je met tout ce que tu as mis ?

Lien vers le commentaire
Partager sur d’autres sites

oui c'est un script généralisé si tu veux : le premier c'est ce que tu as directement, mais c'est la commande primaire, il faut wipe manuellement et monter /system

la derniere c'est celle de stocklite : elle wipe automatiquement, elle monte /system et /data, elle flash le kernel aussi et elle reset les permissions

@androgeekman, pour porter sense, c'est dure, encore avec un HTC c'est plus facile, mais ça reste hardcore

Lien vers le commentaire
Partager sur d’autres sites

Okéé sa commence a etre plus clair ...

Et pour changer genre ... la couleur de la barre de notif => mettre transparent ; changer l'apk music

Comment on fait ?

Lien vers le commentaire
Partager sur d’autres sites

Ah ouais okéé ! Donc sa al'air facile mais long ...

Je me lance ...

PS ; est ce que j' peux me baser sur CyangenMod 7 (je verrai quelle version :) ) ou Android 2.2 ? (=Il y a t-il un recovery menu en 2.2 ?)

Merci d'avances pour tes précieuses conseilles :))

PERSO : j'ai trop envie de développer sur Froyo ..

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

up ! Help SVP : Je suis au chap. 3 et il faut deodex la ROM mais je comprends pas comment il faut faire pour le SDK+ ADB !

J'ai déjà le SDK a la racine C;\Android\.... Et le ADB je comprends pas comment l'installer ...Lorsque je lance Xultimate, il me demande le tel connecté au PC puis je tape 3 et il y a tout en rouge et donc rien n'est fait .... :(

Sur l'écran je vois que des "Java : 54 , 76 ou 116" alors que j'ai java ... Lien d'ou je l'ai pris :

http://www.java.com/fr/download/

resolu !!

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

  • 4 weeks later...

Rejoignez la conversation

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

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

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

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

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

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

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

×
×
  • Créer...