Assinar o aplicativo

O Android exige que todos os APKs sejam assinados digitalmente com um certificado antes de serem instalados. E você precisa assinar seu Android App Bundle antes de poder fazer o upload dele no Play Console.

Este documento descreve como assinar APKs usando o Android Studio, incluindo a criação e o armazenamento do certificado, a assinatura de diferentes configurações de compilação usando certificados distintos e a configuração do processo de compilação para assinatura automática dos APKs.

Certificados e repositórios de chaves

Os certificados de chave pública, também conhecidos como certificados digitais ou de identidade, contêm a chave pública de um par de chaves públicas/privadas, bem como outros metadados que identificam o proprietário da chave (por exemplo, nome e localização). O proprietário do certificado mantém a chave privada correspondente.

Ao assinar um APK, a ferramenta de assinatura anexa o certificado de chave pública ao APK. O mesmo ocorre ao assinar um pacote de aplicativos. O certificado de chave pública atua como uma "impressão digital" que associa unicamente o APK ou o pacote de aplicativos a você e à chave privada correspondente. Isso ajuda o Android a garantir que todas as atualizações futuras do aplicativo sejam autênticas e provenientes do autor original. A chave usada para criar esse certificado é chamada de chave de assinatura de aplicativos.

O repositório de chaves é um arquivo binário que contém uma ou mais chaves privadas.

Os aplicativos precisam usar o mesmo certificado durante toda a vida útil para que os usuários sejam capazes de instalar novas versões como atualizações do aplicativo. Para saber mais sobre os benefícios de usar o mesmo certificado para todos os aplicativos durante toda a vida útil deles, consulte Considerações sobre assinaturas abaixo.

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 aplicativo com um certificado de depuração gerado pelas ferramentas do Android SDK. Na primeira vez em que um projeto é executado ou depurado no Android Studio, o ambiente de desenvolvimento integrado cria automaticamente o repositório de chaves e o certificado de depuração em $HOME/.android/debug.keystore e define as senhas do repositório de chaves e da chave.

Como o certificado de depuração é criado pelas ferramentas de compilação e é intencionalmente inseguro, a maioria das apps stores (inclusive o Google Play Store) não aceita a publicação de um APK ou de um pacote de aplicativos 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 aplicativo, inclusive a localização e a senha do repositório de chaves, além do 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 aplicativos para depuração, consulte Compilar e executar seu aplicativo.

Expiração do certificado de depuração

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

Para corrigir o problema, basta excluir o arquivo debug.keystore. O arquivo é armazenado nos 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ê compilar e executar o tipo de compilação de depuração, as ferramentas de compilação gerarão um novo repositório de chaves e uma nova chave de depuração. Você precisa executar o aplicativo. A compilação por si só não gera novamente o repositório de chaves nem a chave de depuração.

Gerenciar a chave

Como a chave de assinatura de aplicativos é usada para verificar sua identidade como desenvolvedor e garantir atualizações seguras e tranquilas para usuários, é muito importante gerenciar a chave e mantê-la em segurança, tanto para você quanto para os usuários. Você pode escolher usar a assinatura de aplicativos do Google Play para gerenciar e armazenar com segurança sua chave de assinatura de aplicativos usando a infraestrutura do Google, ou gerenciar e proteger seu próprio repositório de chaves e chave de assinatura de aplicativos.

A ativação da assinatura de aplicativos do Google Play oferece os seguintes benefícios:

  • Garante que a chave de assinatura do aplicativo não seja perdida. A perda da chave de assinatura do aplicativo impedirá a atualização dele. Portanto, é importante manter essa chave em segurança.
  • Garante que a chave de assinatura do aplicativo não seja comprometida. O comprometimento da chave permite que um invasor implante uma versão mal-intencionada como uma atualização de uma instalação existente. Com a assinatura de aplicativos do Google Play, os desenvolvedores gerenciam apenas uma chave de upload, que pode ser redefinida em caso de perda ou comprometimento. Em caso de comprometimento, um invasor também precisa acessar a conta do desenvolvedor para poder executar qualquer ação mal-intencionada.

Use a assinatura de aplicativos do Google Play

