¿Por qué Android mantiene archivos APK de aplicaciones instaladas?

31

Android mantiene los archivos APK de las aplicaciones de usuario instaladas en el /data/appdirectorio y las aplicaciones del sistema en el /system/appdirectorio.

¿Significa que Android extrae los archivos dex de los archivos APK cada vez que se inicia la aplicación? Si no es así, ¿puedo eliminar de forma segura los archivos APK y seguir ejecutando la aplicación?

PrashanD
fuente

Respuestas:

43

Un APK de Android generalmente contiene estas cosas.

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

Tras la instalación, el archivo APK se copia /data/appy classes.dexse extrae y "optimiza" ejecutándolo dex2oat(en Android 5+ lib/también se extrae). El resultado de la optimización se almacena en, /data/dalvik-cache/por lo que una aplicación debe optimizarse solo una vez por instalación o actualización . Todo lo demás se mantiene dentro del APK. Entonces, la primera respuesta es muy clara: se deben proporcionar cosas como assetsy resque requiere la aplicación, y están dentro del APK. El archivo APK se mantiene con fines de soporte. Si elimina un APK, la aplicación definitivamente no se iniciará en absoluto. (Aplicación: ¿Dónde están mis activos?)

En segundo lugar, Google Play apoyo a la "actualización delta" añadió muy hace mucho tiempo . En el procedimiento de actualización delta, se calcula la diferencia entre el paquete anterior y el nuevo. Luego GP descarga el "Delta" y aplica los cambios al APK original para obtener el APK actualizado, reduciendo así el tamaño de descarga.

Un APK siempre está firmado. Esto puede evitar modificaciones maliciosas en el paquete. Definitivamente no desea instalar una aplicación modificada sin saber qué ha cambiado o si se ha inyectado un virus. El META-INF/interior del APK funciona para este propósito. Los cambios no oficiales resultarán en una firma no coincidente, y el sistema Android se negará a instalar la aplicación modificada.

Además, cuando actualiza su sistema operativo Android, todos los archivos dex se "optimizan" nuevamente para que no necesite volver a instalarlos uno por uno. Como se dijo anteriormente, la optimización requiere un classes.dexarchivo del paquete original.

iBug
fuente
55
Tenga en cuenta que las capacidades de actualización delta de Google Play Store dependen de tener el APK para calcular el delta entre las versiones instaladas y actualizadas, y los parches posteriores. Además, el APK está comprimido, por lo que ahorra espacio (¿alguien recuerda el antiguo ZipAlign?)
Tamoghna Chowdhury
@Tamoghna Space no es realmente un problema, de lo contrario, Android 5+ no se habría extraído lib/de APK, iOS no habría extraído todo de IPA. Es solo para la comprobación de integridad básica.
iBug
Los ejecutables rara vez se comprimen bien: el ahorro de espacio está más relacionado con los recursos comprimidos, como los archivos XML binarizados, que no se extraen. Además, sobre eso ZipAlign: el acceso a los recursos puede ser algo más rápido en archivos comprimidos optimizados (leídos alineados con palabras).
Tamoghna Chowdhury
1
Entonces, ¿los archivos de activos como los archivos html y js no se copian de apk a una ubicación específica en el sistema de archivos de Android?
user1788736
1
@ usuario1788736 Sí. Quedan en la APK.
iBug