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. O uso do APK Analyzer reduz o tempo gasto na depuração de problemas com arquivos e recursos DEX no seu app e reduz o tamanho do APK.
O apkanalyzer está incluído no pacote
ferramentas de linha de comando do SDK do Android em
android_sdk/cmdline-tools/version/bin/apkanalyzer.
Também é possível acessar a ferramenta APK Analyzer no
Android Studio, conforme descrito em
Analisar seu build com o APK
Analyzer.
Sintaxe
A sintaxe de apkanalyzer é:
apkanalyzer [global-options] subject verb [options] apk-file [apk-file2]
O subject é o 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 no 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 na seção a seguir sobre comandos.
Todo comando requer a especificação de um arquivo APK. Somente o
comando apk compare requer que você especifique 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 mostra o tamanho do arquivo em um
formato legível (opção -h):
apkanalyzer -h apk file-size myapk.apk
Comandos
As descrições de comando a seguir são organizadas por assunto e listam as combinações disponíveis de verbos e as opções para cada assunto:
| 
       | 
        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
     | 
    Exibe uma estimativa do tamanho do download do APK. | 
      apk features [--not-required] apk-file
     | 
    
     Exibe 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 o tamanho de apk-file e
      apk-file2.
       É possível incluir as seguintes opções:
      
 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
     | 
    
      Exibe 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ê queira incluir.
Exemplo de saída: classes.dex 59598 classes2.dex 8042  | 
  
   dex packages [option1 option2 ...] apk-file
     | 
    
      Exibe a árvore da classe a partir de 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: 
 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]
   | 
  
  Exibe o bytecode de uma classe ou método no formato smali. O nome da classe
  é obrigatório e mostra o nome da classe totalmente qualificado para descompilar. Adicione a
  opção --method para especificar o método a ser descompilado.
O formato
  para o método a ser descompilado é   | 
| Ver recursos armazenados em res/ e resources.arsc | Descrição | 
    resources packages
   | 
  Exibe 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
    caso queira 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
   | 
  
  Exibe o valor do recurso especificado por config,
  name e type. A
   opção type é o tipo do recurso, como
  string.
Inclua a opção   | 
  
    resources names --config config --type type
     [--package package] apk-file
   | 
  
    Exibe 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
    caso queira especificar o nome do pacote da tabela de recursos. Caso contrário,
    o primeiro pacote definido será usado.
   | 
  
    resources xml --file path apk-file
       | 
      
      Exibe a forma legível de um arquivo XML binário.
      Inclua a
     opção file para especificar o caminho para o arquivo.
   |