Cosa significa zipalign e come si adatta al modo in cui utilizziamo i nostri dispositivi Android?


19

Cosa significa "zipalign" e qual è il suo significato?

Quando una ROM afferma di essere "zipallineata" cosa significa e quale differenza rispetto a una ROM che non è "zipallineata"?

Risposte:


21

Questo meccanismo è descritto nel sito degli sviluppatori Android come segue:

zipalign è uno strumento di allineamento dell'archivio che fornisce un'importante ottimizzazione per i file delle applicazioni Android (.apk). Lo scopo è quello di garantire che tutti i dati non compressi inizino con un particolare allineamento rispetto all'inizio del file. In particolare, provoca l'allineamento di tutti i dati non compressi all'interno di .apk, come immagini o file non elaborati, su limiti di 4 byte. Ciò consente di accedere direttamente a tutte le parti con mmap () anche se contengono dati binari con restrizioni di allineamento. Il vantaggio è una riduzione della quantità di RAM consumata durante l'esecuzione dell'applicazione.

In breve: il .apkcontenuto può essere più facile / veloce / accesso più ottimale a causa dell'ordine dei dati all'interno del file compresso.

Per informazioni più approfondite, è disponibile una "guida completa" su AddictiveTips: cos'è Zipalign in Android e come creare app Zipaligned , che risponde alla seconda parte della domanda:

Abbastanza comprensibile, la situazione sarebbe riservata ai pacchetti di applicazioni non allineati. La lettura delle risorse sarebbe lenta e l'utilizzo della memoria sarebbe all'estremità superiore dello spettro. Dipenderebbe anche da quante applicazioni non allineate sono presenti. Ad esempio, se un numero inferiore di applicazioni con un'applicazione home non allineata, vedresti tempi di avvio dell'applicazione più lenti. Questo è lo scenario migliore. Nel peggiore dei casi, la presenza di una serie di applicazioni non allineate comporterà l'avvio e l'uccisione ripetuta dei processi, la lotta con ritardi e l'esaurimento della batteria.


Per i programmatori è più o meno simile a strutturare l'allineamento in C. Non farlo struct x { uint16_t id; uint32_t data[100]; };se vuoi che sia allineato a 32 bit; usostruct x { uint16_t id; uint16_t padding; uint32_t data[100]; };
Matteo Leggi il

Sembra che non ci sia un aspetto negativo, perché tutte le app non sono allineate con zip? Inoltre, questo è davvero un problema per gli utenti finali o è rilevante solo per gli sviluppatori?
Matt,

1
Direi che è un ulteriore passo per lo sviluppatore. E ovviamente la performance è una preoccupazione per gli utenti finali;)
Izzy

1

Per aggiungere sopra come funziona esattamente zipalign -

In un ambiente operativo Android, i file di dati memorizzati in ciascun pacchetto dell'applicazione sono accessibili da più processi, ad esempio, il programma di installazione leggerà il manifest di dati per determinare le autorizzazioni associate; il server di sistema può leggere queste risorse per molteplici motivi, come la visualizzazione delle notifiche; l'applicazione Home, ad esempio, leggerà le risorse per ottenere il nome e l'icona dell'applicazione. Poiché Android si basa su una vera infrastruttura operativa multi-tasking, questi file sono continuamente e ripetutamente accessibili. Infine, ma non meno importante, l'applicazione stessa legge i dati manifest.

Poiché Android è basato su Linux, la mappatura della memoria svolge un ruolo chiave nella gestione efficiente dei processi. In sostanza, l'allineamento ottimale per il codice di gestione delle risorse del sistema operativo Android è i limiti di 4 byte. Ciò significa che, se gli APK sono mappati in memoria su limiti di 4 byte e allineati di conseguenza, il sistema operativo non dovrà "leggere" l'intero pacchetto dell'applicazione per raggiungere il manifest di dati desiderato. Ogni processo di sistema saprà in anticipo dove cercare le risorse desiderate e quindi eseguirà molto più agevolmente e più velocemente.

Riassumendo, zipaligning di un APK si traduce in tutti i dati non compressi all'interno del pacchetto da allineare su limiti di 4 byte, consentendo l'accesso a tutte le parti direttamente con la mappa di memoria. Il consumo di RAM viene ridotto durante l'esecuzione perché il codice di query non deve leggere l'intero pacchetto dell'applicazione.

fonte


Perché non legge l'intero pacchetto dell'applicazione? I manifesti sono garantiti ad un offset specifico?
Kenneth Worden,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.