Quando sua aplicação estiver pronta para ser liberada ao público, você precisa:
- Obter uma chave privada válida
- Compilar a aplicação em modo de liberação
- Assinar sua aplicação com sua chave privada
- Alinhar o pacote APK final
Se você estiver usando o Eclipse com o plugin ADT, pode usar o Assistente de Exportação para executar os procedimentos de compilação, assinatura e alinhamente. O Assistente permite até mesmo que você gere uma nova keystore e chave privada no processo.
1. Obter uma chave privada válida
Durante a preparação para assinas suas aplicações, você precisa garantir que você tenha uma chave privada válida com a qual executará a assinatura. Uma chave privada válida é uma que:
- Esteja em sua posse
- Represente a entidade pessoal, corporativa ou organizacional que será identificada com sua aplicação
- Tenha um periodo de validade que exceda o tempo de vida experado da aplicação. Um periodo de validade de 25 anos é recomendado. Se você planeja publicar sua aplicação no Android Market, observe que um periodo de validade que termine depois de 22/10/2033 é necessário; VocÊ não poderá fazer upload de uma aplicação se esta estiver assinada com uma chave cuja validade expire antes dessa data.
- Não seja a chave de depiração gerada pelas ferramentas do SDK do Android.
A chave pode ser auto-assinada. Se você não possuir uma chave válida, precisa gerar uma usando o Keytool. Certifique-se que a Keytool esteja disponivel.
Para gerar uma chave auto-assinada com Keytool, use o comando keytool e passe alguma das opções listadas abaixo (e outras, se necessário).
Atenção: mantenha sua chave privada segura. Antes de executar Keytool, leia o artigo
Securing Your Private Key para saber como manter sua chave segura eporque isso é importante para você e para os usuários. Em particular, quando você estiver gerando sua chave, você deve usar senhas fortes tanto para a keystore quanto para a chave.
Keytool Option |
Description |
-genkey |
Gera um par de chaves (pública e privada) |
-v |
Ativa o modo verbose |
-alias <alias_name> |
Um apelido para a chave. Apenas os 8 primeiros caracteres do apelido são usados. |
-keyalg <alg> |
Algoritmo de encriptação usado para geração da chave. Tanto o DSA quanto o RSA são suportados. |
-keysize <size> |
O tamanho de cada chave gerada (bits). Se não fornecida, Jeytool usa um tamanha padrão de 1024 bits. Em geral, é recomendado uma chave de 2048 bits ou maior. |
-dname <name> |
Um nome único que descreva quem criou a chave. O valor é usado nos campos issuer e subject nos certificados auto-assinados.
Observe que você não precisa especificar essa opção na linha de comando. Se não fornecida, o Jarsigned lhe pedirá para informar cada campo Nome Único (CN, OU, e assim em diante). |
-keypass <password> |
A senha para essa senha.Como precaução de segurança, não inclua essa opção na linha de comando. Se não fornecida, o Keytool pedirá que você informe a senha. Desta maneira, sua senha não será armazenada no histórico do shell. |
-validity <valdays> |
O perido de validade da chave, em dias.
Nota: Um valor de 10000 ou maior é recomendado. |
-keystore <keystore-name>.keystore |
Um nome para a keystore que conterá sua chave privada. |
-storepass <password> |
Uma senha para a keystore.
Como precaução de segurança, não inclua essa opção na linha de comando. Se não fornecida, o Keytool pedirá que você informe a senha. Desta maneira, sua senha não será armazenada no histórico do shell. |
Abaixo um exemplo do comando Keytool que gera uma chave privada.
$ keytool -genkey -v -keystore my-release-key.keystore
-alias alias_name -keyalg RSA -keysize 2048 -validity 10000
Para obter mais informações sobre a Keytool, veja a documentação em
http://java.sun.com/j2se/1.5.0/docs/tooldocs/#security
2. Compilar a aplicação de modo de liberação
Para poder liberar sua aplicação para os usuários, você precisa compilar ela em modo de liberação. Nesse modo, a aplicação compilada não é assinada por padrão e você precisará assina-la com sua chave privada.
Cuidado: Você não pode liberar sua aplicação sem ser assinada, ou assinada com a chave de depuração.
Com o Eclipse
Para exportar um arquivo apk não assinado pelo Eclipse, dê um clique com o botão direito do mouse no Package Explorer e selecione
Android Tools >
Export Unsigned Application Package. Então especifique a localização do arquivo a ser assinado (Alternativamentel abra seu arquivo AndroidManifest.xml no Eclipse, abra a aba Overview, e clique em
Export an unsigned .apk.)
Observe que você pode combinar compilação e assinatura com o Assistente de Exportação.
3. Assinando sua aplicação com sua chave privada
Quando você tiver uma pacote de aplicação que esteja pronto para ser assinado, você pode proceder com essa passo usando a ferramenta Jarsigner.
Para assinar sua aplicação, rode o Jarsigner, informando tanto o apk da aplicação quanto a keystore que contenha sua chave privada. A tabela abaixo mostra as opções que você pode usar:
Jarsigner Option |
Description |
-keystore <keystore-name>.keystore |
O nome da keystore que contém sua chave privada. |
-verbose |
Ativa o modo verbose. |
-storepass <password> |
A senha de sua keystore.
Como precaução de segurança, não inclua essa opção na linha de comando. Se não fornecida, o Jarsigner pedirá que você informe a senha. Desta maneira, sua senha não será armazenada no histórico do shell. |
-keypass <password> |
A senha de sua chave privada.Como precaução de segurança, não inclua essa opção na linha de comando. Se não fornecida, o Jarsigner pedirá que você informe a senha. Desta maneira, sua senha não será armazenada no histórico do shell. |
Abaixo segue um exemplo que usa o Jarsigner para assinar sua aplicação contida em um pacote chamado my_application.apk, usando a keystore exemplo criada acima.
$ jarsigner -verbose -keystore my-release-key.keystore
my_application.apk alias_name
Ao executar o comando acima, o Jarsigner lhe pedirá as senhas de sua keystore e chave privada. Então modifica o arquivo apk, o que significa que o arquivo passa a estar assinado. Observe que você pode assinar o arquivo apk várias vezes com chaves diferentes.
Para verificar que seu arquivo apk está assinado, você pode usar o comando:
$ jarsigner -verify my_signed.apk
Se o arquivo apk estiver assinado adequadamente, o Jarsigner imprime na tela “jar verified”. Se quiser mais detalhes, tente o comando abaixo:
$ jarsigner -verify -verbose my_application.apk
ou
$ jarsigner -verify -verbose -certs my_application.apk
O comando acima, com a opção -certs adicionada, mostrará a você a linha “CN=” que mostra quem criou a chave.
Para obter mais informações sobre o Jarsigner, veja a documentação em
http://java.sun.com/j2se/1.5.0/docs/tooldocs/#security
4. Alinhar o pacote APK final
Após ter assinado o apk com a sua chave privada, rode zipalign no arquivo. Essa ferramenta garante que todos os dados não-comprimidos iniciem com um byte de alinhamento em particular, relativo ao inicio do arquivo. Garantido o alinhamento no limite do byte 4 permite otimização de performance quando instalado no dispositivo. Quando alinhado, o sistema Android é capaz de ler os arquivos com mmap(), mesmo se conterem dados binários com restrições de alinhamentoi, assim que copiar todos os dados do pacote. O beneficio é uma redução da quantidade de memória RAM consumido pela aplicação.
A ferramenta zipalign é fornecida junto com o SDK do Android, dentro da pasta tools. Para alinhar seu apk assinado, execute:
zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk
A opção -v muda para o modo verbosa (opcional). 4 é o alinhamento do byte (não use nada além de 4). O primeiro arquivo no argumento é seu arquivo apk assinado (a entrada) e o segundo é o arquivo apk de destino (a saída). Se você quiser sobrescrever um arquivo apk existente, adicione a opção -f.
Cuidado: Seu arquivo apk de entrada precisa ser assinado com sua chave privada
antes de otimizar o pacote com zipalign. Se você assinar depois de usar o zipalign, isso desfará o alinhamento.
Compilando e assinando com o Eclipse + ADT
Se você usa o Eclipse com o plugin ADT, pode usar o Assistente de Exportação para gerar um apk assinado (e até criar uma nova keystore, se necessário). O Assistente de exportação executa todas as interações com o Keytool e Jarsigner para você, o que permite que você assine suas aplicações usando uma GUI ao invés de executar procedimentos manuais para compilar, assinar e alinhar, como discutidos acima.
Após o assistente compilar e assinar seu pacote, ele também executará o alinhamento com zipalign. Já que o Assistente usa tanto o Keytool quanto o Jarsigner, você deve garantir que elas estejam disponiveis em seu computador.
Para criar um apk assinado e alinhado com o Eclipse:
- Selecione o projeto do “Package Explorer” e selecione File > Export.
- Abra a pasta Android, selecione “Export Android Application” e clique Next. O Assistente é inciado, o que lhe guiará pelo processo de assinatura de sua aplicação, incluindo os passos para seleção de sua chave privada com a qual o apk será assinado (ou criar uma nova keystore e chave privada).
Traduzido de
http://developer.android.com/guide/publishing/app-signing.html]]>