MASTG-KNOW-0003: App Signing

O Android exige que todos os APKs sejam assinados digitalmente com um certificado antes de serem instalados ou executados. A assinatura digital é usada para verificar a identidade do proprietário para atualizações de aplicativos. Esse processo pode impedir que um aplicativo seja adulterado ou modificado para incluir código malicioso.

Quando um APK é assinado, um certificado de chave pública é anexado a ele. Este certificado associa exclusivamente o APK ao desenvolvedor e à sua chave privada. Quando um aplicativo é construído em modo de depuração (debug), o Android SDK assina o aplicativo com uma chave de depuração criada especificamente para fins de debugging. Um aplicativo assinado com uma chave de depuração não deve ser distribuído e não será aceito na maioria das lojas de aplicativos, incluindo a Google Play Store.

O build final de release de um aplicativo deve ser assinado com uma chave de release válida. No Android Studio, o aplicativo pode ser assinado manualmente ou por meio da criação de uma configuração de assinatura atribuída ao tipo de build de release.

Antes do Android 9 (API level 28), todas as atualizações de aplicativos no Android precisavam ser assinadas com o mesmo certificado, portanto, recomenda-se um período de validade de 25 anos ou mais. Aplicativos publicados no Google Play devem ser assinados com uma chave que tenha um período de validade posterior a 22 de outubro de 2033.

Três esquemas de assinatura de APK estão disponíveis:

  • Assinatura JAR (esquema v1),
  • Esquema de Assinatura de APK v2 (esquema v2),
  • Esquema de Assinatura de APK v3 (esquema v3).

A assinatura v2, suportada a partir do Android 7.0 (API level 24) e superior, oferece segurança e desempenho melhorados em comparação com o esquema v1. A assinatura v3, suportada a partir do Android 9 (API level 28) e superior, permite que os aplicativos alterem suas chaves de assinatura como parte de uma atualização de APK. Essa funcionalidade garante compatibilidade e disponibilidade contínua dos aplicativos, permitindo que tanto a nova quanto a antiga chave sejam usadas. Observe que, no momento desta escrita, ela está disponível apenas via apksigner.

Para cada esquema de assinatura, os builds de release devem sempre ser assinados por meio de todos os seus esquemas anteriores também.