Com a assinatura de aplicativos do Google Play, o Google gerencia e protege a chave de assinatura do aplicativo para você e a usa para assinar seus APKs para distribuição. Como os pacotes de aplicativos adiam a compilação e assinam os APKs para a Google Play Store, você precisa inscrever-se na assinatura de aplicativos do Google Play antes de fazer o upload desses pacotes.

Ao ativar a assinatura de aplicativos do Google Play, você usará duas chaves: a chave de assinatura de aplicativos e a chave de upload. Você ficará com a chave de upload e a usará para assinar seus aplicativos quando fizer o upload deles na Google Play Store.

Ao ativar a assinatura de aplicativos do Google Play, você exporta e criptografa a chave de assinatura de aplicativos usando a ferramenta Play Encrypt Private Key fornecida pelo Google Play, e depois faz o upload dela na infraestrutura do Google. Em seguida, você cria uma chave de upload separada e a registra no Google. Quando estiver pronto para publicar, assine seu aplicativo usando a chave de upload e faça o upload dela no Google Play. O Google usa o certificado de upload para verificar sua identidade e assina novamente seu APK com a chave de assinatura de aplicativos para distribuição, como mostra a imagem 1. Se você ainda não tiver uma chave de assinatura de aplicativos, gere uma durante o processo de inscrição.

Imagem 1. Assinatura de aplicativos do Google Play

Na assinatura de aplicativos do Google Play, se você perder sua chave de upload ou ela for comprometida, entre em contato com o Google para revogar sua chave de upload antiga e gerar uma nova. Como sua chave de assinatura de aplicativos é protegida pelo Google, você pode continuar fazendo o upload de novas versões de seu aplicativo como atualizações para a versão original, mesmo que mude de chave de upload.

Para saber mais sobre como escolher o uso da assinatura de aplicativos do Google Play, consulte Gerenciar suas chaves de assinatura de aplicativos.

Gerenciar uma chave e um repositório de chaves próprios

Em vez de usar a assinatura de aplicativos do Google Play, escolha gerenciar uma chave de assinatura de aplicativos e um repositório de chaves próprios. Se você optar por gerenciar uma chave de assinatura de aplicativos e um repositório de chaves próprios, será responsável pela proteção desses recursos. Além disso, não é possível fazer o upload de Android App Bundles sem inscrever-se na assinatura de aplicativos do Google Play.

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

Se você gerenciar sua chave de assinatura de aplicativos e seu repositório de chaves próprios, você assinará seu APK localmente usando sua chave de assinatura de aplicativos e fará o upload do APK assinado diretamente na Google Play Store para distribuição, como mostra a imagem 2.

Imagem 2. Assinatura de um aplicativo ao gerenciar sua própria chave de assinatura de aplicativos

Gerar uma chave e um repositório de chaves

Se ainda não tiver uma chave de assinatura de aplicativos ou de upload, gere uma usando o Android Studio da seguinte maneira:

  1. Na barra de menu, clique em Build > Build > Generate Signed 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 repositório de chave e sua chave, como mostra a imagem 3.

    Imagem 3. Crie um repositório de chave no Android Studio.

    Repositório de chaves

    • Caminho do repositório de chaves: Selecione o local onde o repositório de chaves deve ser criado.
    • Senha: Crie e confirme uma senha segura para o repositório de chaves.

    Chave

    • Alias: Insira um nome de identificação para a chave.
    • Senha: Crie e confirme uma senha segura para a chave. Essa senha deve ser diferente da escolhida para o repositório de chaves.
    • Validade (anos): 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 aplicativos com a mesma chave durante a vida útil do do aplicativo.
    • Certificado: Insira algumas informações pessoais para o certificado. Essas informações não são exibidas no aplicativo, mas são incluídas no certificado como parte do APK.

    Após preencher o formulário, clique em OK.

  5. Acesse Sign your app for release caso queira gerar um APK assinado com sua nova chave ou clique em Cancel se quiser apenas gerar um chave e um repositório de chaves locais, sem assinar um APK.
  6. Se você quiser aceitar e usar a assinatura de aplicativos do Google Play, vá para Gerenciar as chaves de assinatura do aplicativo e siga as instruções para configurar a assinatura de aplicativos do Google Play.

Assinar seu aplicativo para lançamento

