Assinar o app

O Android exige que todos os APKs sejam assinados digitalmente com um certificado antes de serem instalados em um dispositivo ou atualizados. Ao lançar usando Android App Bundles, é necessário assinar seu pacote de app com uma chave de upload antes de fazer upload dele para o Play Console, e a Assinatura de apps do Google Play cuida do resto. Para distribuição de apps com APKs na Play Store (criados antes de agosto de 2021) ou em outras lojas, é necessário assinar os APKs manualmente para upload.

Esta página guia você por alguns conceitos importantes relacionados à assinatura e segurança de apps e mostra como assinar seu app para lançamento no Google Play usando o Android Studio e como configurar a Assinatura de apps do Google Play.

Veja a seguir uma visão geral de alto nível das etapas que você pode precisar seguir para assinar e publicar um novo app no Google Play:

  1. Gerar uma chave de upload e um keystore
  2. Assinar seu app com a chave de upload
  3. Configurar a Assinatura de apps do Google Play
  4. Faça upload do seu app no Google Play.
  5. Prepare e lance seu app.

Se, em vez disso, seu app já estiver publicado na Google Play Store com uma chave de assinatura do app já existente ou se você quiser escolher a chave de assinatura de um novo app em vez de permitir que o Google gere uma, siga estas etapas:

  1. Assine seu app com a chave de assinatura do app e selecione a opção para criptografar e exportar a chave.
  2. Faça upload da chave de assinatura do app na Assinatura de apps do Google Play.
  3. (Recomendado) Gere e registre um certificado de upload para atualizações futuras do seu app.
  4. Faça upload do seu app no Google Play.
  5. Prepare e lance seu app.

Esta página também explora como gerenciar suas próprias chaves ao enviar seu app para outras app stores. Se você não usa o Android Studio ou prefere assinar seu app na linha de comando, saiba como usar o apksigner.

Assinatura de apps do Google Play

Com a Assinatura de apps do Google Play, o Google gerencia e protege a chave de assinatura do app e a utiliza para assinar seus APKs para distribuição. Como os pacotes de app adiam a criação e assinatura de APKs para o Google Play Store, é necessário configurar a Assinatura de Apps do Google Play antes de fazer upload do pacote de app. Isso tem os seguintes benefícios:

  • Use o Android App Bundle e adicione compatibilidade com os modos de entrega avançados do Google Play. O Android App Bundle deixa seu app muito menor, simplifica as versões e possibilita usar módulos de recursos e oferecer experiências instantâneas.
  • Aumente a segurança da sua chave de assinatura e ofereça o uso de uma chave de upload diferente para assinar o pacote de app enviado ao Google Play.
  • O upgrade de chave único para novas instalações permite alterar a chave de assinatura do app caso a atual seja comprometida ou você precise migrar para uma chave criptograficamente mais forte.

A Assinatura de apps do Google Play usa duas chaves: a chave de assinatura do app e a chave de upload, que são detalhadas na seção sobre Chaves e keystores. Você ficará com a chave de upload e a usará para assinar seus apps quando fizer upload na Google Play Store. O Google usa o certificado de upload para verificar sua identidade e assina os APKs com a chave de assinatura do app para distribuição, como mostrado na figura 1. Dessa forma, você pode solicitar uma redefinição da chave de upload caso sua chave seja perdida ou comprometida.

Como comparação, para apps criados antes de agosto de 2021 que não ativaram a Assinatura de apps do Google Play, se você perder a chave de assinatura do app, não poderá mais atualizar o app.

Figura 1. Assinar um aplicativo com a Assinatura de apps do Google Play

Suas chaves são armazenadas na mesma infraestrutura usada para armazenar as chaves do Google. Lá, elas são protegidas pelo serviço de gerenciamento de chaves do Google. Saiba mais sobre a infraestrutura técnica do Google na Documentação de segurança do Google Cloud.

