Um APK Android geralmente contém essas coisas.
assets/
lib/
META-INF/
res/
AndroidManifest.xml
classes.dex
Após a instalação, o arquivo APK é copiado /data/app
e classes.dex
extraído e "otimizado" executando dex2oat
nele (no Android 5+ lib/
também é extraído). O resultado da otimização é armazenado /data/dalvik-cache/
para que um aplicativo precise ser otimizado apenas uma vez por instalação ou atualização . Todo o resto é mantido dentro do APK. Portanto, a primeira resposta é muito clara: coisas como assets
e res
exigidas pelo aplicativo devem ser fornecidas e estão dentro do APK. O arquivo APK é mantido para fins de suporte. Se você excluir um APK, o aplicativo definitivamente não será iniciado. (Aplicativo: onde estão meus ativos?)
Segundo, o Google Play adicionou suporte ao "Delta Update" há muito tempo . No procedimento de atualização delta, é calculada a diferença entre o pacote antigo e o novo pacote. Em seguida, o GP baixa o "Delta" e aplica as alterações no APK original para gerar o APK atualizado, reduzindo assim o tamanho do download.
Um APK é sempre assinado. Isso pode impedir modificações maliciosas no pacote. Você definitivamente não deseja instalar um aplicativo modificado sem saber o que foi alterado ou se um vírus foi injetado. O META-INF/
interior do APK funciona para esse fim. Alterações não oficiais resultarão em uma assinatura não correspondente e o sistema Android se recusará a instalar o aplicativo modificado.
Além disso, quando você atualiza o sistema operacional Android, todos os arquivos dex são "otimizados" novamente, para que você não precise reinstalá-los um por um. Como dito acima, a otimização requer um classes.dex
arquivo do pacote original.