apksigner - manual de referência, opções, exemplos de comandos


NOME

apksigner - assinar e verificar APKs do Android

SINOPSE

apksigner [options] apk

apksigner --version

apksigner --help

DESCRIÇÃO

Uma ferramenta de linha de comando para assinar arquivos APK do Android e verificar se as assinaturas de arquivos APK serão verificadas em dispositivos Android.

apk é um arquivo existente para assinar ou verificar.

apksig é um projeto que visa simplificar a assinatura do APK e verificar se as assinaturas do APK devem ser verificadas no Android. O apksig oferece suporte à assinatura JAR (usada pelo Android desde o primeiro dia) e APK Signature Scheme v2 (compatível desde o Android Nougat, API de nível 24).

O principal recurso do apksig é que ele conhece as diferenças na lógica de verificação de assinatura do APK entre diferentes versões da plataforma Android. O apksig pode, portanto, verificar se um APK assinado deve ser verificado em todas as versões da plataforma Android suportadas pelo APK. Ao assinar um APK, o apksig escolherá os algoritmos criptográficos mais apropriados com base nas versões da plataforma Android suportadas pelo APK que está sendo assinado.

COMANDOS

sign

Isso assina o APK fornecido, removendo todas as assinaturas pré-existentes. A assinatura é executada usando um ou mais assinantes, cada um representado por um par de chaves assimétricas e um certificado correspondente. Normalmente, um APK é assinado por apenas um signatário. Para cada signatário, você precisa fornecer a chave privada e o certificado do signatário.

verify

Isso verifica se o APK fornecido será verificado no Android. Por padrão, isso verifica se o APK será verificado em todas as versões da plataforma Android compatíveis com o APK (conforme declarado usando minSdkVersion em AndroidManifest.xml). Use --min-sdk-version e/ou --max-sdk-version para verificar o APK em um intervalo personalizado de níveis de API.

lineage

Isso modifica os recursos de um ou mais signatários no SigningCertificateLineage fornecido. Isso pode ser usado para revogar os recursos de um certificado de assinatura anterior assim que a base de instalação for migrada para o novo certificado de assinatura.

rotate

Isso pega as chaves fornecidas e cria uma entrada SigningCertificateLineage vinculando o antigo ao novo, para uso em um cenário de rotação de chaves usando APK Signature Scheme v3.

version

Mostrar o número da versão desta ferramenta e sair

help

Mostrar esta página de uso e sair

OPÇÕES

-v, --verbose

Modo de saída detalhado

-h, --help

Mostrar ajuda sobre este comando e sair

-Werr

Tratar avisos como erros

sign

Assine o APK fornecido

--out

Arquivo no qual enviar o APK assinado. Por padrão, o APK é assinado no local, substituindo o arquivo de entrada.

--min-sdk-version

Nível de API mais baixo no qual as assinaturas deste APK serão verificadas. Por padrão, o valor de AndroidManifest.xml é usado. Quanto maior o valor, os parâmetros de segurança mais fortes são usados ao assinar.

--max-sdk-version

Nível de API mais alto no qual as assinaturas deste APK serão verificadas. Por padrão, o valor mais alto possível é usado.

--v1-signing-enabled

Se deve habilitar a assinatura usando o esquema de assinatura JAR (também conhecido como esquema de assinatura v1, aquele usado no Android desde o primeiro dia). Por padrão, a assinatura usando esse esquema é habilitada com base na versão mínima e máxima do SDK (consulte --min-sdk-version e --max-sdk-version).

--v2-signing-enabled

Se a assinatura deve ser habilitada usando o APK Signature Scheme v2 (também conhecido como esquema de assinatura v2, aquele introduzido no Android Nougat, API de nível 24). Por padrão, a assinatura usando esse esquema é habilitada com base na versão mínima e máxima do SDK (consulte --min-sdk-version e --max-sdk-version).

per-signer options

Essas opções especificam a configuração de um determinado signatário. Para delimitar opções de signatários diferentes, use --next-signer.

--next-signer

Delimita opções de dois signatários diferentes. Não há necessidade de usar esta opção quando apenas um signatário é usado.

--v1-signer-name

Nome de base para arquivos que compreendem a assinatura do esquema de assinatura JAR (também conhecido como esquema v1) deste signatário. Por padrão, o alias de chave KeyStore ou o nome base do arquivo de chave é usado.

per-signer signing key & certificate options

Há duas maneiras de fornecer a chave privada e o certificado do signatário: (1) Java KeyStore (consulte --ks) ou (2) arquivo de chave privada no formato PKCS #8 e arquivo de certificado no formato X.509 (consulte --key e --cert).

--ks

Carregue a chave privada e a cadeia de certificados do Java KeyStore inicializado a partir do arquivo especificado. NONE significa que nenhum arquivo é necessário para o KeyStore, que é o caso de alguns PKCS #11 KeyStores.

--ks-key-alias

Alias sob o qual a chave privada e o certificado são armazenados no KeyStore. Isso deve ser especificado se o KeyStore contiver várias chaves.

--ks-pass

Senha do KeyStore (consulte --ks). Os seguintes formatos são suportados:

  • pass: senha fornecida em linha

  • env: senha fornecida na variável de ambiente nomeada

  • arquivo: senha fornecida no arquivo nomeado, como uma única linha

  • senha stdin fornecida na entrada padrão, como uma única linha

Uma senha é necessária para abrir um KeyStore. Por padrão, a ferramenta solicitará a senha via console ou entrada padrão. Quando o mesmo arquivo (incluindo a entrada padrão) é usado para fornecer várias senhas, as senhas são lidas do arquivo uma linha por vez. As senhas são lidas na ordem em que os signatários são especificados e, dentro de cada signatário, a senha do KeyStore é lida antes que a senha da chave seja lida.

