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. Se você usa Android App Bundles, você precisa assinar apenas seu pacote de apps antes de enviá-lo para o Play Console, e a Assinatura de apps do Google Play toma conta do resto. No entanto, você também pode assinar seu app manualmente para upload no Google Play e em outras app stores.

Está página guia você por alguns conceitos importantes relacionados a assinatura e segurança de apps, como assinar seu app para lançamento no Google Play com o Android Studio e como ativar a Assinatura de apps pelo 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. Ativar a "Assinatura de apps do Google Play"
  4. Fazer o upload do seu app no Google Play
  5. Preparar e lançar seu app

Se, em vez disso, seu app já estiver publicado na Google Play Store com uma chave de assinatura de apps 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 seu app e selecione a opção para encriptar e exportar a chave.
  2. Faça o upload da chave de assinatura para ativar a "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 o 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, veja 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 apps adiam a compilação e assinatura de APKs para a Google Play Store, você precisa ativar a "Assinatura de apps do Google Play" antes de fazer o upload desses pacotes. Isso tem os seguintes benefícios:

  • Use o Android App Bundle e adicione compatibilidade com o Dynamic Delivery do Google Play. O Android App Bundle deixa seu app muito menor, simplifica as versões e conta com recursos dinâmicos e experiências instantâneas.
  • Aumente a segurança da sua chave de assinatura e torne possível o uso de uma chave de upload diferente para assinar o pacote de apps enviado ao Google Play.

A Assinatura de apps do Google Play usa duas chaves: a chave de assinatura de apps 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 o upload deles na Google Play Store. Dessa forma, você poderá solicitar uma redefinição de chave de upload se sua chave for perdida ou comprometida. Como comparação, se você não tiver ativado a Assinatura de apps do Google Play e perder a chave, você não poderá mais lançar atualizações do app.

Quando estiver pronto para publicar, assine seu app com o Android Studio e faça o upload no Google Play. A chave com que você assinou seu app se torna a chave de upload. O Google usa o certificado de upload para verificar sua identidade e assina seu(s) APK(s) com a chave de assinatura de apps para distribuição, como mostrado na figura 1.

Se você ainda não tiver uma chave de assinatura de apps, gere uma durante o processo de inscrição.

Figura 1. Assinar um app 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.

Na "Assinatura de apps do Google Play", se você perder sua chave de upload 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 o upload de novas versões de seu app como atualizações para a 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 a 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.

Chaves, certificados e keystores

Para assinar seu app, é importante entender os conceitos e definições descritos abaixo.

Certificados

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.

Ao assinar um app, a ferramenta de assinatura anexa o certificado a ele. O certificado associa o APK ou o pacote de apps a você e a sua chave privada correspondente. Com isso, o Android pode verificar se todas as atualizações futuras do app são autênticas e enviadas pelo autor original. A chave usada para criar esse certificado é chamada de chave de assinatura do app.

Você pode fazer o download do certificado para a chave de assinatura do seu app e para sua chave de upload na página de assinatura de apps do Play Console para registrar sua(s) chave(s) com provedores de API. O certificado pode ser compartilhado com outras pessoas. Ele não contém sua chave privada.

Cada app precisa usar o mesmo certificado durante toda a vida útil para que os usuários possam instalar novas versões como atualizações. Para saber mais sobre os benefícios de usar o mesmo certificado para todos os apps durante toda a vida útil, consulte Considerações sobre assinaturas abaixo.

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.

A seguir estão os diferentes tipos de chaves e keystores:

  • 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 muda durante a vida útil do seu app. A chave de assinatura do app é privada e precisa ser mantida em segredo. No entanto, é possível compartilhar o certificado gerado usando a chave de assinatura do seu 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, você 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 manter suas chaves seguras, é importante que as chaves de upload e de assinatura do app sejam diferentes.

  • Keystore Java (.jks or .keystore): arquivo binário que serve como repositório de certificados e chaves privadas.

  • Ferramenta Play Encrypt Private Key (PEPK): use esta ferramenta para exportar chaves privadas de um keystore Java e criptografá-las antes da transferência para o Google Play. Ao fornecer a chave de assinatura do app para o Google, selecione a opção Export and upload a key from a Java keystore e siga as instruções para fazer o download e usar a ferramenta. Como alternativa, selecione a opção Export and upload a key (not using a Java keystore) para fazer o download, revisar e usar o código-fonte aberto da ferramenta PEPK.

