Perché Android conserva i file APK delle app installate?


31

Android mantiene i file APK delle app utente installate nella /data/appdirectory e le app di sistema nella /system/appdirectory.

Significa che Android estrae i file dex dai file APK ogni volta che l'app viene avviata? In caso contrario, posso eliminare in sicurezza i file APK ed eseguire ancora l'app?

Risposte:


43

Un APK Android di solito contiene queste cose.

assets/
lib/
META-INF/
res/
AndroidManifest.xml
classes.dex

Al momento dell'installazione, il file APK viene copiato /data/appe classes.dexviene estratto e "ottimizzato" eseguendolo dex2oat( lib/viene anche estratto su Android 5+ ). Il risultato dell'ottimizzazione viene archiviato, /data/dalvik-cache/quindi un'app deve essere ottimizzata una sola volta per installazione o aggiornamento . Tutto il resto è conservato all'interno dell'APK. Quindi la prima risposta è molto chiara: cose come assetse resrichieste dall'app devono essere fornite e si trovano all'interno dell'APK. Il file APK viene conservato a scopo di supporto. Se elimini un APK, l'app sicuramente non si avvierà affatto. (App: dove sono i miei beni?)

In secondo luogo, Google Play ha aggiunto il supporto per "Delta Update" molto tempo fa . Nella procedura di aggiornamento delta, viene calcolata la differenza tra il vecchio pacchetto e il nuovo pacchetto. Quindi GP scarica il "Delta" e applica le modifiche all'APK originale per produrre l'APK aggiornato, riducendo così le dimensioni del download.

Un APK è sempre firmato. Ciò può impedire modifiche dannose al pacchetto. Non vorrai assolutamente installare un'app modificata senza sapere cosa è cambiato o se è stato iniettato un virus. L' META-INF/interno dell'APK funziona a questo scopo. Le modifiche non ufficiali comporteranno una firma non corrispondente e il sistema Android rifiuterà di installare l'app modificata.

Inoltre, quando aggiorni il tuo sistema operativo Android, tutti i file dex vengono nuovamente "ottimizzati" in modo da non doverli reinstallare uno per uno. Come detto sopra, l'ottimizzazione richiede il classes.dexfile dal pacchetto originale.


5
Tieni presente che le capacità di aggiornamento delta di Google Play Store dipendono dall'avere l'APK per calcolare il delta tra la versione installata e quella aggiornata e le patch successive. Inoltre, l'APK è compresso in modo da risparmiare un po 'di spazio (qualcuno ti ricorda la vecchia ZipAlign?)
Tamoghna Chowdhury

@Tamoghna Space non è davvero un problema, altrimenti Android 5+ non si sarebbe estratto lib/da APK, iOS non avrebbe estratto tutto da IPA. È solo per il controllo di integrità di base.
iBug

I file eseguibili raramente si comprimono bene: il risparmio di spazio è più correlato alle risorse compresse come i file XML binarizzati, che non vengono estratti. Inoltre, a proposito di ZipAlign - l'accesso alle risorse può essere leggermente più veloce su file compressi ottimizzati (allineati a parole).
Tamoghna Chowdhury,

1
Quindi i file di risorse come i file html e js non vengono copiati da apk in una posizione specifica nel file system Android?
user1788736

1
@ user1788736 Sì. Sono rimasti nell'APK.
iBug
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.