Se você perder sua chave de upload ao usar a Assinatura de aplicativos do Google Play ou se ela for comprometida, entre em contato com o Google para revogar sua chave de upload antiga e gerar uma nova. Como a chave de assinatura do seu app é protegida pelo Google, você pode continuar fazendo upload de novas versões do app como atualizações da versão original, mesmo que mude de chave de upload. Para saber mais, leia Redefinir uma chave de upload privada perdida ou comprometida.

A próxima seção descreve alguns termos e conceitos importantes relacionados à assinatura e segurança de apps. Se preferir avançar e aprender a preparar seu app para upload na Google Play Store, acesse Assinar seu app para lançamento.

Keystores, chaves e certificados

Keystores Java (.jks ou .keystore) são arquivos binários que servem como repositórios de certificados e chaves privadas.

Um certificado de chave pública (arquivos .der ou .pem), também conhecido como certificado digital ou certificado de identidade, contém a chave pública de um par de chaves pública/privada, bem como alguns outros metadados (por exemplo, nome e local) que identificam o proprietário detentor da chave privada correspondente.

Veja a seguir os diferentes tipos de chaves que você precisa entender:

  • Chave de assinatura do app: chave usada para assinar APKs instalados no dispositivo de um usuário. Como parte do modelo de atualização segura do Android, a chave de assinatura nunca é alterada durante o ciclo de vida do app. A chave de assinatura do app é privada e precisa ser mantida em segredo. No entanto, é possível compartilhar o certificado gerado usando sua chave de assinatura do app.
  • Chave de upload: chave usada para assinar o pacote de apps ou o APK antes do envio para Assinatura de apps com o Google Play. A chave de upload precisa ser mantida em segredo. No entanto, é possível compartilhar o certificado gerado usando a chave de upload. É possível gerar uma chave de upload de uma das seguintes maneiras:

    • Se você solicitar que o Google gere a chave de assinatura do app no momento da ativação, a chave usada para assinar seu app no lançamento será definida como a chave de upload.
    • Se você fornecer a chave de assinatura do app ao Google quando ativar o recurso para um app novo ou existente, terá a opção de gerar uma nova chave de upload durante ou após a ativação para aumentar a segurança.
    • Se você não gerar uma nova chave de upload, continue usando a chave de assinatura do app como chave de upload para assinar cada versão.

    Dica: para proteger suas chaves, é importante que as chaves de upload e de assinatura do app sejam diferentes.

Como trabalhar com provedores de API

Você pode fazer o download do certificado para a chave de assinatura do app e para a chave de upload na página Versão > Configuração > Integridade do app no Play Console. Isso é usado para registrar chaves públicas nos provedores de API. Ele precisa ser compartilhado, porque não contém sua chave privada.

Uma impressão digital do certificado é uma representação curta e exclusiva de um certificado que é solicitada frequentemente pelos provedores de API com o nome do pacote ao registrar um app para usar o respectivo serviço. As impressões digitais MD5, SHA-1 e SHA-256 dos certificados de upload e de assinatura de apps estão disponíveis na página de assinatura de apps do Play Console. Para acessar outras impressões digitais, faça o download do certificado original (.der) na mesma página.

Assinar o build de depuração

Durante a execução ou depuração do projeto no ambiente de desenvolvimento integrado, o Android Studio assina automaticamente o app com um certificado de depuração gerado pelas Ferramentas do SDK do Android. Na primeira vez em que um projeto é executado ou depurado no Android Studio, o ambiente de desenvolvimento integrado cria automaticamente o keystore e o certificado de depuração em $HOME/.android/debug.keystore e define as senhas do keystore e da chave.

Como o certificado de depuração é criado pelas ferramentas de compilação e não é seguro, a maioria das app stores (inclusive o Google Play Store) não aceita a publicação de aplicativos assinados com um certificado de depuração.

O Android Studio armazena automaticamente as informações de assinatura de depuração em uma configuração de assinatura, evitando que você tenha que inseri-las a cada depuração. A configuração de assinatura é um objeto que consiste em todas as informações necessárias para assinar o app, inclusive a localização e a senha do keystore e o nome e a senha da chave.

Para mais informações sobre como criar e executar apps para depuração, consulte Criar e executar seu app.

Expiração do certificado de depuração