--key-pass

Senha com a qual a chave privada é protegida. Por padrão, assume-se que as chaves do KeyStore são protegidas usando a mesma senha do KeyStore (consulte --ks-pass). Os seguintes formatos são suportados:

  • pass: senha fornecida em linha

  • env: senha fornecida na variável de ambiente nomeada

  • arquivo: senha fornecida no arquivo nomeado, como uma única linha stdin senha fornecida na entrada padrão, como uma única linha

Por padrão, se a chave for protegida por senha, a ferramenta solicitará a senha por meio do console ou da entrada padrão. Quando o mesmo arquivo (incluindo a entrada padrão) é usado para fornecer várias senhas, as senhas são lidas do arquivo uma linha por vez. As senhas são lidas na ordem em que os signatários são especificados e, dentro de cada signatário, a senha do KeyStore é lida antes que a senha da chave seja lida.

--pass-encoding

Codificação de caracteres adicionais (por exemplo, ibm437 ou utf-8) para tentar senhas contendo caracteres não ASCII. KeyStores criados por keytool geralmente são criptografados não usando a forma Unicode da senha, mas usando a forma produzida pela codificação da senha usando a codificação de caracteres do console. Por padrão, o apksigner tenta descriptografar usando várias formas de senha: o formulário Unicode, o formulário codificado usando o conjunto de caracteres padrão da JVM e, no Java 8 e anteriores, o formulário codificado usando o conjunto de caracteres do console. No Java 9, o apksigner não consegue detectar o conjunto de caracteres do console e pode precisar receber --pass-encoding quando uma senha não ASCII é usada. --pass-encoding também pode precisar ser fornecido para um KeyStore criado por keytool em um sistema operacional diferente ou em uma localidade diferente.

--ks-type

Tipo/algoritmo do KeyStore a ser usado. Por padrão, o tipo padrão é usado.

--ks-provider-name

Nome do Provedor JCA do qual solicitar a implementação do KeyStore. Por padrão, o provedor de prioridade mais alta é usado. Consulte --ks-provider-class para obter uma maneira alternativa de especificar um provedor.

--ks-provider-class

Nome de classe totalmente qualificado do Provedor JCA do qual solicitar a implementação do KeyStore. Por padrão, o provedor é escolhido com base em --ks-provider-name.

--ks-provider-arg

Valor a ser passado para o construtor da classe JCA Provider especificada por --ks-provider-class. O valor é passado para o construtor como java.lang.String. Por padrão, o construtor do provedor no-arg é usado.

--key

Carrega a chave privada do arquivo especificado. Se a chave for protegida por senha, a senha será solicitada via entrada padrão, a menos que especificado de outra forma usando --key-pass. O arquivo deve estar no formato PKCS #8 DER.

--cert

Carregue a cadeia de certificados do arquivo especificado. O arquivo deve estar no formato X.509 PEM ou DER.

verify

Verifique se o APK fornecido deve ser verificado no Android

--print-certs

Mostrar informações sobre os certificados de assinatura do APK

--min-sdk-version

Nível de API mais baixo no qual as assinaturas deste APK serão verificadas. Por padrão, o valor de AndroidManifest.xml é usado.

--max-sdk-version

Nível de API mais alto no qual as assinaturas deste APK serão verificadas. Por padrão, o valor mais alto possível é usado.

EXEMPLOS

apksigner sign --ks release.jks app.apk apksigner verify --verbose app.apk 
apksigner lineage --in /path/to/existing/lineage --print-certs -v 
apksigner rotate --out /path/to/new/file --old-signer --ks release.jks --new-signer --ks release2.jks
sign
  1. Assine um APK usando a única chave em keystore release.jks:

  2. apksigner sign --ks release.jks app.apk
  3. Assine um APK usando uma chave privada e um certificado armazenado como arquivos individuais:

  4. apksigner sign --key release.pk8 --cert release.x509.pem app.apk
  5. Assine um APK usando duas chaves:

  6. apksigner sign --ks release.jks --next-signer --ks magic.jks app.apk
verify
  1. Verifique se as assinaturas do APK devem ser verificadas em todas as plataformas Android declaradas como suportadas por este APK:

  2. apksigner verify app.apk
  3. Verifique se as assinaturas do APK devem ser verificadas em plataformas Android com API de nível 15 e superior:

  4. apksigner verify --min-sdk-version 15 app.apk
lineage
  1. Remova todos os recursos de um signatário anterior na linhagem:

  2. apksigner lineage --in /path/to/existing/lineage --out /path/to/new/file --signer --ks release.jks --set-installed-data false --set-shared-uid false --set-permission false --set-rollback false --set-auth false
  1. Exibir detalhes sobre os certificados de assinatura e seus recursos na linhagem:

  2. apksigner lineage --in /path/to/existing/lineage --print-certs -v
rotate
  1. Crie um novo SigningCertificateLineage para habilitar a rotação:

  2. apksigner rotate --out /path/to/new/file --old-signer --ks release.jks --new-signer --ks release2.jks
  1. Estenda um SigningCertificateLineage existente para girar novamente após a rotação anterior:

  2. apksigner rotate --in /path/to/existing/lineage --out /path/to/new/file --old-signer --ks release2.jks --new-signer --ks release3.jks
  1. Crie um novo SigningCertificateLineage com recursos explícitos para o signatário anterior:

  2. apksigner rotate --out /path/to/new/file --old-signer --ks release.jks --set-installed-data true --set-shared-uid true --set-permission true --set-rollback false --set-auth true --new-signer --ks release2.jks

VEJA TAMBÉM

signapk(1) jar(1) zip(1) zipalign(1)

https://source.android.com/devices/tech/ota/sign_builds.html

AUTORES

O projeto de código aberto do Android.