[INFO][MODDING]Odex, Deodex, ZipAlign.
http://i.imgur.com/hYEJJUk.jpg?1
Odex
Deodex
ZipAlign
Mini guida per la spiegazione dei termini che troviamo nei changelog delle Custom Rom
ODEX:
I file APK (ovvero file di applicazioni) contenuti nelle ROM stock sono sostanzialmente dei file ZIP, al cui interno vi sono contenuti informativi. Il codice Java che è quello che dovrà essere eseguito per il lancio di un’applicazione viene memorizzato in un file che si chiama classes.dex che risiede all’interno del file APK. Classes.dex viene quindi inviato alla Dalvik JVM e poi elaborato. Successivamente una cache di questo file viene inviata alla Dalvik cache che si occuperà di eseguire alcune istruzioni. L’utilità di avere un file classes.dex è molto importante, in quanto si occupa di pre-caricare all’avvio del sistema operativo alcuni file dell’applicazione, in modo da garantirle tempi di avvio rapidi. Da qui scaturisce il termine ROM ODEXED, ovvero una ROM in cui sono presenti file classes.dex di ogni applicazione.
DEODEX:
Un’applicazione DEODEXED è invece un’applicazione il cui file classes.dex non viene pre-caricato nella Dalvik cache. In poche parole, il contenuto informativo del classes.dex viene accorpato nell’intero file APK dell’applicazione e la Dalvik cache non avrà nessun file da eseguire, in quanto la cache del file classes.dex le sarà inviata al momento dell’avvio dell’applicazione. Questo comporta una conseguente riduzione del tempo di avvio del sistema operativo (non si hanno file da pre-caricare) ma anche una conseguente leggera lentezza in più durante l’avvio di un’applicazione. Dunque, effettuare il DEODEXING di una ROM significa eliminare dalla Dalvik cache i file classes.dex delle applicazioni e fare in modo che tutto il contenuto informativo rimanga all’interno del solo file APK. Questo può essere utile soprattutto agli sviluppatori per poter realizzare delle ROM contenenti diversi file APK presi in prestito da altre ROM, ed anche per poter applicare dei temi all’interfaccia in maniera molto più rapida e semplice.
ZIPALIGN:
Esistono alcune istruzioni nei linguaggi di programmazione (assembly, Java, C…) che richiedono che i dati siano allineati.
Cosa significa? Immaginate che la memoria ram si possa "vedere". Abbiamo 4 applicazioni da "sistemare" e dobbiamo fare in modo che, benchè abbiano dimensioni differenti, siano ordinate, separate e facilmente distinguibili dal sistema.
La risposta più semplice è che si metta ogni applicazione separata dalle altre in una posizione di memoria, per cui se anche occupa meno dello spazio che gli ho riservato comunque rimarrà da sola e l'altro spazio rimarrà vuoto. In questo modo riesco a tenere separate e facilmente indicizzabili le mie applicazioni.
Lo zipalign consiste nell’allineamento dei dati dei pacchetti delle applicazioni (i famosi file “.apk”) ogni 4 byte, così che sia più facile indicizzarli e raggiungerli con istruzioni che richiedono l’allineamento (ad esempio mmap()).
Questo meccanismo consente di gestire più facilmente i dati quando li si deve caricare in RAM. È infatti più semplice trovare un dato sapendo che può iniziare solo ad indirizzi di memoria di tipo 4n (ovvero multipli di 4) invece che ad indirizzi totalmente casuali. Lo zipalign è dunque un metodo per far funzionare più velocemente le applicazioni e consentirne tempi di avvio più veloci.
Spero di esservi stato utile e buon lavoro.