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/app
y classes.dex
se 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 assets
y res
que 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.dex
archivo del paquete original.