Volver a actualizaciones
Nuevo releaseJul 20, 2026

jadx v1.5.6

Herramienta de línea de comandos y GUI para descompilar archivos Android Dex y APK en código fuente Java legible, con capacidades de decodificación de recursos, desofuscación y depuración de Smali.

Compartir

JADX

Estado de compilación Contribuyentes de GitHub Todos los lanzamientos de GitHub Lanzamiento de GitHub (último por SemVer) Último lanzamiento Maven Central Java 11+ Licencia

jadx - Descompilador de Dex a Java

Herramientas de línea de comandos y GUI para generar código fuente Java a partir de archivos Android Dex y Apk

[!WARNING] Tenga en cuenta que en la mayoría de los casos jadx no puede descompilar el 100% del código, por lo que se producirán errores.
Consulte la Guía de solución de problemas para soluciones alternativas.

Características principales:

  • Descomprimir bytecode Dalvik a código Java desde archivos APK, dex, aar, aab y zip
  • Decodificar AndroidManifest.xml y otros recursos de resources.arsc
  • Desofuscador incluido

Características de jadx-gui:

  • Ver código descompilado con sintaxis resaltada
  • Saltar a la declaración
  • Buscar usos
  • Búsqueda de texto completo
  • Depurador smali, consulte la página wiki para su configuración y uso

Los atajos de teclado de Jadx-gui se pueden encontrar aquí

Vea estas características en acción aquí: Resumen de características de jadx-gui

Descargar

Después de descargar, descomprima el archivo zip, vaya al directorio bin y ejecute:

  • jadx - versión de línea de comandos
  • jadx-gui - versión de interfaz gráfica

En Windows, ejecute los archivos .bat con doble clic
Nota: asegúrese de haber instalado Java 11 o una versión posterior de 64 bits. Para Windows, puede descargarlo desde oracle.com (seleccione el instalador x64).

Instalar

  • Arch Linux Paquete de Arch Linux Versión AUR
    sudo pacman -S jadx
    
  • macOS Versión de Homebrew
    brew install jadx
    
  • Flathub Versión de Flathub
    flatpak install flathub com.github.skylot.jadx
    

Usar jadx como biblioteca

Puede usar jadx en sus proyectos Java, consulte los detalles en la página wiki

Compilar desde el código fuente

JDK 17 o superior debe estar instalado:

git clone https://github.com/skylot/jadx.git
cd jadx
./gradlew dist

(en Windows, use gradlew.bat en lugar de ./gradlew)

Los scripts para ejecutar jadx se colocarán en build/jadx/bin y también se empaquetarán en build/jadx-<version>.zip

Uso

jadx[-gui] [command] [options] <input files> (.apk, .dex, .jar, .class, .smali, .zip, .aar, .arsc, .aab, .xapk, .apkm, .jadx.kts)
comandos (use '<command> --help' para las opciones del comando):
  plugins	  - gestionar plugins de jadx

