Update per Stock-Recovery flashen

Xilent

Xilent

Fortgeschrittenes Mitglied
89
Hallo liebe Community,

aktuell entwickle ich ein Android-System für einen RockChip TV-Stick.. Dieses System soll auch ein UpdateCenter enthalten(OTA). Runterladen der signierten Zip klappt super, aber wenn ich dem System den Befehl zum Flashen gebe
Code:
				   install.setText("Installing System Update");
				   try {
					RecoverySystem.installPackage(Download.this, new File(filepath));
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
startet zwar die Recovery.. Zeigt für 100msec das Android Männchen mitm Fehler an und tut dann 5 Minuten so als würde er das Update installieren mit Statusbar und so. Danach hat die Recovery einen Factory Reset vollzogen.

Die zu flashende Zip ist im Anhang.

In der Datei /cache/recovery/last_installs steht:
Code:
Dateipfad/datei.zip
0
Der Log ist leer. Werde aber aus der Aussage nicht schlau.

Vielen Dank schonmal im Vorraus
LG Xilent
 

Anhänge

  • update_signed.zip
    4,7 MB · Aufrufe: 103
1. Kann den die Recovery die Datei auch finden? Also stimmen die Pfade, bedenke das SD Karten in der Recovery schon mal andere Mountpoints haben können. Z.B. wenn eine internerer Speicher/SD als auch externe SD vorhanden sind. (wenn man ganz sicher gehen will, kann man die Update.zip auch nach /cache kopieren)
2. Falls die update.zip auf einer externen SD liegt, überprüfe Formatierung der SD. Viele Geräte können in der Recovery nicht mit exFAT umgehen
3. Passt die Signierung deiner Update.zip zu der Recovery, falls es die Stock Recovery ist?
4. Hast du deine Update.zip vorher überhaupt getestet?

5. Was der wichtigste Punkt ist: Du nutzt Amend als Script Sprache, es wird schon seit ein paar Jahren Edify im Updater-Script genutzt.

Also, die oberen Punkte mal als mögliche sonstige Fehlerquellen, aber hauptsächlich solltest du 5. ändern (falls dein Stick mit einem aktuellen Android läuft)
Und dich bitte mehr mit dem Thema beschäftigen.
Man sollte seine Dateien immer erst manuell testen, bevor man eine automatische Lösung angeht. Macht die Fehlersuche einfacher.
Erst testest du deine update.zip auf Herz und Nieren, ob auch alles wie gewünscht funktioniert und dann erst ist es sinnvoll, zu überlegen wie man dem User das Flashen einfacher machen kann ;)
 
1. Ja das Update befindet sich auf einer MTD Partition, dem internen Speicher.

2. SD ist als fat 32 formatiert.

3. Wie überprüfe ich das? Meine Recovery ist Stock V 4.2.X . Habe bereits 2 Apps geschrieben die per Platform zertifikat signiert wurden und besondere Rechte beanspruchen, wie PACKAGE.INSTALL .

4. Was meinst du damit?? Habs ja versucht zu installieren ... Geht nicht.

5. Habe es auch mit einem updater-script versucht:
Code:
if is_mounted("/system") then
  unmount("/system");
endif;
mount("ext4", "MTD", "system", "/system");
package_extract_dir("data", "/system/media/");
set_perm(0, 0, 0644, "/system/media/bootanimation.zip");
unmount("/system");

Android ist 4.2.2.

Ich teste die ja die ganze Zeit manuell.. Schiebe die manchmal auch manuell in die Cache Partition..

Sind Fehler im Script???
Wenn nicht muss es ja an der Signierung liegen.

Danke für deine Anregungen
 
Zuletzt bearbeitet:
Bis du sicher, dass es eine MTD Partition ist? Bei den meisten Geräten mit 4.2.2 kommt emmc, vor allem wenn sie mit ext4 formatiert sind, zum Einsatz. Überprüf das mal.

