Un APK de Android suele contener estas cosas.
assets/
lib/
META-INF/
res/
AndroidManifest.xml
classes.dex
Tras la instalación, el archivo APK se copia en /data/app
y classes.dex
se extrae y se "optimiza" ejecutando dex2oat
en él (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 ser optimizada sólo una vez por instalación o actualización . Todo lo demás se mantiene dentro del APK. Así que la primera respuesta es muy clara: cosas como assets
y res
que requiere la aplicación deben ser proporcionados, y están dentro del APK. El archivo APK se mantiene para fines de apoyo. Si elimina un APK, la aplicación definitivamente no arranca en absoluto. (App: ¿Dónde están mis activos?)
Segundo, Google Play Se ha añadido la compatibilidad con la "Actualización Delta". muy hace mucho tiempo . En el procedimiento de actualización delta, se calcula la diferencia entre el paquete antiguo y el nuevo. A continuación, GP descarga el "Delta" y aplica los cambios al APK original para obtener el APK actualizado, reduciendo así el tamaño de la descarga.
Un APK siempre está firmado. Esto puede evitar la modificación maliciosa del paquete. Definitivamente no querrás instalar una aplicación modificada sin saber qué ha cambiado, o si se ha inyectado un virus. El META-INF/
dentro del APK funciona para este propósito. Los cambios no oficiales harán que la firma no coincida, y el sistema Android se negará a instalar la aplicación modificada.
Además, cuando se actualiza el sistema operativo Android, todos los archivos dex se "optimizan" de nuevo para que no sea necesario volver a instalarlos uno por uno. Como se ha dicho anteriormente, la optimización requiere classes.dex
del paquete original.