options:
  -d, --output-dir                              - directorio de salida
  -ds, --output-dir-src                         - directorio de salida para fuentes
  -dr, --output-dir-res                         - directorio de salida para recursos
  -r, --no-res                                  - no decodificar recursos
  -s, --no-src                                  - no descompilar código fuente
  -j, --threads-count                           - cantidad de hilos de procesamiento, valor predeterminado: 16
  --single-class                                - descompilar una sola clase, nombre completo, raw o alias
  --single-class-output                         - archivo o directorio para escribir si se descompila una sola clase
  --output-format                               - puede ser 'java' o 'json', valor predeterminado: java
  -e, --export-gradle                           - guardar como proyecto gradle (configurar '--export-gradle-type' a 'auto')
  --export-gradle-type                          - plantilla de proyecto Gradle para exportación:
                                                   'auto' - detectar automáticamente
                                                   'android-app' - Aplicación Android (apk)
                                                   'android-library' - Biblioteca Android (aar)
                                                   'simple-java' - Java simple
  -m, --decompilation-mode                      - modo de salida de código:
                                                   'auto' - intentar mejores opciones (predeterminado)
                                                   'restructure' - restaurar estructura de código (código Java normal)
                                                   'simple' - instrucciones simplificadas (lineal, con goto)
                                                   'fallback' - instrucciones sin modificar
  --show-bad-code                               - mostrar código inconsistente (descompilado incorrectamente)
  --no-xml-pretty-print                         - no embellecer XML
  --no-imports                                  - deshabilitar uso de importaciones, escribir siempre el nombre completo del paquete
  --no-debug-info                               - deshabilitar análisis y procesamiento de información de depuración
  --add-debug-lines                             - agregar comentarios con números de línea de depuración si están disponibles
  --no-inline-anonymous                         - deshabilitar inserción de clases anónimas
  --no-inline-methods                           - deshabilitar inserción de métodos
  --no-move-inner-classes                       - deshabilitar mover clases internas al padre
  --no-inline-kotlin-lambda                     - deshabilitar inserción de lambdas Kotlin
  --no-finally                                  - no extraer bloque finally
  --no-restore-switch-over-string               - no restaurar switch sobre cadena
  --no-replace-consts                           - no reemplazar valor constante con campo constante coincidente
  --escape-unicode                              - escapar caracteres no latinos en cadenas (con \u)
  --respect-bytecode-access-modifiers           - no cambiar modificadores de acceso originales
  --mappings-path                               - archivo o directorio de mapeo de desofuscación. Formatos permitidos: Tiny y Tiny v2 (ambos '.tiny'), Enigma (.mapping) o directorio Enigma
  --mappings-mode                               - establecer modo para manejar el archivo de mapeo de desofuscación:
                                                   'read' - solo leer, el usuario siempre puede guardar manualmente (predeterminado)
                                                   'read-and-autosave-every-change' - leer y guardar automáticamente después de cada cambio
                                                   'read-and-autosave-before-closing' - leer y guardar automáticamente antes de salir de la aplicación o cerrar el proyecto
                                                   'ignore' - no leer ni guardar (se puede usar para omitir la carga de archivos de mapeo referenciados en el archivo del proyecto)
  --deobf                                       - activar desofuscación
  --deobf-min                                   - longitud mínima de nombre, renombrado si es más corto, valor predeterminado: 3
  --deobf-max                                   - longitud máxima de nombre, renombrado si es más largo, valor predeterminado: 64
  --deobf-whitelist                             - lista separada por espacios de clases (nombre completo) y paquetes (terminan con '.*') a excluir de la desofuscación, valor predeterminado: android.support.v4.* android.support.v7.* android.support.v4.os.* android.support.annotation.Px androidx.core.os.* androidx.annotation.Px
  --deobf-cfg-file                              - archivo de mapeo de desofuscación utilizado para nombres generados automáticamente por JADX (en formato JOBF), valor predeterminado: mismo directorio y nombre que el archivo de entrada con extensión '.jobf'
  --deobf-cfg-file-mode                         - establecer modo para manejar el archivo de mapa de desofuscación de nombres generados automáticamente por JADX:
                                                   'read' - leer si se encuentra, no guardar (predeterminado)
                                                   'read-or-save' - leer si se encuentra, guardar en caso contrario (no sobrescribir)
                                                   'overwrite' - no leer, siempre guardar
                                                   'ignore' - no leer ni guardar
  --deobf-res-name-source                       - mejor fuente de nombre para recursos:
                                                   'auto' - seleccionar automáticamente el mejor nombre (predeterminado)
                                                   'resources' - usar nombres de recursos
                                                   'code' - usar nombres de campos de clase R
  --use-source-name-as-class-name-alias         - usar nombre fuente como alias de nombre de clase:
                                                   'always' - usar siempre el nombre fuente si está disponible
                                                   'if-better' - usar nombre fuente si parece mejor que el actual
                                                   'never' - nunca usar nombre fuente, incluso si está disponible
  --source-name-repeat-limit                    - permitir usar nombre fuente si aparece menos de un número límite, valor predeterminado: 10
  --use-kotlin-methods-for-var-names            - usar métodos intrínsecos de Kotlin para renombrar variables, valores: disable, apply, apply-and-hide, valor predeterminado: apply
  --use-headers-for-detect-resource-extensions  - Usar cabeceras para detectar extensiones de recursos si el recurso está ofuscado
  --rename-flags                                - opciones de corrección (lista separada por comas de):
                                                   'case' - corregir problemas de sensibilidad de mayúsculas/minúsculas (según la opción --fs-case-sensitive),
                                                   'valid' - renombrar identificadores Java para que sean válidos,
                                                   'printable' - eliminar caracteres no imprimibles de identificadores,
                                                  o único 'none' - para deshabilitar todos los renombramientos
                                                  o único 'all' - para habilitar todos (predeterminado)
  --integer-format                              - cómo se muestran los enteros:
                                                   'auto' - seleccionar automáticamente (predeterminado)
                                                   'decimal' - usar decimal
                                                   'hexadecimal' - usar hexadecimal
  --type-update-limit                           - límite de actualización de tipo (por instrucción), valor predeterminado: 10
  --fs-case-sensitive                           - tratar el sistema de archivos como sensible a mayúsculas/minúsculas, falso por defecto
  --cfg                                         - guardar gráfico de flujo de control de métodos en archivo dot
  --raw-cfg                                     - guardar gráfico de flujo de control de métodos (usar instrucciones sin procesar)
  --call-graph                                  - guardar gráfico de llamadas de la aplicación en formato: 'dot' o 'json', valor predeterminado: none
  -f, --fallback                                - establecer '--decompilation-mode' a 'fallback' (obsoleto)
  --use-dx                                      - usar dx/d8 para convertir bytecode Java
  --comments-level                              - establecer nivel de comentarios de código, valores: error, warn, info, debug, user-only, none, valor predeterminado: info
  --log-level                                   - establecer nivel de registro, valores: quiet, progress, error, warn, info, debug, valor predeterminado: progress
  -v, --verbose                                 - salida detallada (establecer --log-level a DEBUG)
  -q, --quiet                                   - desactivar salida (establecer --log-level a QUIET)
  --disable-plugins                             - lista separada por comas de ids de plugins a deshabilitar
  --config <config-ref>                         - cargar configuración desde archivo, <config-ref> puede ser:
                                                   ruta a archivo '.json'
                                                   nombre corto - usa archivo con este nombre desde el directorio de configuración
                                                   'none' - para deshabilitar carga de configuración
  --save-config <config-ref>                    - guardar opciones actuales en archivo de configuración y salir, <config-ref> puede ser:
                                                   vacío - para configuración predeterminada
                                                   ruta a archivo '.json'
                                                   nombre corto - el archivo se guardará en el directorio de configuración
  --print-files                                 - imprimir archivos y directorios usados por jadx (config, cache, temp)
  --version                                     - imprimir versión de jadx
  -h, --help                                    - imprimir esta ayuda

