# APK

Android Application Pack, ou Android Package (abreviado APK, em português Pacote de Aplicação Android) é um arquivo de aplicação proprietário da empresa Google destinado ao sistema operacional móvel Android, um formato de arquivo informático de instalação de aplicativos .apk; comparado com os arquivos proprietários de instalação de software do sistema Windows, como o .exe ou o .msi.
Este tipo de arquivo informático tem um formato semelhante a compressão que é feita pelo ZIP, e em seu interior ficam todos os arquivos necessários para a instalação de apps e jogos. Para criar um arquivo APK, todo o código-fonte da aplicação é compilado e depois empacotado em um único arquivo, usando ferramentas como o programa aapt, dx.bat (encontradas no Android SDK), javac, usado na compilação das classes java presente no código-fonte, e outros programas específicos. O APK é um formato de compressão ZIP baseado no formato JAR.
O APK pode ser obtido oficialmente na loja virtual do Google Play ou baixados em sites de terceiros ou também, após o desenvolvimento da aplicação feita em um Ambiente de Desenvolvimento Integrado (IDE) como o Android Studio ou no Kit de Desenvolvimento Android (SDK) via linha de comando. Caso o APK seja baixado em sites de terceiros, a instalação é feita simplesmente clicando no arquivo.apk baixado no smartphone Android. Já para os desenvolvedores a instalação é feita automaticamente no emulador Android. Se caso o desenvolvedor queira testar a aplicação no smartphone, usa-se o programa de depuração adb (Android Debugger). Também são encontrados instalados nativamente no sistema, são chamados popularmente de "apps nativos" como por exemplo: relógio, calendário, telefone, contatos, etc.

## Visão Geral

O APK é análogo a outros pacotes de software, como APPX no Microsoft Windows, APP para HarmonyOS ou um pacote Debian em sistemas operacionais baseados no Debian. Para criar um arquivo APK, um programa para Android é primeiro compilado usando uma ferramenta como o Android Studio ou Visual Studio e, em seguida, todas as suas partes são empacotadas em um único arquivo de contêiner. Um arquivo APK contém todo o código de um programa (como arquivos .dex), recursos, ativos, certificados e o arquivo manifesto. Como acontece com muitos formatos de arquivo, os arquivos APK podem ter qualquer nome necessário, mas pode ser necessário que o nome do arquivo termine com a extensão de arquivo para ser reconhecido como tal.
A maioria das implementações do Android permite que os usuários instalem manualmente arquivos APK apenas depois de ativarem a configuração de "Fontes desconhecidas", que permite a instalação de fontes que não são confiáveis, como o Google Play. Isso pode ser feito por muitas razões, como durante o desenvolvimento de aplicativos, para instalar aplicativos não encontrados na loja ou para instalar uma versão mais antiga de um aplicativo existente.

## Conteúdo do APK

O arquivo APK, geralmente contém os seguintes arquivos e diretórios:
* META-INF / :diretório que contém:
** MANIFEST.MF :arquivo de manifesto.
** CERT.RSA :certificado de aplicativo.
** CERT.SF :listas de recursos e assinatura criptografada baseado em SHA-1.
* lib / :diretório que contém código nativo compilado para uma arquitetura de processador específica. Exemplo: armeabi-v7a, arm64-v8a, mips, x86, etc.
* res / :diretório de recursos. É dividido em vários subdiretórios:
** drawable / : diretório de arquivos Bitmap (.png, .9.png, .jpg, .gif) ou arquivos XML.
** layout / : diretório de arquivos XML que definem um layout de interface do usuário.
** mipmap / : diretório de ícones com diferentes densidades que será exibido no inicializador (launcher).
** values / : diretório de arquivos XML que contêm valores simples, como strings, números inteiros, cores, estilos e dimensões.
Além dos diretórios citados anteriormente, há outros diretórios específicos como: anim/, menu/, raw/, xml/, etc.
* AndroidManifest.xml : arquivo de manifesto adicional do Android contendo o nome e versão do aplicativo, permissões de acesso, etc.
* classes.dex : arquivo executável Dalvik compilado a partir do código-fonte java, e executado na Máquina VIrtual Dalvik ou no Android Runtime (ART).
* resources.arsc : arquivo que contém recursos pré-compilados do diretório "values / " usados na aplicação.