O certificado autoassinado usado para assinar o app na depuração tem uma data de validade de 30 anos a partir da criação. Quando o certificado expira, um erro de compilação é gerado.

Para corrigir esse problema, basta excluir o arquivo debug.keystore armazenado em um dos seguintes locais:

  • ~/.android/ no OS X e Linux
  • C:\Documents and Settings\user\.android\ no Windows XP
  • C:\Users\user\.android\ no Windows Vista e Windows 7, 8, e 10

Na próxima vez que você criar e executar uma versão de depuração do seu app, o Android Studio criará um novo keystore e uma nova chave de depuração.

Assinar seu app para lançamento no Google Play

Quando estiver pronto para publicar seu app, você precisará assiná-lo e fazer upload dele para uma app store, como o Google Play. Ao publicar seu app no Google Play pela primeira vez, você também precisa configurar a Assinatura de apps do Google Play. Esse recurso é opcional para apps criados antes de agosto de 2021. Esta seção mostra como assinar seu app para lançamento e como configurar a Assinatura de apps do Google Play.

Gerar uma chave de upload e um keystore

Se você ainda não tiver uma chave de upload, que é útil na configuração da Assinatura de apps do Google Play, poderá gerar uma usando o Android Studio da seguinte maneira:

  1. Na barra de menus, clique em Build > Generate Signed Bundle/APK.
  2. Na caixa de diálogo Generate Signed Bundle or APK, selecione Android App Bundle ou APK e clique em Next.
  3. Abaixo do campo Key store path, clique em Create new.
  4. Na janela New Key Store, forneça a seguinte informação para seu keystore e sua chave, como mostra a figura 2.

    Figura 2. Criar uma nova chave de upload e keystore no Android Studio.

  5. Keystore

    • Key store path: selecione o local onde o keystore será criado.
    • Password: crie e confirme uma senha segura para o keystore.
  6. Key

    • Alias: insira um nome de identificação para a chave.
    • Password: crie e confirme uma senha segura para a chave. Essa senha precisa ser diferente da escolhida para o keystore.
    • Validity (years): defina o período de validade da chave em anos. A chave precisa ser válida por 25 anos ou mais para que seja possível assinar atualizações de apps com a mesma chave durante a vida útil do app.
    • Certificate: insira algumas informações pessoais para o certificado. Essas informações não são exibidas no app, mas são incluídas no certificado como parte do APK.
  7. Após preencher o formulário, clique em OK.

  8. Se você quiser criar e assinar seu app com a chave de upload, prossiga para a seção sobre como Assinar seu app com a chave de upload. Se quiser gerar apenas a chave e o keystore, clique em Cancelar.

Assinar o app com sua chave

Se você já tiver uma chave de upload, use-a para assinar seu app. Se, em vez disso, o app já estiver assinado e publicado na Google Play Store com uma chave de assinatura, use-a para assiná-lo e criptografe e exporte a chave para ativar a Assinatura de aplicativos do Google Play no seu app. Mais tarde, você pode gerar uma chave de upload separada e registrar o certificado público da chave de upload com o Google Play para assinar e fazer upload de atualizações para seu app.

Para assinar o app com o Android Studio e exportar uma chave de assinatura existente, siga estas etapas:

  1. Se a caixa de diálogo Generate Signed Bundle or APK não estiver aberta, clique em Build > Generate Signed Bundle/APK.
  2. Na caixa de diálogo Generate Signed Bundle or APK, selecione Android App Bundle ou APK e clique em Next.
  3. Selecione um módulo na lista suspensa.
  4. Especifique o caminho para seu keystore, o alias da chave e as senhas de ambos. Se você ainda não preparou uma chave e um keystore de upload, gere uma chave e um keystore de upload e volte para completar esta etapa.

    Figura 3. Assinar o app com a chave de upload.

  5. Se você estiver assinando um pacote de apps com uma chave de assinatura existente e quiser ativar a Assinatura de apps do Google Play mais tarde, marque a caixa ao lado de Export encrypted key e especifique um caminho para salvar a chave de assinatura como um arquivo *.pepk criptografado. Você pode usar a chave de assinatura criptografada para ativar a Assinatura de apps do Google Play em um app existente.

  6. Clique em Next.

  7. Na janela seguinte (mostrada na figura 4), selecione uma pasta de destino para o app assinado, selecione o tipo de build e escolha as variações do produto, se houver mais de uma.

  8. Se você estiver criando e assinando um APK, precisará selecionar quais Signature Versions quer que sejam compatíveis com seu app. Para saber mais, leia sobre esquemas de assinatura de apps

  9. Clique em Finish.

    Figura 4. Gere uma versão assinada do app para as variações de produto selecionadas.