Independentemente de como você escolhe gerenciar a chave e o repositório de chaves, ou se quer compilar um APK ou pacote de aplicativos, use o Android Studio para assinar seu aplicativo com a chave de upload ou com a chave de assinatura:

  • Se optar por gerenciar e proteger uma chave de assinatura de aplicativos e um repositório de chaves próprios, você assinará seu aplicativo com a chave de assinatura de aplicativos.
  • Se optar por usar a assinatura de aplicativos do Google Play para gerenciar e proteger a chave de assinatura de aplicativos e o repositório de chaves, deverá assinar o aplicativo com sua chave de upload.

Para assinar seu APK para lançamento no Android Studio, siga essas etapas:

  1. 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. Caso tenha sua informação de assinatura pronta, selecione um repositório de chaves, uma chave privada e insira a senha de ambos. Caso contrário, primeiramente gere uma chave e um repositório de chaves e depois volte para concluir esta etapa.

    Observação: se você estiver usando a assinatura de aplicativos do Google Play, especifique sua chave de upload aqui. Em vez disso, se você estiver gerenciando uma chave de assinatura de aplicativos e um repositório de chaves próprios, especifique sua chave de assinatura de aplicativos. Para saber mais, consulte Gerenciar sua chave acima.

    Imagem 4. Selecione uma chave privada no Android Studio.

  5. Se estiver compilando um pacote de aplicativos, você pode solicitar ao Android Studio que também salve suas chaves de assinatura como um arquivo criptografado. Para isso, marque a caixa ao lado de Export encrypted key. Para poder fazer o upload do pacote de aplicativos e aproveitar o Dynamic Delivery, você precisa fazer o upload do arquivo criptografado no Play Console e inscrever-se na Assinatura de aplicativos do Google Play.
  6. Clique em Next.
  7. Na próxima janela, selecione um destino para os APKs ou os pacotes de aplicativos assinados, selecione o tipo de compilação, escolha as variações de produto, se for o caso, e clique em Finish.

    Imagem 5. Gere uma versão assinada do aplicativo para as variações de produto selecionadas.

    Observação: se o projeto usar variações de produto, é possível selecionar mais de uma delas mantendo pressionada a tecla Control no Windown/Linux ou a tecla Command no Mac OSX. O Android Studio gerará um APK separado ou um pacote de aplicativos para cada variação de produto que você selecionar.

Após o Android Studio finalizar a compilação do aplicativo assinado, será possível localizar ou analisar seu aplicativo 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 do pop-up para expandi-la. Clique em Show Exported Key File, como demonstrado na imagem 6.

Imagem 6. Após o ambiente de desenvolvimento integrado terminar de gerar seu pacote de aplicativos assinado, clique nos links do pop-up para analisar ou localizar o pacote, ou localize as chaves de assinatura exportadas.

Você pode distribuir o aplicativo assinado por meio de uma loja de aplicativos como a Google Play Store ou usando seu mecanismo preferido. Para saber mais sobre como publicar um APK assinado na Google Play Store, consulte Primeiros passos com publicações. Para saber mais sobre outras opções de distribuição, leia Opções de distribuição alternativas.

Para que os usuários instalem atualizações do aplicativo, será necessário assinar os aplicativos com o mesmo certificado durante a vida útil do aplicativo. Para saber mais sobre esse e outros benefícios de assinar todos os aplicativos com a mesma chave, consulte Considerações sobre assinaturas abaixo. Para saber mais sobre a proteção da chave privada e do repositório de chaves, consulte Proteger a chave abaixo.

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

No Android Studio, é possível configurar o projeto para assinar automaticamente a versão de lançamento do aplicativo durante o processo de compilação criando uma configuração de assinatura e atribuindo-a ao tipo de compilação de lançamento. A configuração de assinatura consiste em um local do repositório de chaves, uma senha do repositório de chaves, 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 aplicativo 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 repositório de chaves, insira um nome para essa configuração de assinatura (é possível criar mais de uma) e insira as informações necessárias.

    Imagem 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. Abaixo de Signing Config, selecione a configuração de assinatura que você acabou de criar.

    Imagem 8. No Android Studio, selecione uma configuração de assinatura.

  8. Clique em OK.

