Articles

Varför måste jag radera Dalvik Cache?

För att besvara dina frågor:

  • Jag känner inte till någon Android-version där Dalvik inte ogiltigförklarades vid uppstart. Kanske den första versionen 1.0 hade det, jag vet verkligen inte, har gått igenom Eclair, Froyo, Gingerbread, Ice Cream Sandwich. Du måste titta i källkodsträdet och basera om det tillbaka till CupCake eller Donut (1.5 och 1.6 respektive)

  • Den detaljerade anledningen 🙂

Anledningen till att Wipe Cache måste användas är att alla apks, inklusive system apks, har en dex-fil bifogad till sig. När ROM startas upp för första gången går Androids Dalvik igenom var och en av dessa apks, och extraherar dex-filen från den och placerar den i cacheminnet /data/dalvik-cache och snabbar därmed upp utförandet av själva appen.

De flesta ROMs har apks som är odex ’ed, cachen är paketerad i själva apken som en extern fil.

En hel del anpassade ROM-modderare skulle ha dessa apks deodex ’d, vilket innebär att dex-filen byts ut och paketeras om för att göra det lättare att tematisera/modifiera en apk.

När du flashar ett anpassat ROM och inte raderar cacheminnet kommer de nyare anpassade ROM:s apk:erna att ha en annan dex-fil bifogad, och när Dalvik går igenom dem ser den den befintliga cachade dex-filen som finns i katalogen och hoppar över den, och när du sedan kör appen får du garanterat en tvångsstängning eller ANR (Application Not Responding).

Du förlorar inte data i sig, om du använder ClockWorkMod Recovery, och Wipe Data är valt, så ja, alla inställningar relaterade till apparna raderas rent – titta i /data/app.

Så du kan Wipe Cache men inte Wipe Data, det som görs i praktiken, är att slussa in de nyare apparna på plats, där den har inställningarna behållna. Detta var ett ganska vanligt scenario med CyanogenMod nightlies där en instabil/testande ROM-build flashas och inställningarna behålls med cache wipe. Milen varierar beroende på vilka appar som laddats ner från marknaden (inställningarna skulle ha ändrats genom versionshöjning ganska troligt).

För bästa resultat vore det klokt att utföra både Wipe Data och Wipe Cache för att säkerställa integritet och inga programfel i själva appen.

Ja, det skulle innebära att uppstartstiden skulle bli långsammare, men det är ett första engångsögonblick. Efter det skulle den starta upp snabbare. Verkligen i ett nötskal, uttryckligen torka cache själv via CWM faktiskt hjälper till att påskynda det och säkerställa att inga rester från den tidigare versionen på plats som kan få munged i (Nu i det här skedet, inser din fråga så i all rättvisa, har inte faktiskt sett Android inte utföra invalidering av cache själv vid uppstart när du flashar en ny ROM …)

Använd källkoden Luke seriöst! 😀

frameworks/base/core/java/com/android/internal/os/ZygoteInit.java är uppstartskoden för varje apk runtime. Den interagerar med den inhemska C-kod som finns i katalogträdet dalvik som innehåller specifika chipsetinstruktioner för att tolka bytekoden i apk till den inhemska CPU-instruktionssatsen. ARMv6 är i stort sett en hackad version av ARMv5 (som var det ursprungliga chipsetet i de äldre Android-versionerna före Eclair), så du kommer inte att se ARMv6 i AOSP-källan från Google. CyanogenMod kommer att ha ARMv6 i sin källkod.