Opciones de plugin (-P<nombre>=<valor>):
  dex-input: Cargar archivos .dex y .apk
    - dex-input.verify-checksum                 - verificar checksum del archivo dex antes de cargar, valores: [yes, no], valor predeterminado: yes
  java-convert: Convertir archivos .class, .jar y .aar a dex
    - java-convert.mode                         - modo de conversión, valores: [dx, d8, both], valor predeterminado: both
    - java-convert.d8-desugar                   - usar desugar en d8, valores: [yes, no], valor predeterminado: no
  kotlin-metadata: Usar anotación kotlin.Metadata para generación de código
    - kotlin-metadata.class-alias               - renombrar alias de clase, valores: [yes, no], valor predeterminado: yes
    - kotlin-metadata.method-args               - renombrar argumentos de función, valores: [yes, no], valor predeterminado: yes
    - kotlin-metadata.fields                    - renombrar campos, valores: [yes, no], valor predeterminado: yes
    - kotlin-metadata.companion                 - renombrar objeto companion, valores: [yes, no], valor predeterminado: yes
    - kotlin-metadata.data-class                - agregar modificador de clase de datos, valores: [yes, no], valor predeterminado: yes
    - kotlin-metadata.to-string                 - renombrar campos usando toString, valores: [yes, no], valor predeterminado: yes
    - kotlin-metadata.getters                   - renombrar getters simples a nombres de campo, valores: [yes, no], valor predeterminado: yes
  kotlin-smap: Usar anotación kotlin.SourceDebugExtension para renombrar alias de clase
    - kotlin-smap.class-alias-source-dbg        - renombrar alias de clase desde SourceDebugExtension, valores: [yes, no], valor predeterminado: no
  rename-mappings: soporte de varios mapeos
    - rename-mappings.format                    - formato de mapeo, valores: [AUTO, TINY_FILE, TINY_2_FILE, ENIGMA_FILE, ENIGMA_DIR, PROGUARD_FILE, SRG_FILE, XSRG_FILE, JAM_FILE, CSRG_FILE, TSRG_FILE, TSRG_2_FILE, INTELLIJ_MIGRATION_MAP_FILE, RECAF_SIMPLE_FILE, JOBF_FILE], valor predeterminado: AUTO
    - rename-mappings.invert                    - invertir mapeo al cargar, valores: [yes, no], valor predeterminado: no
  smali-input: Cargar archivos .smali
    - smali-input.api-level                     - nivel de API de Android, valor predeterminado: 27