Figura 5. Clique no link na janela pop-up para analisar ou localizar seu pacote de apps ou localizar a chave de assinatura exportada.

Depois que o Android Studio terminar de criar o app assinado, será possível localizar ou analisar seu app clicando na opção adequada na notificação pop-up. Se você selecionar a opção de exportar sua chave de assinatura, poderá navegar rapidamente até ela clicando na seta suspensa no canto inferior direito da pop-up para expandi-la. Depois disso, clique em Show Exported Key File, como mostrado na figura 5.

Agora está tudo pronto para ativar a Assinatura de apps do Google Play e fazer upload do app para lançamento. Se você for novo no processo de publicação de apps, consulte a Visão geral de lançamento. Caso contrário, prossiga para a página sobre como Fazer upload do seu app para o Play Console.

Como usar a Assinatura de apps do Google Play

Conforme descrito anteriormente nesta página, é necessário configurar a Assinatura de apps do Google Play para assinar seu app para distribuição no Google Play, exceto no caso de apps criados antes de agosto de 2021, que podem continuar distribuindo APKs autoassinados. As etapas que você precisa seguir dependem do app ainda não ter sido publicado no Google Play ou já ter sido assinado e publicado antes de agosto de 2021 usando uma chave de assinatura existente.

Configurar um novo app

Para configurar a assinatura de um app que ainda não foi publicado no Google Play, faça o seguinte:

  1. Se você ainda não tiver feito isso, gere uma chave de upload e assine o app com ela.
  2. Faça login no Play Console.
  3. Siga as etapas em Preparar e lançar uma versão para criar uma nova versão.
  4. Depois de escolher a faixa de lançamento, configure a assinatura de apps na seção Integridade do app da seguinte maneira:
    • Para que o Google Play gere uma chave de assinatura do app e a utilize para assinar seu app, não é necessário fazer nada. A chave usada para assinar a primeira versão passará a ser a chave de upload, que será aplicada a versões futuras.
    • Para usar a mesma chave de outro app da sua conta de desenvolvedor, selecione Mudar a chave de assinatura do app > Usar minha própria chave > Usar a mesma chave de outro app desta conta, selecione um app e clique em Continuar.
    • Para fornecer sua chave de assinatura para o Google usar ao assinar seu app, selecione Mudar a chave de assinatura do app > Usar minha própria chave e selecione uma das opções que permite fazer upload de uma chave privada e do certificado público correspondente de maneira segura.

Na seção chamada Pacotes de app, clique em Procurar arquivos para localizar e fazer upload do app assinado com a chave de upload. Para mais informações sobre como lançar seu app, consulte Preparar e lançar uma versão. Quando você lança seu app depois de configurar a Assinatura de apps do Google Play, o Google Play gera e gerencia a chave de assinatura do app, a menos que você faça upload de uma chave existente. Basta assinar atualizações subsequentes do seu app com a chave de upload antes de enviá-lo para o Google Play.

Se você precisar criar uma nova chave de upload para seu app, consulte a seção sobre como Redefinir uma chave de upload privada perdida ou comprometida.

Ativar um app existente

