Pourquoi Android conserve-t-il les fichiers APK des applications installées?

31

Android conserve les fichiers APK des applications utilisateur installées dans le /data/apprépertoire et les applications système dans le /system/apprépertoire.

Cela signifie-t-il qu'Android extrait les fichiers dex des fichiers APK à chaque lancement de l'application? Sinon, puis-je supprimer en toute sécurité les fichiers APK et continuer à exécuter l'application?

PrashanD
la source

Réponses:

43

Un APK Android contient généralement ces éléments.

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

Lors de l'installation, le fichier APK est copié /data/appet classes.dexest extrait et "optimisé" en s'exécutant dex2oatdessus (sur Android 5+ lib/est également extrait). Le résultat de l'optimisation est stocké dans /data/dalvik-cache/une application ne doit donc être optimisée qu'une seule fois par installation ou mise à jour . Tout le reste est conservé dans l'APK. Donc, la première réponse est très claire: des choses comme assetset ce resqui est requis par l'application doivent être fournies, et elles sont à l'intérieur de l'APK. Le fichier APK est conservé à des fins d'assistance. Si vous supprimez un APK, l'application ne démarrera certainement pas du tout. (Application: où sont mes actifs?)

Deuxièmement, Google Play a ajouté la prise en charge de "Delta Update" il y a très longtemps . Dans la procédure de mise à jour delta, la différence entre l'ancien package et le nouveau package est calculée. Ensuite, GP télécharge le "Delta" et applique les modifications à l'APK d'origine pour produire l'APK mis à jour, réduisant ainsi la taille du téléchargement.

Un APK est toujours signé. Cela peut empêcher une modification malveillante du package. Vous ne voulez certainement pas installer une application modifiée sans savoir ce qui a changé ou si un virus a été injecté. L' META-INF/intérieur de l'APK fonctionne à cet effet. Les modifications non officielles entraîneront une signature non correspondante et le système Android refusera d'installer l'application modifiée.

De plus, lorsque vous mettez à jour votre système d'exploitation Android, tous les fichiers dex sont à nouveau "optimisés" afin que vous n'ayez pas besoin de les réinstaller un par un. Comme indiqué ci-dessus, l'optimisation nécessite un classes.dexfichier du package d'origine.

iBug
la source
5
Notez que les capacités de mise à jour delta de Google Play Store dépendent de la présence de l'APK pour calculer le delta entre les versions installée et mise à jour, et des correctifs ultérieurs. De plus, l'APK est compressé afin d'économiser de l'espace (vous vous souvenez de ZipAlign?)
Tamoghna Chowdhury
@Tamoghna Space n'est pas vraiment un problème, sinon Android 5+ n'aurait pas extrait lib/d'APK, iOS n'aurait pas tout extrait d'IPA. C'est juste pour le contrôle d'intégrité de base.
iBug
Les exécutables compressent rarement bien - l'économie d'espace est plus liée aux ressources compressées comme les fichiers XML binarisés, qui ne sont pas extraits. En outre, à propos de ce ZipAlign - l'accès aux ressources peut être un peu plus rapide sur les fichiers compressés optimisés (alignés sur les mots).
Tamoghna Chowdhury
1
Donc, les fichiers d'actifs tels que les fichiers html et js ne sont pas copiés depuis apk vers un emplacement spécifique dans le système de fichiers Android?
user1788736
1
@ user1788736 Oui. Ils sont laissés dans l'APK.
iBug