Der META-INF OrdnerAls nächstes zeige ich, wie man sich eine update script erstellt,
damit die Rom später vom CWM installiert werden kann.
Diesen Schritt ziehe ich einmal vor, denn damit seid Ihr in der Lage
auch Anwendungen über das CWM zu installieren.
Im ersten Schritt haben wir die Rom auf den heimischen PC gebracht
und eventuell schon etwas daran angepasst.
Nun wollen wir das ganze auch installieren können
und dazu benötigen wir den META-INF Ordner.
Diesen Ordner bekommt Ihr aus jedem CWM Installationspaket,
aus einer custom rom, Titanium Backup, oder auch im Netz.
Sucht einfach nach "CWM META-INF"
Diesen Ordner kopieren wir komplett in unser Arbeitsverzeichnis.
Ich bleibe mal bei MeineRom.
Es sollten sich nun die Verzeichnisse /system und /META-INF in
MeineRom befinden.
Die Struktur von META-INF lassen wir, wie sie ist.
Uns interessiert nur die "updater-script" im Unterverzeichnis /android
Diese Datei öffnen wir in einem Editor, der im unix Format speichern kann.
Das ist wichtig, denn im reinen windows format, würde die Installation
später fehlschlagen. Daher können wir auch den Windows Editor nicht verwenden.
Das updater-script
Hier wird die Installation gesteuert.
Alle Befehel die nötig sind werden über das Script ausgeführt.
Dazu gehört:
Fortschritt auf dem Bildschirm anzeigen
Partitionen mounten
Partitionen auf dem Handy löschen und/oder formatieren
Das System und Anwendungen kopieren
Rechte anpassen
busybox, su und superuser.apk installieren (für root)
symlinks installieren
einen kernel flashen
Partitionen wieder aushängen (unmount)
... und vieles mehr
Es können auch weitere scripts aufgerufen werden, dazu später mehr ...
(Edit: nach mehrmaligen durchlesen, habe ich mich entschieden diesen Teil nochmal zu überarbeiten)
Als Erstes wollen Wir ein paar Rückmeldungen über den Verlauf der Installation.
Das geschieht über den Befehl
ui_print(" ");1ui_print(" ");
2ui_print("Installation XXXJVT..");
3ui_print("Wipe Edition");
4ui_print("Made by Mordewal");
5ui_print("bitte etwas Geduld ....");
6show_progress(0.200000, 10);
Mit diesem Block werden Wir darüber informiert, was installiert wird und von wem.
Mit
show_progress(0.200000, 10); wird ein Verlaufsbalken angezeigt, der zu 10 Prozent gefüllt wird.
Im nächsten Block hängen wir die Partitionen ein (mount), damit wir auch etwas darauf
installieren können.
1#mounting
2run_program("/sbin/mount", "/system");
3run_program("/sbin/mount", "/dev/block/stl10", "/dbdata");
4run_program("/sbin/mount", "/cache");
5run_program("/sbin/mount", "/dev/block/mmcblk0p2", "/data");
6run_program("/sbin/mount", "/");
Ein Kommentar wird immer mit einer Raute (#) eingeleitet.
Die Zeile vor der eine Raute steht wird vom System ignoriert.
Gewöhnt Euch von Anfang an einen Skript übersichtlich in Blöcke zu unterteilen
und Kommentare an den wichtigen Stellen einzufügen.
#mounting Ebenfalls kann man mit der Methode auch Befehle im Skript deaktivieren.
Nächster Schritt, altes System entfernen (wipe oder NoWipe, das ist die Frage)
Mit
delete_recursive ("/verzeichnis"); lösche ich ein Verzeichnis inklusiver der Unterverzeichnisse
1delete_recursive("/system");
2delete_recursive("/data");
3delete_recursive("/dbdata");
4delete_recursive("/cache");
Wer eine Nowhipe Version davon machen möchte, der setzt nun einfach eine Raute vor
1#delete_recursive("/data");
2#delete_recursive("/dbdata");
schon werden diese beiden Zeilen ignoriert und unsere Benutzeranwendungen inkl. Daten
bleiben erhalten.
Nun installieren wir unsere Rom oder eine Anwendung mit
package_extract_dir("system", "/system");
Wir erinnern uns. Unser System befindet sich in dem Verzeichnis system, das wir in unserem
Arbeitsverzeichnis MeineRom erstellt hatten.
Mit dem Befehl
package_extract_dir (""); wird der komplette Inhalt eines Verzeichnisses inkl. Unterverzeichnisse
an die angegebene Stelle kopiert. Nicht das Verzeichnis selbst.
Wenn wir nun noch ein paar Anwendungen installieren wollen, dann können wir in unserem Arbeitsverzeichnis MeineRom
das Verzeichnis data/app erstellen, in das wir unsere Anwendungen kopieren (z.B. Root Explorer.apk)
Und dann mit dem Befehl
1package_extract_dir("data", "/data");
den kompletten Inhalt nach /data auf unser Handy kopieren.
Als nächstes kommt ein wichtiger Schritt. Unser System muß die richtigen Rechte bekommen.
Das geschieht mit diesem Block.
1#set permissions
2ui_print("Setting Permissions...");
3set_perm_recursive(0,0,0755,0644,"/system/app");
4set_perm_recursive(0,0,0755,0644,"/system/framework");
5set_perm_recursive(0, 0, 0755, 0644, "/system");
6set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");
7set_perm_recursive(0, 0, 0755, 0755, "/system/etc");
8set_perm_recursive(1002, 1002, 0755, 0440, "/system/etc/bluetooth");
9set_perm_recursive(0, 2000, 0755, 0755, "/system/vendor/bin");
10set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor/etc");
11set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor/firmware");
12set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin");
13set_perm(0, 2000, 0755, "/system/vendor");
14set_perm(0, 2000, 0755, "/system/vendor/firmware");
15set_perm(0, 2000, 0755, "/system/vendor/bin/launch_gps.sh");
16set_perm(0, 2000, 0755, "/system/vendor/bin/gpsd");
17set_perm(0, 2000, 0755, "/system/etc/bluetooth");
18set_perm(0, 3003, 02755, "/system/bin/netcfg");
19set_perm(0, 3004, 02755, "/system/bin/ping");
20set_perm(1002, 1002, 0440, "/system/etc/dbus.conf");
21set_perm(1014, 2000, 0550, "/system/etc/dhcpcd/dhcpcd-run-hooks");
22set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh");
23set_perm(0, 0, 06755, "/system/xbin/su");
24set_perm(0, 0, 06755, "/system/xbin/busybox");
25set_perm(0, 0, 755, "/tmp/bmlwrite");
Dazu gibt es nicht viel zu sagen, es ist besser den Block so zu übernehmen.
Man muß das Rad auch nicht immer neu erfinden.
Danach müssen einige Dinge dem System bekannt gemacht werden. Dazu werden sogenannte symlinks gesetzt
1ui_print(" ");
2ui_print("Setting symlinks...");
3symlink("toolbox", "/system/bin/cat", "/system/bin/chmod", "/system/bin/chown", "/system/bin/cmp", "/system/bin/date", "/system/bin/dd",
4 "/system/bin/df", "/system/bin/dmesg", "/system/bin/getevent", "/system/bin/getprop", "/system/bin/hd", "/system/bin/id",
5 "/system/bin/ifconfig", "/system/bin/iftop", "/system/bin/insmod", "/system/bin/ioctl", "/system/bin/ionice", "/system/bin/kill",
6 "/system/bin/ln", "/system/bin/log", "/system/bin/ls", "/system/bin/lsmod", "/system/bin/mkdir", "/system/bin/mount",
7 "/system/bin/mv", "/system/bin/nandread", "/system/bin/netstat", "/system/bin/newfs_msdos", "/system/bin/notify",
8 "/system/bin/printenv", "/system/bin/ps", "/system/bin/reboot", "/system/bin/renice", "/system/bin/rm", "/system/bin/rmdir",
9 "/system/bin/rmmod", "/system/bin/route", "/system/bin/schedtop", "/system/bin/sendevent", "/system/bin/setconsole",
10 "/system/bin/setprop", "/system/bin/sleep", "/system/bin/smd", "/system/bin/start", "/system/bin/stop", "/system/bin/sync",
11 "/system/bin/top", "/system/bin/umount", "/system/bin/vmstat", "/system/bin/watchprops", "/system/bin/wipe");
12symlink("/system/xbin/su", "/system/bin/su");
13symlink("/system/bin/dumpstate", "/system/bin/dumpmesg");
14symlink("/system/bin/debuggerd", "/system/bin/csview");
Nun noch busybox installieren, die wir vorher an die richtige Stelle in unsere Rom kopiert haben.
Ebenso su und superuser.apk
1ui_print("Installiere busybox...");
2run_program("/system/xbin/busybox", "--install", "-s", "/system/xbin");
Jetzt noch die Dateisystem wieder aushängen und der Skript ist fertig.
1unmount("/data");
2unmount("/system");
3unmount("/dbdata");
4unmount("/cache");
Der komplette Skript sieht nun so aus:
1ui_print(" ");
2ui_print("Installation XXXJVT..");
3ui_print("Wipe Edition");
4ui_print("Made by Mordewal");
5ui_print("bitte etwas Geduld ....");
6show_progress(0.200000, 10);
7
8ui_print(" ");
9
10#mounting
11run_program("/sbin/mount", "/system");
12run_program("/sbin/mount", "/dev/block/stl10", "/dbdata");
13run_program("/sbin/mount", "/cache");
14run_program("/sbin/mount", "/dev/block/mmcblk0p2", "/data");
15run_program("/sbin/mount", "/");
16
17ui_print("aufraeumen.....");
18
19delete_recursive("/system");
20delete_recursive("/data");
21delete_recursive("/dbdata");
22delete_recursive("/cache");
23
24show_progress(0.200000, 30);
25
26ui_print(" ");
27ui_print("Installiere XXXJVT ODEX Bluetheme");
28package_extract_dir("system", "/system");
29show_progress(0.200000, 50);
30
31ui_print(" ");
32ui_print("Installiere einige Apps");
33package_extract_dir("data", "/data");
34show_progress(0.200000, 80);
35
36#set permissions
37ui_print("Setting Permissions...");
38set_perm_recursive(0,0,0755,0644,"/system/app");
39set_perm_recursive(0,0,0755,0644,"/system/framework");
40set_perm_recursive(0, 0, 0755, 0644, "/system");
41set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");
42set_perm_recursive(0, 0, 0755, 0755, "/system/etc");
43set_perm_recursive(1002, 1002, 0755, 0440, "/system/etc/bluetooth");
44set_perm_recursive(0, 2000, 0755, 0755, "/system/vendor/bin");
45set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor/etc");
46set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor/firmware");
47set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin");
48set_perm(0, 2000, 0755, "/system/vendor");
49set_perm(0, 2000, 0755, "/system/vendor/firmware");
50set_perm(0, 2000, 0755, "/system/vendor/bin/launch_gps.sh");
51set_perm(0, 2000, 0755, "/system/vendor/bin/gpsd");
52set_perm(0, 2000, 0755, "/system/etc/bluetooth");
53set_perm(0, 3003, 02755, "/system/bin/netcfg");
54set_perm(0, 3004, 02755, "/system/bin/ping");
55set_perm(1002, 1002, 0440, "/system/etc/dbus.conf");
56set_perm(1014, 2000, 0550, "/system/etc/dhcpcd/dhcpcd-run-hooks");
57set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh");
58set_perm(0, 0, 06755, "/system/xbin/su");
59set_perm(0, 0, 06755, "/system/xbin/busybox");
60set_perm(0, 0, 755, "/tmp/bmlwrite");
61
62
63show_progress(0.200000, 90);
64ui_print(" ");
65ui_print("Setting symlinks...");
66symlink("toolbox", "/system/bin/cat", "/system/bin/chmod", "/system/bin/chown", "/system/bin/cmp", "/system/bin/date", "/system/bin/dd",
67 "/system/bin/df", "/system/bin/dmesg", "/system/bin/getevent", "/system/bin/getprop", "/system/bin/hd", "/system/bin/id",
68 "/system/bin/ifconfig", "/system/bin/iftop", "/system/bin/insmod", "/system/bin/ioctl", "/system/bin/ionice", "/system/bin/kill",
69 "/system/bin/ln", "/system/bin/log", "/system/bin/ls", "/system/bin/lsmod", "/system/bin/mkdir", "/system/bin/mount",
70 "/system/bin/mv", "/system/bin/nandread", "/system/bin/netstat", "/system/bin/newfs_msdos", "/system/bin/notify",
71 "/system/bin/printenv", "/system/bin/ps", "/system/bin/reboot", "/system/bin/renice", "/system/bin/rm", "/system/bin/rmdir",
72 "/system/bin/rmmod", "/system/bin/route", "/system/bin/schedtop", "/system/bin/sendevent", "/system/bin/setconsole",
73 "/system/bin/setprop", "/system/bin/sleep", "/system/bin/smd", "/system/bin/start", "/system/bin/stop", "/system/bin/sync",
74 "/system/bin/top", "/system/bin/umount", "/system/bin/vmstat", "/system/bin/watchprops", "/system/bin/wipe");
75symlink("/system/xbin/su", "/system/bin/su");
76symlink("/system/bin/dumpstate", "/system/bin/dumpmesg");
77symlink("/system/bin/debuggerd", "/system/bin/csview");
78
79
80ui_print("Installiere busybox...");
81run_program("/system/xbin/busybox", "--install", "-s", "/system/xbin");
82
83ui_print(" ");
84ui_print("aufraeumen und Dateisysteme aushaengen...");
85
86unmount("/data");
87unmount("/system");
88unmount("/dbdata");
89unmount("/cache");
90
91show_progress(1.000000, 0);
92ui_print(" ");
93ui_print("Installation erfolgreich. Viel Spass damit!...");
94ui_print("Das System kann nun neu gestartet werden");
Wird nun unsere Rom zur Installation über CWM ausgwählt, dann wird dieser Skript ausgeführt.
Unsere Rom ist damit auf unser Handy installiert.
Ebenso kann man Anwendungen, Theme, modems, Treiber nachinstallieren.
Man braucht dann natürlich keine Partitionen zu löschen und auch nicht alle symlinks und Rechte neu setzen.
Der Skript wäre sehr viel kleiner.
— geändert am 13.10.2011, 10:08:40
Wer nach einer Antwort sucht, wird niemals aufhören, zu fragen
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.