Agora, em todas as compilações do tipo de compilação de lançamento usando Build > Build Bundle(s) / APK(s)no Android Studio, o ambiente de desenvolvimento integrado assinará seu aplicativo automaticamente, usando a configuração de assinatura especificada. Localize seus APKs ou pacotes de aplicativos 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 o código, remova as informações dos arquivos de compilação e armazene-as separadamente para manter a segurança. Para saber mais sobre a remoção de informações de assinatura dos arquivos de compilação, veja 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 aplicativo usar variações de produto, e você quiser assinar cada variação de forma diferente, será possível criar configurações de assinatura adicionais e atribuí-las a cada variação:

  1. Na janela Project, clique com o botão direito no aplicativo 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 repositório de chaves, insira um nome para essa configuração de assinatura (é possível criar mais de uma) e insira as informações necessárias.

    Imagem 9. Janela de criação de uma nova configuração de assinatura.

  5. Repita as etapas 3 e 4 conforme a necessidade 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.

    Imagem 10. 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.

Assinar aplicativos do Wear OS

Se você estiver compilando um aplicativo do Wear OS, o processo de assinatura do aplicativo pode ser um pouco diferente do descrito nesta página. Consulte as informações sobre empacotamento e publicação de aplicativos do Wear OS.

Considerações sobre assinaturas

O aplicativo deve ser assinado com o mesmo certificado durante toda a vida útil dele. Existem diversas razões para se fazer isso:

  • Upgrade do aplicativo: Quando o sistema instala uma atualização de um aplicativo, ele compara os certificados da nova versão com os da 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 aplicativo. Nesse caso, o usuário instala a nova versão como um aplicativo completamente novo.
  • Modularidade do aplicativo: O Android permite que APKs assinados pelo mesmo certificado sejam executados no mesmo processo, se solicitado pelos aplicativos, para que o sistema os considere um único aplicativo. Dessa forma, é possível implantar o aplicativo em módulos, e os usuários podem atualizar separadamente cada um dos módulos.
  • Compartilhar códigos/dados por meio de permissões: O Android oferece a aplicação de permissões com base em assinaturas para que um aplicativo possa expor a funcionalidade a outro aplicativo 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 aplicativos compartilhem códigos e dados com segurança.

Se você pretende oferecer suporte a upgrades para um aplicativo, verifique se a chave de assinatura dele tem um período de validade que ultrapassa 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 aplicativo para novas versões de forma transparente.

Se você pretende publicar os aplicativos 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 aplicativos de forma transparente quando novas versões estiverem disponíveis. Se você usar a assinatura de aplicativos do Google Play, o Google verificará se os seus aplicativos estão assinados corretamente e se são capazes de receber atualizações durante toda a vida útil.

Proteger a chave

Se você escolher gerenciar e proteger sua chave de assinatura de aplicativos e repositório de chaves por conta própria (em vez de usar a assinatura de aplicativos do Google Play), a proteção da sua chave de assinatura de aplicativos 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 repositório de chaves e as senhas em 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.

Observação: se você usar a assinatura de aplicativos do Google Play, sua chave de assinatura de aplicativos será mantida segura por meio da infraestrutura do Google. Você ainda precisa manter sua chave de upload protegida, conforme descrito abaixo. Se sua chave de upload for comprometida, entre em contato com o Google para revogá-la e receber uma nova.

Se uma outra pessoa conseguir obter sua chave sem seu conhecimento ou sua permissão, poderá assinar e distribuir aplicativos que substituem ou corrompem aplicativos autênticos com finalidades indevidas. Essa pessoa também poderá, usando sua identidade, assinar e distribuir aplicativos que atacam outros aplicativos ou o próprio sistema, ou 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 aplicativo 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 de aplicativos, em todos os momentos, até que a chave expire. Veja a seguir algumas dicas para manter a chave protegida:

  • Escolha senhas fortes para o repositório de chaves 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 repositório de chaves e da chave.
  • Mantenha o arquivo do repositório de chaves 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 estará 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 para atribuí-la a um ou mais tipos de compilação. Essas instruções presumem que você configurou 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 aplicativo acima.
  2. Crie um arquivo denominado keystore.properties no diretório raiz do projeto. Esse arquivo deve 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 ao carregamento do 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: é possível 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 essa 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 abaixo de Build > Build Bundle(s) / APK(s) para compilar um APK ou um pacote de aplicativos da compilação de lançamento. É importante verificar o resultado da compilação 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 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.

Assinar o aplicativo na linha de comando