Variables de entorno:
  JADX_DISABLE_XML_SECURITY - establecer a 'true' para deshabilitar todas las comprobaciones de seguridad para archivos XML
  JADX_DISABLE_ZIP_SECURITY - establecer a 'true' para deshabilitar todas las comprobaciones de seguridad para archivos zip
  JADX_ZIP_MAX_ENTRIES_COUNT - número máximo permitido de entradas en archivos zip (predeterminado: 100 000)
  JADX_CONFIG_DIR - directorio de configuración personalizado, usando el del sistema por defecto
  JADX_CACHE_DIR - directorio de caché personalizado, usando el del sistema por defecto
  JADX_TMP_DIR - directorio temporal personalizado, usando el del sistema por defecto

Ejemplos:
  jadx -d out classes.dex
  jadx --rename-flags "none" classes.dex
  jadx --rename-flags "valid, printable" classes.dex
  jadx --log-level ERROR app.apk
  jadx -Pdex-input.verify-checksum=no app.apk

Estas opciones también funcionan en jadx-gui desde la línea de comandos y anulan las opciones del diálogo de preferencias

Uso del comando plugins

usage: plugins [options]
options:
  -i, --install <locationId>      - instalar plugin con locationId
  -j, --install-jar <path-to.jar> - instalar plugin desde archivo jar
  -l, --list                      - listar plugins instalados
  -a, --available                 - listar plugins disponibles desde jadx-plugins-list (también conocido como marketplace)
  -u, --update                    - actualizar plugins instalados
  --uninstall <pluginId>          - desinstalar plugin con pluginId
  --disable <pluginId>            - deshabilitar plugin con pluginId
  --enable <pluginId>             - habilitar plugin con pluginId
  --list-all                      - listar todos los plugins incluidos los integrados y dropins
  --list-versions <locationId>    - obtener las últimas versiones del plugin desde locationId (descargará todos los artefactos, limitado a 10)
  -h, --help                      - imprimir esta ayuda

Solución de problemas

Consulte la página wiki Preguntas y respuestas sobre solución de problemas

Contribuir

Para apoyar este proyecto puede:

  • Publicar ideas sobre nuevas características/optimizaciones que sean importantes para usted
  • Enviar problemas de descompilación, por favor lea antes de proceder: Abrir issue
  • Abrir pull request, por favor siga estas reglas: Proceso de Pull Request

Licenciado bajo la Licencia Apache 2.0

Categorías