
Android-DEX-→-Java-Decompiler in Rust, auf Geschwindigkeit ausgelegt — vollständige Apps in Sekunden, Abfragen in Millisekunden. Progressive Analyse, javac-verifizierte Ausgabe, jede DEX-Version, Multi-Dex- & XAPK/APKS/APKM-Container.
Englisch | 简体中文
ddc dekompiliert Android-DEX-Bytecode zurück in lesbares Java — in
realistischer App-Größenordnung, abfragbar wie eine Datenbank und javac-verifiziert:
Jede der 909.689 Dateien, die es über sieben reale APKs hinweg erzeugt,
lässt sich fehlerfrei parsen.
javac mit null Syntaxfehlern; jede Klasse eines
Namenspaars mit abweichender Groß-/Kleinschreibung (X/Cua vs. X/cua) bleibt als
eigene Datei erhalten, statt dass die letzte sie stillschweigend überschreibt.(a) -> …, Cls::name, a + b).str, getName() → name, Kotlin-Intrinsics-Parameterstrings) statt v12;
IntDef-Literale werden sofort als ihre Konstanten ausgegeben
(setVisibility(8) → View.GONE; eine eingebaute android-37-Domänen-
Tabelle, --symbols überschreibt); Kotlin-Null-Check-Rauschen wird entfernt und
synthetische access$NNN-Brücken werden an ihren Aufrufstellen eingebettet.--fast (Vereinfachung
überspringen, Formatierung beibehalten).ddc serve stellt jede Abfrage als REST-Route bereit (GET mit Query-
Parametern oder POST mit einem JSON-Body) plus GET /openapi.json und einen streamable MCP-Endpunkt unter /mcp — richte einen
MCP-Client auf http://addr/mcp; ddc http ist nur REST (kein
/mcp); ddc mcp stdio|http führt dieselben Befehle als MCP-Tools
mit Eingabe- und Ausgabeschemata aus. Abfragebefehle akzeptieren --format auto|text|table|markdown|md|json|jsonl (auto: Tabelle auf einem Terminal,
die stabile Textform bei Pipe-Weiterleitung).DDC_LANG=zh|en erzwingt; englischer Fallback).jdc-core, dem
maschinenneutralen Kern, der mit
jcdc geteilt wird.macOS (Homebrew):
brew install ejfkdev/tap/ddc
Windows (Scoop) — fügen Sie den Bucket einmal hinzu und installieren Sie dann nach Namen (Scoop
löst keine bloße user/repo/app-Form auf — Issue #3):
scoop bucket add ejfkdev https://github.com/ejfkdev/scoop-bucket
scoop install ddc
# or install straight from the manifest URL, no bucket needed:
scoop install https://raw.githubusercontent.com/ejfkdev/scoop-bucket/main/bucket/ddc.json
cargo-binstall (jede Plattform – ruft die vorgebaute Release-Binärdatei ab, anstatt zu kompilieren):
cargo binstall ddc-cli
Binärdateien: Jedes Release
liefert rohe Binärdateien (keine Archive) für linux-amd64, linux-arm64,
windows-amd64, windows-arm64, macos-amd64 und macos-arm64 —
Nicht-macOS-Builds sind UPX-komprimiert.
Aus dem Quellcode (Rust stable):
git clone https://github.com/ejfkdev/ddc && cd ddc
cargo build --release
ddc app.apk # full decompile → app-out/
ddc app.apk -c com.example.Foo # one class to stdout
ddc app.apk -o - | less # everything to stdout
ddc info app.apk # app context (label via arsc, package,
# version, md5) + per-dex counts
ddc mainactivity app.apk # entry point: package + launcher
ddc findrefs app.apk string token # every const-string "token" site
ddc getmethod app.apk Foo.toString # one method, all overloads
ddc pkg app.apk --app -o own/ # the app's own code only
Vollständige Optionen und Beispiele: ddc --help (Unterbefehl-Menü nach
Workflow gruppiert). Die vollständige Referenz — die Semantik jeder Option, das Ausgabeformat und Verhalten jedes
Unterbefehls — befindet sich in
docs/cli.md (中文).
Sieben reale APKs, Release-Build, gemessen nach einer Abkühlphase (Apple Silicon, 6P+12E). Das 39-APK-Validierungskorpus (4,08 Mio. dekompilierte Dateien, Wandzeit pro APK / Spitzen-RSS / javac-Parse-Gate) ist in docs/validation.md (中文) zu finden.
| APK | Größe | Vollständige Dekompilierung | Spitzen-RSS |
|---|---|---|---|
| reqable | 34 MB | 0,57s | 162 MB |
| Telegram | 62 MB | 4,50s | 786 MB |
| 139 MB | 13,6s (99.483 Dateien — alle Klassenpaare mit Groß-/Kleinschreibungsvarianten erhalten) | 944 MB | |
| 226 MB | 13,5s | 1173 MB | |
| weixin | 268 MB | 32,7s | 1401 MB |
| lark | 398 MB | 16,1s | 2226 MB |
| 374 MB | 37,1s | 2268 MB |
Abfrage-Unterbefehle auf denselben APKs (Zellen: Zeit / Spitzen-RSS;
strings -f <package> --with-locations, findrefs auf dem Paket-String
und der Methode onCreate, hierarchy/disasm/getclass auf der
Launcher-Klasse jeder App):