O Android Studio não é necessário para assinar o aplicativo. Você pode assinar seu aplicativo na linha de comando usando o apksigner para APKs ou o jarsigner para pacotes de aplicativos, ou configurar o Gradle para assiná-lo para você durante a compilação. De qualquer forma, primeiro você precisa gerar uma chave privada usando keytool. Por exemplo:

keytool -genkey -v -keystore my-release-key.jks
-keyalg RSA -keysize 2048 -validity 10000 -alias my-alias

Observação: o keytool está localizado no diretório bin/ no seu JDK. Para localizar seu JDK no Android Studio, selecione File > Project Structure e clique em SDK Location. Você verá o JDK location.

Esse exemplo solicita senhas para o repositório de chaves e para a chave e o preenchimento dos campos de Nome distinto da chave. Em seguida, ele gera o repositório de chaves como um arquivo chamado my-release-key.jks, salvando-o no diretório atual (é possível movimentá-lo como quiser). O repositório de chaves contém uma única chave, válida por 10.000 dias.

Agora você pode compilar um APK ou um pacote de aplicativos não assinado e assiná-lo manualmente ou configurar o Gradle para assinar seu aplicativo.

Assine seu aplicativo manualmente na linha de comando

Se ainda não tiver feito isso, compile seu aplicativo na linha de comando. Se quiser assinar um pacote de aplicativos na linha de comando, você pode usar o jarsigner. Se quiser assinar um APK, será necessário usar o zipalign e o apksigner, conforme descrito abaixo.

  1. Abra uma linha de comando do Android Studio, selecione View > Tool Windows > Terminale vá até o diretório onde o APK não assinado está localizado.
  2. Alinhe o APK não assinado usando zipalign:

    zipalign -v -p 4 my-app-unsigned.apk my-app-unsigned-aligned.apk
    

    O zipalign garante que todos os dados descompactados comecem com um alinhamento de byte específico em relação ao início do arquivo, o que pode reduzir a quantidade de RAM consumida pelo aplicativo.

  3. Assine o APK com a chave privada usando apksigner:

    apksigner sign --ks my-release-key.jks --out my-app-release.apk my-app-unsigned-aligned.apk
    

    Este exemplo tem como saída o APK assinado em my-app-release.apk após assiná-lo com uma chave privada e um certificado armazenados em um único arquivo de repositório de chaves: my-release-key.jks.

    A ferramenta apksigner oferece outras opções de assinatura, inclusive a assinatura de um arquivo APK usando arquivos separados de chave privada e certificado e usando vários assinantes. Para mais detalhes, consulte a referência apksigner .

    Observação: para usar a ferramenta apksigner você precisa ter a revisão 24.0.3 ou superior do Android SDK Build Tools instalada. Atualize esse pacote usando o SDK Manager.

  4. Verifique se o APK está assinado:

    apksigner verify my-app-release.apk
    

Configurar o Gradle para assinar seu aplicativo

Abra o arquivo build.gradle no nível do módulo e adicione o bloco signingConfigs {} com entradas para storeFile, storePassword, keyAlias e keyPassword. Depois, passe esse objeto para a propriedade signingConfig no seu tipo de compilação. Por exemplo:

android {
    ...
    defaultConfig { ... }
    signingConfigs {
        release {
            // You need to specify either an absolute path or include the
            // keystore file in the same directory as the build.gradle file.
            storeFile file("my-release-key.jks")
            storePassword "password"
            keyAlias "my-alias"
            keyPassword "password"
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
            ...
        }
    }
}

Observação: neste caso, o repositório de chaves e a senha da chave estarão visíveis diretamente no arquivo build.gradle. Para melhorar a segurança, remova as informações de assinatura do seu arquivo de compilação.

Agora, ao compilar o aplicativo na linha de comando invocando uma tarefa do Gradle, ele assina o aplicativo (e executa o zipalign) para você.

Além disso, por ter configurado a compilação de lançamento com sua chave de assinatura, a tarefa "install" está disponível para esse tipo de compilação. Assim você pode compilar, alinhar, assinar e instalar o APK de versão em um emulador ou dispositivo, tudo isso com a tarefa installRelease.

Um aplicativo assinado com sua chave privada está pronto para distribuição, mas antes é importante que você leia mais sobre como publicar o aplicativo e revise a Lista de verificação de lançamento do Google Play.