Por que os arquivos APK precisam ser assinados?
Todo aplicativo Android deve ser assinado digitalmente antes de ser instalado. A assinatura serve a vários propósitos:
- Verifica a identidade do desenvolvedor do aplicativo
- Garante que o APK não foi adulterado
- Permite que o Android corresponda às atualizações do aplicativo com o original
- Necessário para instalação em todos os dispositivos Android
Ferramenta de desktop necessária
A assinatura do APK requer ferramentas de linha de comando (JDK/Android SDK). Isso não pode ser feito em um navegador da web. Siga o guia abaixo para assinar APKs em seu computador.
Método 1: assinar com apksigner (recomendado)
apksigner é a ferramenta oficial de assinatura de APK do Google, incluída no Android SDK Build Tools.
Etapa 1: gerar um armazenamento de chaves
keytool -genkey -v -keystore my-release-key.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias my-key-alias
Etapa 2: assine o APK
apksigner sign --ks my-release-key.jks \
--ks-key-alias my-key-alias \
--out signed-app.apk unsigned-app.apk
Etapa 3: verifique a assinatura
apksigner verify --verbose signed-app.apk
Método 2: assinar com jarsigner (legado)
# Sign
jarsigner -verbose -sigalg SHA256withRSA \
-digestalg SHA-256 \
-keystore my-release-key.jks \
app-unsigned.apk my-key-alias
# Verify
jarsigner -verify -verbose app-signed.apk
Etapa 4: Zipalign (importante!)
Após assinar, otimize o APK com zipalign:
zipalign -v 4 signed-app.apk aligned-app.apk
Assinatura de depuração (para teste)
Para fins de teste, você pode usar o keystore de depuração padrão do Android:
# Location of debug keystore:
# Linux/Mac: ~/.android/debug.keystore
# Windows: C:\Users\{USERNAME}\.android\debug.keystore
# Sign with debug key
apksigner sign --ks ~/.android/debug.keystore \
--ks-key-alias androiddebugkey \
--ks-pass pass:android \
app.apk
Comparação de ferramentas de assinatura
| Métrica | apksigner | jarsigner |
|---|---|---|
| Assinatura V1 | ||
| Assinatura V2 | ||
| Assinatura V3 | ||
| Recomendado | Legado |
Assinante do APK – Perguntas frequentes
Perguntas comuns sobre assinatura de APK, armazenamento de chaves e assinatura de código Android
Por que a ordem de alinhamento (zipalign antes do apksigner) é importante no Android 11–15
Um dos erros mais frequentes que desenvolvedores e modders cometem ao assinar um APK modificado ou mesclado é executar zipalign depois assinando o pacote – ou usar o utilitário jarsigner herdado do Java em vez do Android SDK apksigner do Google. Como o esquema de assinatura APK v2 e v3 calcula um hash criptográfico em todo o layout binário do arquivo ZIP, modificar os deslocamentos de bytes com zipalign após a assinatura invalida imediatamente o bloco de assinatura v2/v3.
A partir do Android 11 (API de nível 30) e aplicado estritamente no Android 14 e 15, o PackageManager exige duas condições não negociáveis para qualquer APK direcionado aos níveis modernos do SDK:
- resources.arsc alinhado de 4 bytes não compactado: A tabela de recursos compilada (resources.arsc) deve ser armazenada descompactada (STORED) e alinhada em um limite de 4 bytes para que o Android possa mapeá-la na memória (mmap) diretamente, sem copiá-la para a RAM. Sempre execute a assinatura zipalign -p -f -v 4 input.apk aligned.apk antes.
- Bloco de assinatura v2+ obrigatório: Assinar um APK direcionado à API 30+ com jarsigner (que grava apenas uma assinatura v1 META-INF/) fará com que o Android 11–15 rejeite a instalação com INSTALL_PARSE_FAILED_NO_CERTIFICATES. Use o gerador de comando interativo acima para criar o comando apksigner --v2-signing-enabled=true exato para seu keystore ou verifique sua saída assinada em nosso Verificador de assinatura APK.