# Vamos falar sobre assinatura de um APK?

Neste artigo gostaria de falar sobre como podemos assinar um APK ‘manualmente’, mas por que alguém iria querer fazer isso sendo que o Delphi já assina automaticamente o APK/AAB?

Antes de responder, gostaria de recomendar a leitura de outro artigo que escrevi “Qual a relação da KeyStore, PackageName e seu APP?” [1], não continue a leitura se você ainda não leu/entendeu este artigo! Atente-se também aos comentários no mesmo artigo, visto que são importantes para melhor entendimento do problema dos dois assuntos.

Respondendo à pergunta:

Muitos são os casos que precisamos distribuir nossos APKs fora da loja, e baseado no artigo sobre a KeyStore sabemos que precisamos compilar nosso APK em RELEASE+Application Store, só que em 64bits o Delphi (10.4+) gera um AAB e não um APK.

Neste artigo irei demonstrar uma das várias técnicas possíveis de ter seu APK Release 64bits para ser distribuído para seus clientes.

Fiz testes apenas nas versões do Delphi 10.4.2 e 12.2, então talvez para sua versão possa ser diferente, sinta-se à vontade para fazer uso do Google caso encontre algum problema. Ele costuma ajudar bastante.

Devido a diferenças entre as duas versões do Delphi, estarei escrevendo nos comentários a solução proposta para assinatura do APK Release 64bits.

Por favor, leia a parte de [Pré-requisitos] e depois encontre o comentário que atende à sua realidade. Talvez sua versão do Delphi seja diferente, mas seu SDK possui os arquivos corretos para o ‘serviço’, o que também resolverá o problema.

Também recomendo o uso do software “Everything” [2], que facilitará muito encontrar arquivos no seu PC.

[Pré-requisitos] comuns entre todas versões do Delphi:

Para começar, vamos primeiro gerar o APK em 64bits, seguindo na contramão do artigo “Qual a relação da KeyStore, PackageName e seu APP?”

Pq? Para não gerarmos automaticamente o AAB, visto que não precisamos de um AAB, mas sim um APK.

Por favor, configure e compile seu projeto na seguinte configuração:

Target: Android 64 bits

Build: RELEASE

Configuration: Development

Baseado no artigo “Qual a relação da KeyStore, PackageName e seu APP?”, sabemos que o APK resultante neste processo será assinado com uma KeyStore aleatória do Delphi, o que é NÃO recomendado, mas aqui entra a beleza da solução proposta…

Agora vá nos comentários e encontre a solução que atenda seu ambiente de trabalho.

# Referências:

[1] “Qual a relação da KeyStore, PackageName e seu APP?” https://nostrudel.ninja/#/n/nevent1qvzqqqqqqypzpdvpeyfrlddvrymt056g2jmtvc6cgntlrsumk3zcwevcl47lsfc0qyt8wumn8ghj7mn0wd68ytnyv96xztngv96hxtcpr3mhxue69uhhxarjvee8jtnwdaehgu3wd35kw6r5d9hxwtcqyzaq6e4lgapz6fc5n28vhepekrhtheguwe2lsxu39chyl3mey895sfhmc8l

[2] Everything https://www.voidtools.com/downloads/

#Delphi #Embarcadero #RadStudio #Android #APP #Mobile #Dev #Development #KeyStore #Sign #Signature #ApplicationStore

Reply to this note

Please Login to reply.

Discussion

[build-tools]

Algumas versões do Delphi não baixam o “build-tools” do Android SDK de forma automática, nos forçando a baixar manualmente.

Irei explicar como fazer o download utilizando o arquivo ‘sdkmanager.bat’ da pasta ‘command-lines’ disponível no Delphi 11+.

Para este tutorial, é recomendado assistir ao vídeo do Landerson Gomes sobre como utilizar os comandos do terminal no Delphi [1].

Após assistir ao vídeo do Landerson Gomes, você deve estar familiarizado com os comandos de terminal do SDK Manager, então vamos lá (perceba que todos os comandos possuem DOIS sinais de menos -- no início e é ‘separado’ com um underline _ ):

- o primeiro passo será vc rodar o comando --list_installed, este comando deve retornar todos os recursos do SDK que está instalado no seu ambiente;

- Aqui vamos nos atentar ao “platform-tools”, este recurso é obrigatório para funcionamento do Android, então teoricamente ele deve aparecer no resultado da listagem do comando --list_installed;

- Atente-se à versão do “platform-tools”, precisamos manter a compatibilidade e baixar a versão do “build-tools” mais próxima. No nosso caso de exemplo, é a versão 35.0.2;

- O próximo comando a ser rodado será o --list, este comando irá listar TODOS os recursos do Android SDK, encontre a lista dos “build-tools” disponíveis e copie o nome e a versão assim como é listado

- O próximo comando é a instalação, rode --install build-tools;, substituindo version pela versão que você escolheu, no nosso exemplo, o comando seria: --install build-tools;35.0.0

A versão 35.0.0 é a mais próxima da versão do platform-tools do nosso exemplo.

Após a correta instalação do build-tools, agora você deve ser capaz de encontrar o arquivo “apksigner.bat” e está pronto para prosseguir para o tópico anterior [apksigner.bat]

[1] “Android SDK Manager: Configuração por linha de comando” https://www.youtube.com/watch?v=3jWe6G69VzM

[apksigner.bat]

Tenha certeza de ter gerado o APK assim como indicado na seção anterior, de Pré-requisitos [1].

Para fazer a assinatura manual, vamos precisar do arquivo “apksigner.bat” que já deve estar instalado no seu ambiente. Caso você não saiba onde ele está, utilize o programa “Everything” ou afins para encontrar o arquivo. Caso você não encontre o arquivo “apksigner.bat” no seu ambiente pode significar que o Delphi não baixou o “build-tools” do SDK automaticamente, por favor, leia o comentário [build-tools] que explico como baixar.

Vamos precisar do terminal do Windows, o CMD, e rodar o seguinte comando (substitua os nomes entre <> pelos valore reais):

sign --ks --ks-key-alias --ks-pass pass: --key-pass pass: --out

Explicação:

caminho_completo_do_apksigner.bat: o caminho completo do arquivo “apksigner.bat”, utilize aspas duplas em caso de ter espaços no caminho;

caminho_completo_para_o_seu_keystore: o caminho completo para seu arquivo “.keystore” criado por você para este projeto, utilize aspas duplas em caso de ter espaços no caminho;

alias_da_chave: o Alias da sua KeyStore

senha_do_keystore: a senha da sua KeyStore

senha_da_chave: a senha do Alias

caminho_completo_para_o_apk_assinado: o caminho completo para o APK assinado, de destino final onde será salvo o arquivo assinado. NÃO utilize o mesmo nome do arquivo original, utilize aspas duplas em caso de ter espaços no caminho;

caminho_completo_para_o_apk_original: o caminho completo do APK origina, o mesmo que foi compilado no Delphi em modo Release, utilize aspas duplas em caso de ter espaços no caminho;

Após rodar este comando com sucesso, o arquivo deverá ser seu APK re-assinado com a sua KeyStore original, pronto para ser enviado para o cliente.

[1] “Artigo, pré-requisitos” nostrudel.ninja/#/n/nevent1qvzqqqqqqypzpdvpeyfrlddvrymt056g2jmtvc6cgntlrsumk3zcwevcl47lsfc0qy88wumn8ghj7mn0wvhxcmmv9uq3qamnwvaz7tmwdaehgu3wd4hk6tcqyrdjvn6cu4rhhrskz6gpanwlnv92tyraqzy6weaf8x79uzh3k0k6yf8qnsd