apkanalyzer

A versão de linha de comando do APK Analyzer oferece insight imediato sobre a composição do seu APK após a conclusão do processo de compilação e permite comparar as diferenças entre dois APKs. Usando o APK Analyzer, é possível reduzir o tempo gasto na depuração de problemas com arquivos e recursos DEX no seu app e reduzir o tamanho do APK.

apkanalyzer está incluído no pacote Android SDK Tools e está localizado em android_sdk/tools/bin/apkanalyzer. Também é possível acessar a ferramenta APK Analyzer no Android Studio, conforme descrito em Analisar sua versão com o APK Analyzer.

Sintaxe

    apkanalyzer [global-options] subject verb [options] apk-file [apk-file2]
    

O subject é aquilo que você quer consultar e pode ser o APK inteiro ou parte dele. Um "subject" (assunto) pode ser qualquer um dos seguintes.

  • apk: analise os atributos do arquivo APK como o ID do aplicativo, código da versão e nome da versão.
  • files: analise os arquivos dentro do arquivo APK.
  • manifest: analise o conteúdo do manifest dentro do arquivo APK.
  • dex: analise os arquivos DEX dentro do arquivo APK.
  • resources: veja recursos de texto, imagem e string.

O verb é o que você quer saber sobre o assunto. Os assuntos, verbos e as opções deles estão descritos em Comandos.

Todo comando requer a especificação de um arquivo APK. Apenas o comando apk compare requer especificação de um segundo APK. É possível encurtar todas as opções, desde que a opção seja não ambígua. Por exemplo, a opção global --human-readable pode ser reduzida para -h. O exemplo a seguir analisa o apk (assunto) para conseguir o file-size (verbo) e, em seguida, imprime o tamanho do arquivo em um formato legível (opção -h):

apkanalyzer -h apk file-size myapk.apk

Opções globais

Opção Descrição
--human-readable Imprime tamanhos em formato legível.

Comandos

As descrições de comando a seguir são organizadas por assunto e listam as combinações disponíveis de verbos e opções para cada assunto.

Ver os atributos do arquivo APK Descrição
apk summary apk-file Imprime o ID do aplicativo, o código da versão e o nome da versão.

Exemplo de saída:


com.myapp 5 1.1-beta
apk file-size apk-file Imprime o tamanho total do arquivo do APK.
apk download-size apk-file Imprime uma estimativa do tamanho do download do APK.
apk features [--not-required] apk-file Imprime os recursos usados pelo APK que acionam a filtragem da Play Store. Adicione a opção --not-required para incluir recursos marcados como não necessários na saída.

Exemplo de saída:


android.hardware.type.watch
    android.hardware.microphone implied: requested android.permission.RECORD_AUDIO permission
apk compare [options] apk-file apk-file2 Compara os tamanhos de apk-file e apk-file2. É possível incluir as seguintes opções:
  • --different-only: imprime diretórios e arquivos com diferenças.
  • --files-only: não imprime entradas de diretório.
  • --patch-size: mostra uma estimativa do patch arquivo por arquivo em vez de uma diferença bruta.

Exemplo de saída (tamanho antigo / tamanho novo / diferença de tamanho / caminho):


39086736 48855615 9768879 /
    10678448 11039232 360784 /classes.dex
    18968956 18968956 0 /lib/
    110576 110100 -476 /AndroidManifest.xml
    ...
Ver o sistema de arquivos APK Descrição
files list apk-file Lista todos os arquivos no APK.

Exemplo de saída:


/
    /classes2.dex
    /classes.dex
    /assets/
    /assets/asset.data
    /AndroidManifest.xml
    /resources.arsc
    /res/
    ...
files cat --file path apk-file Imprime o conteúdo do arquivo. É necessário especificar um caminho dentro do APK usando a opção --file path, como --file /AndroidManifest.xml.
Ver informações no manifest Descrição
manifest print apk-file Imprime o manifest do APK no formato XML.
manifest application-id apk-file Imprime o valor do ID do aplicativo.
manifest version-name apk-file Imprime o valor do nome da versão.
manifest version-code apk-file Imprime o valor do código de versão.
manifest min-sdk apk-file Imprime a versão mínima do SDK.
manifest target-sdk apk-file Imprime a versão do SDK de destino.
manifest permissions apk-file Imprime a lista de permissões.
manifest debuggable apk-file Imprime se o app é depurável.
Acessar informações do arquivo DEX Descrição
dex list apk-file Imprime uma lista dos arquivos DEX no APK.
dex references [--files path] [--files path2] apk-file Imprime o número de referências de métodos nos arquivos DEX especificados. O padrão inclui todos os arquivos DEX. Adicione a opção --files para indicar arquivos específicos que você quer incluir.

Exemplo de saída:


classes.dex 59598
    classes2.dex 8042
dex packages [option1 option2 ...] apk-file Imprime a árvore de classes da DEX. Na saída, P, C, M e F indicam pacotes, classes, métodos e campos, respectivamente. E x, k, r e d indicam nós removidos, mantidos, referenciados e definidos, respectivamente.

Adicione as seguintes opções para refinar a saída:

  • --defined-only: inclui apenas as classes definidas no APK na saída.
  • --files: especifica os nomes dos arquivos DEX a serem incluídos. Padrão: todos os arquivos DEX.
  • --proguard-folder file: especifica a pasta de saída do Proguard para procurar por mapeamentos.
  • --proguard-mappings file: especifica o arquivo de mapeamentos do Proguard.
  • --proguard-seeds file: especifica o arquivo de sementes do Proguard.
  • --proguard-usages file: especifica o arquivo de usos do Proguard.
  • --show-removed: mostra classes e membros que foram removidos pelo Proguard.

Exemplo de saída (tipo / estado / métodos definidos / métodos referenciados / tamanho de byte / nome):


P d 1 1 85 g
    P d 1 1 85 g.a
    C d 1 1 85 g.a.a
    M d 1 1 45 g.a.a java.lang.Object get()
    C r 0 1 40 byte[]
    M r 0 1 40 byte[] java.lang.Object clone()
dex code --class class [--method method] Imprime o bytecode de uma classe ou método no formato smali. O nome da classe é obrigatório e imprime o nome completo da classe para descompilar. Adicione a opção --method para especificar o método a ser descompilado. O formato para o método de descompilação é name(params)returnType, por exemplo, someMethod(Ljava/lang/String;I)V.
Ver recursos armazenados em res/ e resources.arsc Descrição
resources packages Imprime uma lista dos pacotes definidos na tabela de recursos.
resources configs --type type [--package package] apk-file Imprime uma lista de configurações para o type especificado. O type é um tipo de recurso, como string. Inclua a opção --package se quiser especificar o nome do pacote da tabela de recursos. Caso contrário, o primeiro pacote definido será usado.
resources value --config config --name name --type type [--package package] apk-file Imprime o valor do recurso especificado por config, name e type. A opção type é o tipo do recurso, como string. Inclua a opção --package se quiser especificar o nome do pacote da tabela de recursos. Caso contrário, o primeiro pacote definido será usado.
resources names --config config --type type [--package package] apk-file Imprime uma lista de nomes de recursos para uma configuração e um tipo. A opção type é o tipo do recurso, como string. Inclua a opção --package se quiser especificar o nome do pacote da tabela de recursos. Caso contrário, o primeiro pacote definido será usado.
resources xml --file path apk-file Imprime a forma legível de um arquivo XML binário. Inclua a opção file para especificar o caminho para o arquivo.