Articles

Perché ho bisogno di cancellare la Dalvik Cache?

Per rispondere alle tue domande:

  • Non sono a conoscenza di alcuna versione di Android in cui la Dalvik non è stata invalidata all’avvio. Forse la versione iniziale 1.0 aveva questo, davvero non lo so, sono passato attraverso Eclair, Froyo, Gingerbread, Ice Cream Sandwich. Devi guardare nell’albero dei sorgenti e rifare il rebase a CupCake o Donut (1.5 e 1.6 rispettivamente)

  • La ragione dettagliata 🙂

La ragione per cui il Wipe Cache deve essere usato è perché tutte le apk, comprese le apk di sistema, hanno un file dex allegato ad esso, quando la ROM viene avviata per la prima volta, Dalvik di Android passa attraverso ognuna di quelle apk, ed estrae il file dex da esso e lo mette nella cache /data/dalvik-cache accelerando così l’esecuzione dell’app stessa.

La maggior parte delle ROM hanno apk che sono odex ‘ed, la cache è inclusa nell’apk stesso come un file esterno.

Un sacco di modder di ROM personalizzate avrebbero quelle apk deodex ‘d, cioè il file dex è sostituito e riconfezionato per rendere più facile il tema/modificare un apk.

Quando si flasha una custom ROM, e non si cancella la cache, le apk delle custom ROM più recenti avranno un diverso file dex collegato ad esso, e quando la Dalvik li attraversa, vede il file dex esistente nella cache trovato nella directory, e lo salta, quindi quando si esegue l’applicazione, è garantita una chiusura forzata o ANR (Application Not Responding).

Non stai perdendo i dati di per sé, se usando ClockWorkMod Recovery, e Wipe Data è selezionato, allora sì, tutte le impostazioni relative alle app vengono cancellate in modo pulito – guarda in /data/app.

Così si può Wipe Cache ma non Wipe Data, ciò che viene fatto in modo efficace, è inserito nelle apk più recenti al posto, in cui ha le impostazioni conservate. Questo era uno scenario abbastanza comune con CyanogenMod nightlies dove una build ROM instabile / test è flashato, e le impostazioni mantenute con cache wipe. Il chilometraggio varierà a seconda di ciò che le app scaricate dal mercato (le impostazioni sarebbero cambiate da bump versione molto probabilmente).

Per i migliori risultati sarebbe saggio eseguire sia Wipe Data che Wipe Cache per garantire l’integrità e nessun errore di programma all’interno dell’app stessa.

Sì, questo significherebbe che il tempo di avvio sarebbe più lento, ma il suo momento iniziale una volta fuori. Dopo di che si avvierebbe più velocemente. Davvero in poche parole, pulendo esplicitamente la cache stessa tramite CWM in realtà aiuta a velocizzare e garantire nessun residuo dalla versione precedente sul posto che potrebbe ottenere munged in (ora in questa fase, sono realizzando la tua domanda così in tutta onestà, non hanno effettivamente visto Android non eseguendo l’invalidazione della cache stessa all’avvio quando il flash di una nuova ROM …)

Usa il sorgente Luke seriamente! 😀

frameworks/base/core/java/com/android/internal/os/ZygoteInit.java è il codice di avvio per ogni runtime apk. Interagisce con il codice C nativo che si trova nell’albero delle directory dalvik che contiene istruzioni specifiche del chipset per interpretare il bytecode all’interno dell’apk in set di istruzioni native della CPU. ARMv6 è praticamente una versione hackerata di ARMv5 (che era il chipset originale nelle vecchie versioni di Android prima di Eclair), quindi non vedrete ARMv6 nel sorgente AOSP di Google. CyanogenMod avrà quell’ARMv6 nel loro sorgente.