zipalign

O zipalign é uma ferramenta de alinhamento de arquivo que fornece otimização importante para arquivos de aplicativos Android (APK). O objetivo é garantir que todos os dados não compactados comecem com um alinhamento específico em relação ao início do arquivo. Especificamente, ele faz com que todos os dados descompactados no APK, como imagens ou arquivos brutos, sejam alinhados em limites de 4 bytes. Isso permite que todas as partes sejam acessadas diretamente com mmap(), mesmo que contenham dados binários com restrições de alinhamento. O benefício disso é uma redução na quantidade de RAM consumida ao executar o aplicativo.

É preciso sempre usar essa ferramenta para alinhar seu arquivo APK antes de distribuí-lo aos usuários finais. As ferramentas de compilação do Android podem fazer isso por você. O Android Studio alinha automaticamente seu APK.

Atenção: é necessário usar o zipalign em um de dois pontos específicos no processo de compilação de aplicativo, dependendo da ferramenta de assinatura de apps que você usa:

  • Se você usa o apksigner, só execute o zipalign antes da assinatura do arquivo APK. Se você assinar seu APK usando o apksigner e fizer outras alterações no APK, a assinatura será invalidada.
  • Se você usa o jarsigner, só execute o zipalign depois da assinatura do arquivo APK.

O ajuste é feito alterando o tamanho do campo "extra" nas seções zip de "Local File Header". Os dados existentes nos campos "extra" podem ser alterados por este processo.

Para mais informações sobre como usar o zipalign ao criar seu aplicativo, leia Assinar o aplicativo.

Uso

Para alinhar o infile.apk e salvá-lo como outfile.apk:

zipalign [-f] [-v] <alignment> infile.apk outfile.apk

Para confirmar o alinhamento do existing.apk:

zipalign -c -v <alignment> existing.apk

O <alignment> é um número inteiro que define os limites de alinhamento de bytes. Precisa ser sempre 4 (que fornece alinhamento de 32 bits) ou não terá efeito.

Sinalizações:

  • -f: substitui o outfile.zip existente
  • -v: saída verbose (detalhada)
  • -p: o outfile.zip precisa usar o mesmo alinhamento de página para todos os arquivos de objetos compartilhados no infile.zip
  • -c : confirma o alinhamento do arquivo fornecido