Assinar a compilação 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 Android SDK. A primeira vez 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, portanto, é inseguro, a maioria das app stores (inclusive a Google Play Store) não aceita a publicação de um app assinado 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. Não é possível editar diretamente a configuração de assinatura de depuração, mas é possível configurar a forma como você assina a compilação de lançamento.

Para maiores informações sobre como compilar e executar apps para depuração, consulte Compilar 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 no Linux
  • C:\Documents and Settings\user\.android\ no Windows XP
  • C:\Users\user\.android\ no Windows Vista e no Windows 7, 8 e 10

Na próxima vez que você compilar 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 enviá-lo para uma app store, como o Google Play. Ao publicar seu app no Google Play, você pode ativar a "Assinatura de apps do Google Play". Esta seção mostra como assinar seu app para lançamento e como ativar a "Assinatura de apps do Google Play".

Gerar uma chave de upload e um keystore

Se você ainda não tem uma chave de upload, que é útil na ativação da "Assinatura de apps do Google Play", você pode gerá-la com o Android Studio, da seguinte maneira:

  1. Na barra de menus, clique em Build > 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. Chave

    • 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 da 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 compilar e assinar seu app com sua chave de upload, continue para a seção sobre como Assinar seu app com a chave de upload. Se quiser gerar a chave e o keystore, clique em Cancel.

Assinar seu app com sua chave

Se você já tiver uma chave de upload, use-a para assinar seu app. Se, em vez disso, seu app já estiver assinado e publicado na Google Play Store com uma chave de assinatura existente, use-a para assinar seu app e criptografe e exporte a chave para ativar a Assinatura de apps do Google Play. Posteriormente, 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 seu 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 posteriormente, 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 compilação e escolha a versão do produto, se houver mais de uma.

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

  9. Clique em Finish.

    Figura 4. Gere uma versão assinada do app para as variações do 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 do Android Studio terminar de compilar o app assinado, será possível localizar ou analisar seu app clicando na opção adequada ("locate" ou "analyze") na notificação pop-up. Se você selecionar a opção de exportar sua chave de assinatura, você poderá navegar rapidamente até ela clicando na seta suspensa no canto inferior direito do pop-up para expandi-la. Depois disso, clique em Show Exported Key File, como mostrado na figura 5.

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

Ativar a Assinatura de apps do Google Play

Conforme descrito anteriormente nesta página, a Assinatura de apps do Google Play é a forma recomendada de assinar seu app para distribuição no Google Play. As etapas necessárias para ativar a assinatura no seu app dependem dele ainda não ter sido publicado no Google Play ou já estar assinado e publicado com uma chave de assinatura existente.

Ativar um novo app

Para ativar a assinatura em 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 para preparar e lançar sua 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 Deixar que o Google crie e gerencie minha chave de assinatura do app, conforme descrito a seguir:
    • Para que o Google Play gere uma chave de assinatura de apps para você e use-a para assinar seu app, selecione Continuar. 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 Opções avançadas > Usar a mesma chave de outro app desta conta, selecione um app e clique em Continuar.
    • Para fornecer sua própria chave de assinatura para o Google usar ao assinar seu app, selecione Opções avançadas e 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 Android App Bundles and APKs para add, 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 sua versão. Ao lançar seu app depois de ativar a "Assinatura de apps do Google Play", o Google Play gera e gerencia a chave de assinatura do seu app para você. 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 existente e não se esqueça de marcar a caixa ao lado de Export encrypted key para salvá-la como um arquivo criptografado *.pepk. Você precisará desse arquivo em uma etapa posterior.
  2. Faça login no Play Console e navegue até seu app.
  3. No menu à esquerda, clique em Gerenciamento da versão > Assinatura de apps.
  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á seu app com a chave existente ao implantá-lo para os usuários. No entanto, um dos maiores benefícios da "Assinatura de apps do Google Play" é a habilidade de separar a chave usada para assinar o artefato enviado para o Google Play da chave que o Google Play usa para assinar seu app para distribuição. Então, considere seguir as etapas da seção seguinte para gerar e registrar uma chave de upload separada.

