La versión de línea de comandos del Analizador de APK proporciona información inmediata sobre la composición del APK una vez que se completa el proceso de compilación y te permite comparar las diferencias entre dos APKs. El uso del Analizador de APK reduce el tiempo que dedicas a depurar problemas con archivos y recursos DEX dentro de la app y reduce el tamaño del APK.
apkanalyzer
se incluye en el paquete de herramientas de línea de comandos del SDK de Android en android_sdk/cmdline-tools/version/bin/apkanalyzer
.
Otra opción es acceder a la herramienta Analizador de APK dentro de Android Studio según se describe en Cómo analizar tu compilación con el Analizador de APK.
Sintaxis
La sintaxis de apkanalyzer
es la siguiente:
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 de él. Este elemento puede ser cualquiera de los siguientes:
apk
: Analiza los atributos del archivo APK, como el ID de aplicación y el código y el nombre de la versión.files
: Analiza los archivos dentro del archivo APK.manifest
: Analiza el contenido del manifiesto dentro del archivo APK.dex
: Analiza los archivos DEX dentro del archivo APK.resources
: Permite ver recursos de texto, imagen y strings.
El verb
es lo que quieres saber sobre el sujeto. Los sujetos, los verbos y sus opciones se describen en la siguiente sección sobre 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 apk
(sujeto) para obtener su file-size
(verbo) y luego imprimir el tamaño del archivo en lenguaje natural (opción -h
):
apkanalyzer -h apk file-size myapk.apk
Comandos
Las siguientes descripciones de comandos están organizadas por sujeto e incluyen las combinaciones de verbos y opciones disponibles para cada sujeto:
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
|
Muestra las 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:
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 del 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 con 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 los archivos específicos que desees 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. Y x , k , r y d indican nodos borrados, guardados, mencionados y definidos, respectivamente.
Agrega las siguientes opciones para definir mejor el resultado:
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]
|
Muestra el código de bytes de una clase o método en formato Smali. 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 |
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 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 string .
Incluye la opción |
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 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.
|