Se você estiver atualizando um app que já foi publicado no Google Play com uma chave de assinatura existente, ative a Assinatura de apps do Google Play da seguinte maneira:

  1. Se você ainda não fez isso, assine o app com a chave de assinatura do app existente do Android Studio e não se esqueça de marcar a caixa ao lado de Export encrypted key para salvar a chave como um arquivo *.pepk criptografado. Você precisará desse arquivo em uma etapa posterior. Isso também pode ser feito usando a ferramenta PEPK, que pode ser salva no Play Console.
  2. Faça login no Play Console e navegue até seu app.
  3. No menu à esquerda, clique em Versão > Configuração > Integridade do app.
  4. Se necessário, leia os Termos de Serviço e selecione Aceitar.
  5. Selecione a opção que melhor descreve a chave de assinatura que você quer enviar para o Google Play e siga as instruções mostradas. Por exemplo, se você tiver usado o Android Studio para exportar a chave de assinatura do app, conforme descrito nesta página, selecione Fazer upload de uma chave exportada do Android Studio e faça upload do arquivo *.pepk da chave.
  6. Clique em Inscrever-se.

Você verá uma página com os detalhes dos certificados de assinatura e upload do seu app. O Google Play assinará o app com a chave existente ao implantá-lo para os usuários. No entanto, um dos benefícios mais importantes da Assinatura de apps do Google Play é a capacidade de separar a chave que você usou para assinar o artefato enviado ao Google Play da chave que o Google Play usa para assinar seu app para distribuição aos usuários. Então, considere seguir as etapas da próxima seção para gerar e registrar uma chave de upload separada.

Gerar e registrar um certificado de upload

Quando você publica um app não assinado por uma chave de upload, o Google Play Console oferece a opção de registrar uma chave para atualizações futuras do app. Essa é uma etapa opcional, mas recomendamos publicar o app com uma chave diferente daquela usada pelo Google Play para distribuir seu app aos usuários. Dessa forma, o Google mantém sua chave de assinatura segura e você tem a opção de redefinir uma chave de upload privada perdida ou comprometida. Esta seção descreve como criar uma chave de upload, gerar um certificado de upload a partir dela e registrar o certificado com o Google Play para atualizações futuras do app.

A seguir, descrevemos as situações em que você pode encontrar a opção de registrar um certificado de upload no Play Console:

  • Quando você publica um novo app assinado com uma chave de assinatura e ativa a Assinatura de Apps do Google Play nele.
  • Quando você está prestes a publicar um app que já tem a Assinatura de apps do Google Play ativada, mas ele está assinado com a própria chave de assinatura.

Se você não estiver publicando uma atualização para um app existente com a opção de Assinatura de apps do Google Play ativada e quiser registrar um certificado de upload, realize as etapas abaixo e prossiga para a seção sobre como redefinir uma chave de upload privada perdida ou comprometida

Se você ainda não tiver feito isso, gere um keystore e uma chave de upload.

Depois de criar o keystore e a chave de upload, gere um certificado público com essa usando a keytool com o seguinte comando:

$ keytool -export -rfc
  -keystore your-upload-keystore.jks
  -alias upload-alias
  -file output_upload_certificate.pem

Agora que você tem um certificado de upload, registre-o no Google quando solicitado no Play Console ou leia a seção abaixo para registrá-lo com a equipe de suporte do Google Play.

Atualizar a chave de assinatura do seu app

Em algumas circunstâncias, pode ser necessário alterar a chave de assinatura do seu app. Você pode querer uma chave criptograficamente mais forte, por exemplo, ou sua chave de assinatura pode ter sido comprometida. No entanto, como os usuários só poderão atualizar seu app se a atualização for assinada com a mesma chave de assinatura, é difícil alterar a chave de um app já publicado.

Se você publicar seu app no Google Play, poderá atualizar a chave de assinatura dele no Play Console: sua nova chave será usada para assinar novas instalações e atualizações do app, enquanto a chave antiga será usada para assinar atualizações de usuários que instalaram seu app antes da mudança.

Para saber mais, leia Atualizar a chave de assinatura do app para novas instalações.

Redefinir uma chave de upload privada perdida ou comprometida

Se você perder sua chave de upload privada ou se ela for comprometida, crie uma nova e entre em contato com a equipe de suporte do Google Play para redefinir a chave.

Configurar o processo de compilação para assinatura automática do app

