Por que o Android mantém arquivos APK de aplicativos instalados?

31

O Android mantém arquivos APK de aplicativos de usuário instalados no /data/appdiretório e aplicativos do sistema no /system/appdiretório.

Isso significa que o Android extrai os arquivos dex dos arquivos APK toda vez que o aplicativo é iniciado? Caso contrário, posso excluir com segurança os arquivos APK e ainda executar o aplicativo?

PrashanD
fonte

Respostas:

43

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/appe classes.dexextraído e "otimizado" executando dex2oatnele (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 assetse resexigidas 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.dexarquivo do pacote original.

iBug
fonte
5
Observe que as habilidades de atualização delta da Google Play Store dependem de o APK calcular o delta entre as versões instalada e atualizada, e os patches subsequentes. Além disso, o APK é comprimido por isso poupa algum espaço (alguém se lembra Ye Olde zipalign?)
Tamoghna Chowdhury
@Tamoghna Space não é realmente um problema, caso contrário, o Android 5+ não teria extraído lib/do APK, o iOS não teria extraído tudo do IPA. É apenas para verificação de integridade básica.
iBug
Os executáveis ​​raramente compactam bem - a economia de espaço está mais relacionada a recursos compactados, como os arquivos XML binarizados, que não são extraídos. Além disso, o acesso a recursos ZipAlign - pode ser um pouco mais rápido em arquivos compactados otimizados (leia alinhados por palavras).
Tamoghna Chowdhury
1
Portanto, os arquivos de ativos, como arquivos html e js, não são copiados do apk para um local específico no sistema de arquivos android?
user1788736
1
@ user1788736 Sim. Eles são deixados no APK.
iBug