zu 3. bei manchen Geräte gibt es die Datei /system/etc/security/otacerts.zip, wenn sie vorhanden ist. Schau mal rein, wenn da die test keys drin sind, ist die Wahrscheinlichkeit groß, dass eine mit den Test keys signierte update durchläuft. Sollte was anderes drin sein, liegt die Wahrscheinlichkeit irgendwo bei 0.
Sollte die Datei nicht vorhanden sein, kannst du es mal mit den Testkey versuchen (findest du im Netz, oft bei Signieranleitungen)
Die Test Key funktionieren jedoch nur ganz selten, oft bei Noname Geräten aus Fernost, da manche Hersteller sich nicht die Mühe machen eigene Release Keys zu erstellen. Sollte dein Hersteller den Fehler nicht gemacht haben, brauchst du eine Custom Recovery um etwas zu flashen.

zu 4. du versuchst es mit einer App zu installieren, bevor du den Weg eingehst solltest du eben sicherstellen, dass deine ZIP überhaupt funktioniert. Auf die deine Art, baust du viele Fehlerquellen ein. Immer Schritt für Schritt. Wenn du Root Zugriff hast, kannst du das Flashen auch über adb initiieren. Siehe dazu Flash zip files from ADB/Terminal(And other commands) - xda-developers
Erst wenn du sicher gestellt hast, dass deine ZIPs funktionieren ist es sinnvoll eine App zu erstellen. Wenn dann Fehler auftreten, weiß du dass es an deiner App liegt und nicht an der Update.zip.

Um eine bootanimation auszutauschen Bedarf es nicht unbedingt des Flashens über die Recovery. Du könntest auch die System Partition als r/w mounten und an seinen Platz kopieren.
 
Ja is nur ein Test mit der Bootanimation später gibts dann System Updates. Ja das Gerät hat MTD Partitionen. Hab ich mit cat /proc/mtd ausgelesen. Hab otacerts.zip und singiere die updates mit der testkry.x509.pem die da drinne ist.

Code:
1|root@android:/ # cat /proc/partitions
cat /proc/partitions
major minor  #blocks  name

  31        0       4096 mtdblock0
  31        1      12288 mtdblock1
  31        2      12288 mtdblock2
  31        3      16384 mtdblock3
  31        4     524288 mtdblock4
  31        5     131072 mtdblock5
  31        6    1572864 mtdblock6
  31        7       4096 mtdblock7
  31        8     524288 mtdblock8
  31        9    4796416 mtdblock9

1|root@android:/ # cat /proc/mtd
cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00400000 00004000 "misc"
mtd1: 00c00000 00004000 "kernel"
mtd2: 00c00000 00004000 "boot"
mtd3: 01000000 00004000 "recovery"
mtd4: 20000000 00004000 "backup"
mtd5: 08000000 00004000 "cache"
mtd6: 60000000 00004000 "userdata"
mtd7: 00400000 00004000 "kpanic"
mtd8: 20000000 00004000 "system"
mtd9: 124c00000 00004000 "user"
 
Zuletzt bearbeitet:
Hast du eine original update.zip irgendwo liegen? Wenn ja, dann öffne sie und schau sie dir genau an, such nach Auffälligkeiten.
Manche Stock Recoveries benötigen zusätzliche Dateien im Update.zip bzw. Befehle im Updater-Script, ist z.B. bei Mediatek CPUs so (brauchen eine Kontrolldatei in der ZIP, ohne gibt es wie bei dir einen Factory Reset), mein ASUS MeMO Pad FHD (Intel CPU) hat auch ein paar extra Wünsche.
Wenn du also eine orginal Update.zip vom Hersteller hast, dann schau sie mal an, ob da was außergewöhnliches drin vorkommt. Wenn du von deinem Hersteller/für dein Stick nichts findest, dann schau dir original Update.zip für andere Geräte mit dem selben CPU an
Je nachdem kann es auch an deiner Signiermethode liegen, nimm zum Signieren die signapk.jar, mit irgendwelchen Scripten, Tools,.. kann es passieren, dass die Recovery die ZIP nicht mag.
 
Hmmm ich habe die böse Vermutung, dass am mounten der System Partition liegt.
Code:
ui_print("Install Boot Animation");
run_program("/sbin/busybox", "mount", "/system");
show_progress(0.500000, 40);
package_extract_dir("system", "/system");
show_progress(0.200000, 10);
run_program("/sbin/busybox", "umount", "/system");

