apkanalyzer

La versión de línea de comandos del Analizador de APK proporciona información inmediata sobre la composición de tu APK una vez que se completa el proceso de compilación y te permite comparar las diferencias entre dos APK. Al usar el Analizador de APK, puedes reducir el tiempo que dedicas a depurar problemas con archivos y recursos DEX dentro de tu app y reducir el tamaño de tu APK.

apkanalyzer se incluye en el paquete de herramientas del SDK de Android y se encuentra en android_sdk/tools/bin/apkanalyzer. Otra opción es acceder a la herramienta Analizador de APK dentro de Android Studio como se describe en Cómo analizar tu compilación con el Analizador de APK.

Sintaxis

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

El subject es lo que deseas consultar y puede ser el APK completo o una parte del APK. Un asunto puede ser cualquiera de los siguientes:

  • apk: analizar los atributos del archivo APK, como el ID de aplicación, el código de la versión y el nombre de la versión
  • files: analizar los archivos dentro del archivo APK
  • manifest: analizar el contenido del manifiesto dentro del archivo APK
  • dex: analizar los archivos DEX dentro del archivo APK
  • resources: ver recursos de texto, imagen y strings

El verb es lo que quieres saber sobre el tema. Los asuntos, los verbos y sus opciones se describen en Comandos.

Para cada comando, debes especificar un archivo APK. Solo para el comando apk compare debes especificar un segundo archivo APK. Puedes acortar cada opción, siempre que esta no sea ambigua. Por ejemplo, la opción global --human-readable se puede acortar a -h. En el siguiente ejemplo, se analiza el apk (asunto) para obtener su file-size (verbo), y, luego, imprimir el tamaño del archivo en un formato en lenguaje natural (opción -h):

apkanalyzer -h apk file-size myapk.apk

Opciones globales

Opción Descripción
--human-readable Imprime tamaños en un formato en lenguaje natural.

Comandos

Las siguientes descripciones de comandos están organizadas por asunto e incluyen las combinaciones de verbos y opciones disponibles para cada asunto.

Ver atributos del archivo APK Descripción
apk summary apk-file Imprime el ID de aplicación, el código de la versión y el nombre de la versión.

Ejemplo de resultado:


com.myapp 5 1.1-beta
apk file-size apk-file Imprime el tamaño total del archivo del APK.
apk download-size apk-file Imprime una estimación del tamaño de descarga del APK.
apk features [--not-required] apk-file Imprime funciones utilizadas por el APK que activan el filtrado de Play Store. Agrega la opción --not-required para incluir funciones marcadas como no obligatorias en el resultado.

Ejemplo de resultado:


android.hardware.type.watch
    android.hardware.microphone implied: requested android.permission.RECORD_AUDIO permission
apk compare [options] apk-file apk-file2 Compara los tamaños de apk-file y apk-file2. Puedes incluir las siguientes opciones:
  • --different-only: imprimir directorios y archivos con diferencias
  • --files-only: no imprimir entradas de directorio
  • --patch-size: mostrar una estimación del parche archivo por archivo en lugar de una diferencia sin procesar

Resultado de ejemplo (tamaño anterior/tamaño nuevo/diferencia de tamaño/ruta):


39086736 48855615 9768879 /
    10678448 11039232 360784 /classes.dex
    18968956 18968956 0 /lib/
    110576 110100 -476 /AndroidManifest.xml
    ...
Ver sistema de archivos APK Descripción
files list apk-file Enumera todos los archivos del APK.

Ejemplo de resultado:


/
    /classes2.dex
    /classes.dex
    /assets/
    /assets/asset.data
    /AndroidManifest.xml
    /resources.arsc
    /res/
    ...
files cat --file path apk-file Imprime el contenido del archivo. Debes especificar una ruta dentro del APK utilizando la opción --file path, como --file /AndroidManifest.xml.
Ver información en el manifiesto Descripción
manifest print apk-file Imprime el manifiesto del APK en formato XML.
manifest application-id apk-file Imprime el valor del ID de aplicación.
manifest version-name apk-file Imprime el valor del nombre de la versión.
manifest version-code apk-file Imprime el valor del código de la versión.
manifest min-sdk apk-file Imprime la versión mínima del SDK.
manifest target-sdk apk-file Imprime la versión del SDK de destino.
manifest permissions apk-file Imprime la lista de permisos.
manifest debuggable apk-file Imprime si la aplicación es depurable.
Acceder a la información del archivo DEX Descripción
dex list apk-file Imprime una lista de los archivos DEX del APK.
dex references [--files path] [--files path2] apk-file Imprime el número de referencias de métodos en los archivos DEX especificados. El valor predeterminado equivale a todos los archivos DEX. Agrega la opción --files para indicar qué archivos específicos deseas incluir.

Ejemplo de resultado:


classes.dex 59598
    classes2.dex 8042
dex packages [option1 option2 ...] apk-file Imprime el árbol de clases desde DEX. En el resultado, P, C, M y F indican paquetes, clases, métodos y campos, respectivamente. Mientras que x, k, r y d indican nodos eliminados, guardados, mencionados y definidos, respectivamente.

Agrega las siguientes opciones para definir mejor el resultado:

  • --defined-only: incluir en el resultado solo las clases definidas en el APK
  • --files: especificar los nombres de archivo DEX que se incluirán. Valor predeterminado: todos los archivos DEX
  • --proguard-folder file: especificar la carpeta de salida de ProGuard para buscar asignaciones
  • --proguard-mappings file: especificar el archivo de asignaciones ProGuard
  • --proguard-seeds file: especificar el archivo de origen ProGuard
  • --proguard-usages file: especificar el archivo de usos ProGuard
  • --show-removed: mostrar clases y miembros que fueron eliminados por ProGuard

Resultado de ejemplo (tipo/estado/métodos definidos/métodos mencionados/tamaño en bytes/nombre):


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 el código de byte de una clase o método en formato pequeño. El nombre de la clase es obligatorio y se imprime totalmente calificado para descompilar. Agrega la opción --method para especificar el método de descompilación. El formato de este método es name(params)returnType; por ejemplo, someMethod(Ljava/lang/String;I)V.
Ver los recursos almacenados en res/ y resources.arsc Descripción
resources packages Imprime una lista de los paquetes que se definen en la tabla de recursos.
resources configs --type type [--package package] apk-file Imprime una lista de configuraciones para el type especificado. El type es un tipo de recurso, como una string. Incluye la opción --package si deseas especificar el nombre del paquete de la tabla de recursos; de lo contrario, se utilizará el primer paquete definido.
resources value --config config --name name --type type [--package package] apk-file Imprime el valor del recurso especificado por config, name y type. La opción type es el tipo de recurso, como una string. Incluye la opción --package si deseas especificar el nombre del paquete de la tabla de recursos; de lo contrario, se utilizará el primer paquete definido.
resources names --config config --type type [--package package] apk-file Imprime una lista de nombres de recursos para una configuración y un tipo. La opción type es el tipo de recurso, como una string. Incluye la opción --package si deseas especificar el nombre del paquete de la tabla de recursos; de lo contrario, se utilizará el primer paquete definido.
resources xml --file path apk-file Imprime un archivo XML binario en formato en lenguaje natural. Incluye la opción file para especificar la ruta del archivo.