No Android Studio, é possível configurar o projeto para assinar automaticamente a versão de lançamento do app durante o processo de compilação criando uma configuração de assinatura e atribuindo-a ao tipo de build de lançamento. Uma configuração de assinatura consiste em um local de keystore, uma senha de keystore, um alias da chave e uma senha da chave. Para criar uma configuração de assinatura e atribuí-la ao tipo de build de lançamento usando o Android Studio, siga estas etapas:

  1. Na janela Project, clique com o botão direito do mouse no app e escolha Open Module Settings.
  2. Na janela Project Structure, em Modules no painel esquerdo, clique no módulo que você quer assinar.
  3. Clique na guia Signing e depois em Add .
  4. Selecione o arquivo do keystore, insira um nome para essa configuração de assinatura (é possível criar mais de uma) e insira as informações necessárias.

    Figura 7. Janela de criação de uma nova configuração de assinatura.

  5. Clique na guia Build Types.
  6. Clique no build release.
  7. Em Signing Config, selecione a configuração de assinatura que você acabou de criar.

    Figura 8. Selecione uma configuração de assinatura no Android Studio.

  8. Clique em OK.

Agora, toda vez que você criar um tipo de build de lançamento usando Build > Build Bundle(s) / APK(s) no Android Studio, o ambiente de desenvolvimento integrado assinará seu app automaticamente com a configuração de assinatura especificada. Localize seus APKs ou pacotes de apps assinados na pasta build/outputs/ dentro do diretório do projeto do módulo que você está criando.

Ao criar uma configuração de assinatura, as informações correspondentes serão incluídas em texto simples nos arquivos de compilação do Gradle. Se você trabalha em equipe ou compartilha publicamente seu código, remova as informações de assinatura dos arquivos de compilação e armazene-as separadamente para manter a segurança. Para saber mais sobre como remover informações de assinatura dos arquivos de compilação, consulte Remover informações de assinatura dos arquivos de compilação. Para saber mais sobre como manter as informações de assinatura seguras, leia Proteger a chave.

Assinar cada variação de produto de forma diferente

Se o app usa variações de produto e você quer assinar cada uma de forma diferente, é possível criar outras configurações de assinatura e atribuí-las a cada variação:

  1. Na janela Project, clique com o botão direito do mouse no app e escolha Open Module Settings.
  2. Na janela Project Structure, em Modules no painel esquerdo, clique no módulo que você quer assinar.
  3. Clique na guia Signing e depois em Add .
  4. Selecione o arquivo do keystore, insira um nome para essa configuração de assinatura (é possível criar mais de uma) e insira as informações necessárias.

    Figura 10. Janela de criação de uma nova configuração de assinatura.

  5. Repita as etapas 3 e 4 conforme necessário até criar todas as configurações de assinatura.
  6. Clique na guia Flavors.
  7. Clique na variação que você quer configurar e selecione a configuração de assinatura adequada no menu suspenso Signing Config.

    Figura 11. Definição de configurações de assinatura por variação de produto.

    Repita para configurar todas as outras variações de produto.

  8. Clique em OK.

Você também pode especificar as configurações de assinatura nos arquivos de configuração do Gradle. Para mais informações, consulte Definir configurações de assinatura.

Gerenciar sua própria chave de assinatura

Se você não quiser ativar a Assinatura de apps do Google Play (somente para apps criados antes de agosto de 2021), poderá gerenciar uma chave de assinatura do app e um keystore próprios. Você será responsável pela segurança da chave e do keystore. Além disso, seu app não será compatível com Android App Bundles, com o Play Feature Delivery e com o Play Asset Delivery.

Quando estiver pronto para criar uma chave e um keystore próprios, escolha uma senha forte para o keystore e outra igualmente forte para cada chave privada armazenada nele. É necessário manter o keystore em um local seguro e protegido. Se você perder o acesso à chave de assinatura do app ou se ela for comprometida, o Google não conseguirá recuperá-la e não será possível lançar novas versões de seu app para os usuários como atualizações do aplicativo original. Para mais informações, consulte Proteger sua chave abaixo.

