Processo automatizado:
Use esta ferramenta (usa o novo apksigner do Google):
https://github.com/patrickfav/uber-apk-signer
Isenção de responsabilidade: eu sou o desenvolvedor :)
Processo Manual:
Etapa 1: gerar keystore (apenas uma vez)
Você precisa gerar um keystore uma vez e usá-lo para assinar seu unsigned
apk. Use o fornecido pelo JDK encontrado emkeytool
%JAVA_HOME%/bin/
keytool -genkey -v -keystore my.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias app
Etapa 2 ou 4: Zipalign
zipalign
que é uma ferramenta fornecida pelo Android SDK encontrada em, por exemplo, %ANDROID_HOME%/sdk/build-tools/24.0.2/
é uma etapa de otimização obrigatória se você deseja fazer o upload do apk para a Play Store.
zipalign -p 4 my.apk my-aligned.apk
Nota: ao usar o antigo, jarsigner
você precisa zipalign APÓS a assinatura. Ao usar o novo apksigner
método, você o faz ANTES de assinar (confuso, eu sei). Invocar o zipalign antes do apksigner funciona bem porque o apksigner preserva o alinhamento e a compactação do APK (ao contrário do jarsigner).
Você pode verificar o alinhamento com
zipalign -c 4 my-aligned.apk
Etapa 3: assinar e verificar
Usando ferramentas de compilação 24.0.2 e anteriores
Use o jarsigner
qual, como o keytool, vem com a distribuição JDK encontrada em %JAVA_HOME%/bin/
e use-o assim:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my.keystore my-app.apk my_alias_name
e pode ser verificado com
jarsigner -verify -verbose my_application.apk
Usando ferramentas de compilação 24.0.3 e mais recentes
O Android 7.0 apresenta o APK Signature Scheme v2, um novo esquema de assinatura de app que oferece tempos de instalação de app mais rápidos e mais proteção contra alterações não autorizadas em arquivos APK (veja aqui e aqui para mais detalhes). Portanto, o Google implementou seu próprio assinante apk chamadoapksigner
(duh!) O arquivo de script pode ser encontrado em %ANDROID_HOME%/sdk/build-tools/24.0.3/
(o .jar está na /lib
subpasta). Use assim
apksigner sign --ks my.keystore my-app.apk --ks-key-alias alias_name
e pode ser verificado com
apksigner verify my-app.apk
A documentação oficial pode ser encontrada aqui.