Wenn ich ein benutzerdefiniertes ROM aktualisiere, gibt es immer eine Anweisung, den Dalvik-Cache zu löschen . Ich sehe keinen Grund, warum dies unbedingt sein muss.
Wenn ich das Logcat beobachte, während das System hochfährt, kann ich deutlich sehen, dass, wenn eine App geändert wird, ihre dex
Datei ungültig gemacht und dann neu generiert wird. Und doch, wenn ich das irgendwo erwähne, stoße ich auf Schweigen. Als ob nicht einmal einige ROM-Entwickler sich dessen bewusst wären und sie dies nur tun, weil alle anderen es tun.
Also die Fragen:
Eine ideale Antwort würde Verweise auf den relevanten Code enthalten, sodass ich beim nächsten Mal einen Verweis haben würde.
Um Ihre Fragen zu beantworten:
Mir ist keine Android-Version bekannt, bei der Dalvik beim Booten nicht ungültig gemacht wurde. Vielleicht hatte die ursprüngliche Version 1.0 das, ich weiß es wirklich nicht, durch Eclair, Froyo, Gingerbread, Ice Cream Sandwich gegangen. Sie müssen in den Quellbaum schauen und ihn auf CupCake oder Donut (1.5 bzw. 1.6) zurücksetzen.
Der genaue Grund :)
Der Grund, warum der Wipe Cache verwendet werden muss, ist, dass alle APKs, einschließlich System-APKs, eine dex -Datei angehängt haben, wenn das ROM zum ersten Mal hochgefahren wird, geht Dalvik von Android jede einzelne dieser APKs durch und extrahiert sie die dex-Datei daraus und legen Sie sie im Cache ab, /data/dalvik-cache
wodurch die Ausführung der App selbst beschleunigt wird.
Die meisten ROMs haben apks, die odex -ed sind, der Cache ist in der apk selbst als externe Datei gebündelt.
Viele benutzerdefinierte ROM-Modder hätten diese apks deodex 'd, was bedeutet, dass die dex-Datei ersetzt und neu verpackt wird, um das Thema/Ändern einer apk zu vereinfachen.
Wenn Sie ein benutzerdefiniertes ROM flashen und den Cache nicht löschen, haben die neueren benutzerdefinierten ROM-APKs eine andere Dex -Datei angehängt, und wenn der Dalvik sie durchläuft, sieht er die vorhandene zwischengespeicherte Dex-Datei, die im Verzeichnis gefunden wurde, und Wenn Sie es überspringen, wird Ihnen beim Ausführen der App garantiert ein Force Close oder ANR (Application Not Responding) angezeigt.
Sie verlieren per se keine Daten, wenn Sie ClockWorkMod Recovery verwenden und Wipe Data ausgewählt ist, dann werden ja alle Einstellungen in Bezug auf die Apps sauber gelöscht - schauen Sie in /data/app
.
So kann man Cache Wipe aber nicht Wipe Data , was effektiv gemacht wird, wird in den neueren apks an Ort und Stelle gesteckt, in denen es die Einstellungen beibehalten hat. Dies war ein recht häufiges Szenario bei CyanogenMod-Nightlies, bei denen ein instabiler/testender ROM-Build geflasht wird und die Einstellungen beim Cache-Wipe beibehalten werden. Die Laufleistung hängt davon ab, welche Apps vom Markt heruntergeladen wurden (die Einstellungen hätten sich wahrscheinlich durch einen Versionsstoß geändert).
Um die besten Ergebnisse zu erzielen, ist es ratsam, sowohl Daten als auch Cache zu löschen, um die Integrität und keine Programmfehler in der App selbst sicherzustellen.
Ja, das würde bedeuten, dass die Startzeit langsamer wäre, aber der erste einmalige Moment. Danach würde es schneller booten. Kurz gesagt, das explizite Löschen des Caches selbst über CWM hilft tatsächlich dabei, ihn zu beschleunigen und sicherzustellen, dass keine Rückstände der vorherigen Version vorhanden sind, die sich einmischen könnten (jetzt verstehe ich Ihre Frage ehrlich gesagt nicht wirklich gesehen, dass Android beim Booten beim Flashen eines neuen ROMs die Invalidierung des Caches selbst nicht durchführt..)
Verwenden Sie die Quelle Luke ernsthaft! :D
frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
ist der Startcode für jede APK-Laufzeit. Es interagiert mit dem nativen C-Code im dalvik
Verzeichnisbaum, der spezifische Chipsatzanweisungen enthält, um den Bytecode innerhalb des apk-zu-nativen CPU-Befehlssatzes zu interpretieren. ARMv6 ist so ziemlich eine gehackte Version von ARMv5 (das war der ursprüngliche Chipsatz in den älteren Android-Versionen vor Eclair), sodass Sie ARMv6 nicht in der AOSP-Quelle von Google sehen werden. CyanogenMod wird dieses ARMv6 in seiner Quelle haben.
RR
t0mm13b
RR
data/data
aberdata\dalvik-cache
. Möglicherweise nur die System.t0mm13b
t0mm13b
RR
RR
t0mm13b
GollyJer
Anwar