Se você gerenciar uma chave de assinatura do app e um keystore próprios, assinará o APK localmente usando sua chave de assinatura e fará upload do APK assinado diretamente na Google Play Store para distribuição, como mostrado na figura 10.

Figura 12. Assinatura de um app ao gerenciar sua própria chave de assinatura de app.

Quando você usa a Assinatura de apps do Google Play, o Google mantém sua chave de assinatura segura e garante que seus apps sejam assinados adequadamente e recebam atualizações durante toda a vida útil. No entanto, se você decidir gerenciar sua chave de assinatura por conta própria, tenha em mente algumas considerações.

Considerações sobre assinaturas

O app precisa ser assinado com o mesmo certificado durante toda a vida útil. Existem diversas razões para isso:

  • Upgrade do app: quando o sistema instala a atualização de um app, ele compara os certificados da nova versão com os da versão atual. Se os certificados corresponderem, o sistema permitirá a atualização. Se a nova versão for assinada com um certificado diferente, será preciso atribuir um nome de pacote diferente ao app. Nesse caso, o usuário instala a nova versão como um app completamente novo.
  • Modularidade do app: o Android permite que APKs assinados pelo mesmo certificado sejam executados no mesmo processo, se solicitado pelos apps, para que o sistema os considere um único app. Dessa forma, é possível implantar o app em módulos, e os usuários podem atualizar separadamente cada um dos módulos.
  • Compartilhamento de código/dados por permissões: o Android oferece a aplicação de permissões com base em assinatura para que um app possa expor a funcionalidade a outro app assinado com um certificado especificado. A assinatura de vários APKs com o mesmo certificado e usando verificações de permissão com base em assinatura permite que os apps compartilhem códigos e dados com segurança.

Se você pretende oferecer compatibilidade com upgrades para um app, verifique se a chave de assinatura dele tem um período de validade que ultrapasse a vida útil. Recomenda-se um período de validade de 25 anos ou mais. Quando o período de validade da chave expirar, os usuários não poderão mais fazer upgrade do app para novas versões com facilidade.

Se você pretende publicar seus apps no Google Play, a chave usada para assiná-los precisa ter um período de validade posterior a 22 de outubro de 2033. O Google Play impõe esse requisito para garantir que os usuários possam fazer upgrade de apps com facilidade quando novas versões estiverem disponíveis.

Manter a chave protegida

Caso você escolha gerenciar e proteger a chave de assinatura do app e o keystore por conta própria em vez de usar a Assinatura de aplicativos do Google Play, a proteção da chave de assinatura do app é de extrema importância, tanto para você quanto para o usuário. Se você permitir que alguém use a chave ou deixar o keystore e as senhas em um local desprotegido, permitindo que terceiros encontrem e usem essas informações, sua identidade de autor e a confiança dos usuários ficarão comprometidas.

Se uma outra pessoa conseguir sua chave de assinatura do app sem seu conhecimento ou sua permissão, ela poderá assinar e distribuir apps que substituam ou corrompam seus apps autênticos com finalidades indevidas. Essa pessoa também poderá, usando sua identidade, assinar e distribuir apps que ataquem outros apps ou o próprio sistema, além de corromper e roubar dados dos usuários.

Sua chave privada será exigida para assinar todas as versões futuras do seu app. Se você perder ou não souber a localização da chave, não poderá publicar atualizações para o app existente. Não é possível gerar novamente uma chave que já foi gerada.

Sua reputação como entidade desenvolvedora depende da proteção adequada da chave de assinatura em todos os momentos até que ela expire. Veja a seguir algumas dicas para manter a chave protegida:

  • Escolha senhas fortes para o keystore e para a chave.
  • Não dê nem empreste a chave privada e não permita que pessoas não autorizadas saibam as senhas do keystore e da chave.
  • Mantenha o arquivo do keystore que contém a chave privada em um local seguro e protegido.

Em geral, se você tomar precauções com bom senso para gerar, usar e armazenar a chave, ela permanecerá segura.

Remover informações de assinatura dos arquivos de compilação

