Что это такое?
Набор консольных утилит для работы с файлами .dex (Android) и .class (Java). Больше всего он известен тем, что конвертирует dex-байткод внутри APK в jar-файл, который потом можно открыть в Java-декомпиляторе.
Это консольная утилита или библиотека, на которой я буду писать свой код?
И то и другое. В повседневном использовании это командная строка (d2j-dex2jar.sh и другие скрипты), но в пакет также входит dex-reader/writer — легковесный Java-API для чтения и записи .dex-файлов, сделанный по образцу ASM.
Как получить рабочую копию?
Собрать из исходников: выполните ./gradlew distZip в корне репозитория, возьмите dex-tools-2.1-SNAPSHOT.zip из папки dex-tools/build/distributions, распакуйте его (~5 МБ) и запускайте скрипты d2j-*.sh из этой папки.
Что должно быть установлено, чтобы хоть что-то запустить?
JDK: это Java-программы, которые собираются с помощью идущего в комплекте Gradle wrapper и запускаются через shell-скрипты. Минимальную версию Java в README не указывают.
Получу ли я на выходе читаемый Java-код?
Сам по себе нет: d2j-dex2jar превращает .dex в .class-файлы, упакованные в jar, и чтобы получить читаемый исходный код, этот jar ещё нужно скормить Java-декомпилятору.
Это работает на Windows или только на Linux/macOS?
В README показано только использование через shell-скрипты (sh d2j-dex2jar.sh), то есть документированы Linux и macOS. Но поскольку это обычная Java, программа работает везде, где есть JVM, — просто отдельный лаунчер для Windows не упоминается.
Что такое smali и когда он нужен вместо декомпилятора?
smali — это человекочитаемая форма байткода Dalvik, похожая на ассемблер. baksmali превращает dex в файлы .smali, которые можно читать и править, а smali собирает их обратно в dex — так можно не только изучать код приложения, но и вносить в него изменения.
Можно скормить ему целый APK или только голые .dex-файлы?
APK работает напрямую: в примере из README путь к APK передаётся скрипту как есть — sh d2j-dex2jar.sh -f ~/path/to/apktodecompile.apk — и на выходе получается apktodecompile-dex2jar.jar.
Чем его smali/baksmali отличаются от известных оригиналов?
Это независимая реализация с тем же синтаксисом, дополненная поддержкой escape-последовательностей в дескрипторах типов — это полезно, когда имена классов содержат необычные символы, на которых обычные инструменты спотыкаются.
Есть ли готовые бинарники или придётся собирать самому?
Ссылки на GitHub Releases есть в начале README, но описанный путь — собрать zip самостоятельно: ./gradlew distZip создаёт dex-tools-2.1-SNAPSHOT.zip (~5 МБ), который затем распаковывается и запускается.
What are similar projects?
ASC, bytecode-viewer, jadx, Apktool, rea, GhidraMCP, ghidra-mcp, Rise-6.9.5
Which topics is it in?
dex, obfuscation, apk, reverse-engineering, security-tools, utility, java, android, security, tool, apache-2.0, cli