Gerar e registrar um certificado de upload

Ao publicar um app não assinado por uma chave de upload, o Google Play Console oferece a opção de registrar uma para atualizações futuras do app. Essa é uma etapa opcional, mas recomendamos publicar o app com uma chave diferente da usada pelo Google Play para distribuir seu material 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".
  • Quando você está prestes a publicar um app existente com a "Assinatura de apps do Google Play" já ativada, mas ele ainda está assinado com a própria chave de assinatura.

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

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

Depois de criar sua chave de upload e seu keystore, gere um certificado público da sua chave de upload 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 seu 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ó podem 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, você poderá atualizar a chave de assinatura do app publicado 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 para usuários que instalaram seu app antes da mudança.

Para saber mais, leia Fazer upgrade da 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 ela for comprometida, crie uma nova e entre em contato com a equipe de suporte do Google Play para fazer a redefinição.

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 compilação 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 compilação de lançamento usando o Android Studio, siga estas etapas:

  1. Na janela Project, clique com o botão direito 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 na compilação 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, cada vez que você criar uma versão 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á compilando.

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 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 versões de produto e você quer assinar cada versão de forma diferente, é possível criar outras configurações de assinatura e atribuí-las a cada versão:

  1. Na janela Project, clique com o botão direito 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ê escolher não ativar a "Assinatura de apps do Google Play", você pode gerenciar uma chave de assinatura de apps 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 o Android App Bundle e com a Dynamic Delivery do Google Play.

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

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

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 conta 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:

  • Atualização do app: quando o sistema instala uma 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 para o 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 assinaturas para que um app possa expôr 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. Recomendamos 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 o upgrade do app para novas versões de forma transparente.

Se você pretende publicar os 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 o upgrade de apps de forma transparente quando novas versões estiverem disponíveis.

Mantenha sua chave protegida

Se você escolher gerenciar e proteger sua chave de assinatura de app e seu keystore por conta própria em vez de usar a Assinatura de apps do Google Play, a proteção da sua chave de assinatura será 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 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 aplicativo. 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á existe.

Sua reputação como entidade desenvolvedora depende da proteção adequada da chave de assinatura em todos os momentos até que a chave 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

Ao criar uma configuração de assinatura, o Android Studio adiciona as informações de assinatura 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 atribua-a a um ou mais tipos de compilação. Essas instruções presumem que você tenha configurado uma única configuração de assinatura para o tipo de compilação 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 código para carregar o arquivo keystore.properties antes do bloco android {}.
        ...
    
        // 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 {
            ...
        }
    
        

    Observação: você poderá optar por armazenar o arquivo keystore.properties em outro local (por exemplo, na pasta do módulo em vez de na pasta raiz do projeto ou em um servidor de compilações 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 esta sintaxe.
        android {
            signingConfigs {
                config {
                    keyAlias keystoreProperties['keyAlias']
                    keyPassword keystoreProperties['keyPassword']
                    storeFile file(keystoreProperties['storeFile'])
                    storePassword keystoreProperties['storePassword']
                }
            }
            ...
          }
        
  5. Abra a janela da ferramenta Build Variants e verifique se o tipo de compilação de lançamento está selecionado.
  6. Selecione uma opção em Build > Build Bundle(s) / APK(s) para compilar um APK ou um pacote de apps da compilação de lançamento. Você verá a saída de compilação no diretório build/outputs/ do 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 carregá-los 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.