Da zeigt er mir keinen Fehler, hängt aber in einem Recovery Loop...
Also versucht das Package immer wieder zu flashen..
 
Wie gesagt, schau dir original update.zips an. Bei einigen Herstellern muss man den kompletten dev Pfad zu den Partitionen angeben. Sie verändern den mount Befehl gerne mal in ihren Recoveries. Welche Argumente in welcher Reihenfolge nötig sind, wirst du in einem original update-script herausfinden können.

Edit: schau mal auf http://forum.xda-developers.com/showthread.php?t=1187313 den Part über das mount Befehl, pass deine script mal an und teste.
 
Zuletzt bearbeitet von einem Moderator:
Xilent schrieb:
Hmmm ich habe die böse Vermutung, dass am mounten der System Partition liegt.
Code:
ui_print("Install Boot Animation");
run_program("/sbin/busybox", "mount", "/system");
show_progress(0.500000, 40);
package_extract_dir("system", "/system");
show_progress(0.200000, 10);
run_program("/sbin/busybox", "umount", "/system");
Da zeigt er mir keinen Fehler, hängt aber in einem Recovery Loop...
Also versucht das Package immer wieder zu flashen..

irgendwie glaub ich nicht das im original recovery busybox mit drin ist, probiers mal stattdessen wie zuvor gesagt mit mount (blablabla), bzw. schau mal ob im original recovery busybox in sbin ist
 
Ja ich hab das Recovery Image entpackt und mir die RamDisk angekuckt.. Da ist busybox in dem sbin Ordner.

Habe aber was insterressantes in der recovery.fstab gefunden:
Code:
# mount point	fstype		device			[device2]
/mnt/sdcard          vfat            /dev/block/mtd/by-name/user
/mnt/external_sd		vfat		/dev/block/mmcblk0p1	/dev/block/mmcblk0
/system		ext4		/dev/block/mtd/by-name/system
/cache		ext4		/dev/block/mtd/by-name/cache
/data		ext4		/dev/block/mtd/by-name/userdata
/cust		ext4		/dev/block/mtd/by-name/cust
/misc		mtd 		misc
/parameter	mtd		parameter
/boot		mtd		boot
/recovery	mtd		recovery
/backup		mtd		backup
 
Dann nimm mal den gesamten Pfad zum Mounten.
 
Habe ich getan... Scheint auch zu funktionieren...
Jedenfalls braucht er ne Sekunde um die bootanimation.zip zu kopieren

Code:
ui_print("Install Boot Animation");
run_program("/sbin/busybox", "mount", "-t", "ext4", "/dev/block/mtd/by-name/system", "/system");
package_extract_dir("system", "/system");
run_program("/sbin/busybox", "umount", "/system");

Allerdings hänge ich dann in einem Recovery Loop. Er flasht die Zip wieder und wieder.. habe es manuell per /cache/recovery/command . Versucht und --wipe-cache hinzugefügt.. Scheint aber trotzdem nichts zu helfen..
Macht es Sinn die Cache Partition zu formatieren?

Danke für eure Hilfe :)
 
wenn du es einfach mal so probierst ?

Code:
ui_print("");
ui_print("");
ui_print(" Bootanimation ");
ui_print("");
ui_print("");
mount("ext4", "MTD", "/dev/block/mtd/by-name/system", "/system");
set_progress(1.000000);
package_extract_dir("system", "/system");
set_perm(0, 0, 0644, "/system/media/bootanimation.zip");
unmount("/system");

oder statt package_extract_dir
package_extract_file("system/media/bootanimation.zip", "/system/media/bootanimation.zip");
 
Hab den Fehler gefunden . Vielen Dank für eure Hilfe
 

Ähnliche Themen

L
Antworten
0
Aufrufe
1.039
lebr0n
L
C
Antworten
1
Aufrufe
1.974
blackdesire1412
B
Tron2014
Antworten
3
Aufrufe
1.163
waze
W
Zurück
Oben Unten