Quando você cria uma configuração de assinatura, o Android Studio adiciona essas informações em texto simples aos arquivos build.gradle do módulo. Se você está trabalhando com uma equipe ou terceirizando o desenvolvimento do código, mantenha essas informações confidenciais fora dos arquivos de compilação para que outras pessoas não possam acessá-las facilmente. Para isso, crie um arquivo de propriedades separado para armazenar informações seguras e faça referência a esse arquivo nos arquivos de compilação da seguinte forma:

  1. Crie uma configuração de assinatura e a atribua a um ou mais tipos de build. Estas instruções presumem que você tenha definido uma única configuração de assinatura para o tipo de build de lançamento, como descrito em Configurar o processo de compilação para assinatura automática do app.
  2. Crie um arquivo denominado keystore.properties no diretório raiz do projeto. Esse arquivo precisa conter as informações de assinatura da seguinte forma:
    storePassword=myStorePassword
    keyPassword=mykeyPassword
    keyAlias=myKeyAlias
    storeFile=myStoreFileLocation
    
  3. No arquivo build.gradle do módulo, adicione o código para carregar o arquivo keystore.properties antes do bloco android {}.

    Groovy

    ...
    
    // Create a variable called keystorePropertiesFile, and initialize it to your
    // keystore.properties file, in the rootProject folder.
    def keystorePropertiesFile = rootProject.file("keystore.properties")
    
    // Initialize a new Properties() object called keystoreProperties.
    def keystoreProperties = new Properties()
    
    // Load your keystore.properties file into the keystoreProperties object.
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
    
    android {
        ...
    }
    

    Kotlin

    ...
    import java.util.Properties
    import java.io.FileInputStream
    
    // Create a variable called keystorePropertiesFile, and initialize it to your
    // keystore.properties file, in the rootProject folder.
    val keystorePropertiesFile = rootProject.file("keystore.properties")
    
    // Initialize a new Properties() object called keystoreProperties.
    val keystoreProperties = Properties()
    
    // Load your keystore.properties file into the keystoreProperties object.
    keystoreProperties.load(FileInputStream(keystorePropertiesFile))
    
    android {
        ...
    }
    

    Observação: você poderá optar por armazenar o arquivo keystore.properties em outro local. Por exemplo, na pasta do módulo em vez de armazená-lo na pasta raiz do projeto ou em um servidor de compilação se estiver usando uma ferramenta de integração contínua. Nesse caso, modifique o código acima para inicializar corretamente keystorePropertiesFile usando a localização real do arquivo keystore.properties.

  4. Você pode fazer referência às propriedades armazenadas em keystoreProperties usando a sintaxe keystoreProperties['propertyName']. Modifique o bloco signingConfigs do arquivo build.gradle do módulo para fazer referência às informações de assinatura armazenadas em keystoreProperties usando essa sintaxe.

    Groovy

    android {
        signingConfigs {
            config {
                keyAlias keystoreProperties['keyAlias']
                keyPassword keystoreProperties['keyPassword']
                storeFile file(keystoreProperties['storeFile'])
                storePassword keystoreProperties['storePassword']
            }
        }
        ...
      }

    Kotlin

    android {
        signingConfigs {
            getByName("config") {
                keyAlias = keystoreProperties["keyAlias"]
                keyPassword = keystoreProperties["keyPassword"]
                storeFile = file(keystoreProperties["storeFile"])
                storePassword = keystoreProperties["storePassword"]
            }
        }
        ...
      }
  5. Abra a janela de ferramentas Build Variants e verifique se o tipo de build de lançamento está selecionado.
  6. Selecione uma opção em Build > Build Bundle(s) / APK(s) para criar um APK ou um pacote de apps do build de lançamento. É importante verificar o resultado do build no diretório build/outputs/ do seu módulo.

Como os arquivos de compilação não contêm mais informações confidenciais, você pode incluí-los no controle de origem ou fazer upload deles em uma base de código compartilhada. Não deixe de manter o arquivo keystore.properties protegido. Para isso, pode ser necessário removê-lo do sistema de controle de origem.