How ejfkdev/ddc works
ddc is a Rust Android DEX-to-Java decompiler with a second, progressive-query workflow. Full runs expand APK/XAPK/APKS inputs into DEX images, decode their structures, decompile methods and render Java; query commands inspect metadata or methods without requiring a full decompile. The README also documents manifest/resource inspection and REST/MCP interfaces. The sampled sources support the parser and decompiler layers, but not all CLI dispatch or service wiring, so some documented subsystem links are dashed or omitted.
Main entry points: main.rs CLI entry · classdec.rs Class rendering · method.rs Method decompiler · file.rs DEX structure
Components 23
CLI workflows
- CLI entry
crates/ddc-cli/src/main.rs - Input expansion
crates/ddc-cli/src/inputs.rs - Java output
crates/ddc-cli/src/main.rs - Bilingual messages
crates/ddc-cli/src/lang.rs
DEX decoding
- DEX structure
crates/ddc-dex/src/file.rs - Binary reader
crates/ddc-dex/src/reader.rs - Instruction decode
crates/ddc-dex/src/insn.rs
Decompilation
- Control-flow graph
crates/ddc-dec/src/cfg.rs - Register lifting
crates/ddc-dec/src/lift.rs - Method decompiler
crates/ddc-dec/src/method.rs - Refinement passes
crates/ddc-dec/src/passes.rs - Class rendering
crates/ddc-dec/src/classdec.rs - Class context
crates/ddc-dec/src/ctx.rs - Cure simplifier
crates/ddc-dec/src/cure_pass.rs - Platform symbols
crates/ddc-dec/src/platform.rs
Queries and services
- Typed query cores
crates/ddc-cli/src/api.rs - Browse commands
crates/ddc-cli/src/browse.rs - Reference search
crates/ddc-cli/src/findrefs.rs - Manifest inspection
crates/ddc-cli/src/manifest.rs - Binary XML
crates/ddc-cli/src/axml.rs - Resource table
crates/ddc-cli/src/arsc.rs - REST and MCP
crates/ddc-cli/src/xyz_api.rs
Other components
- CLI user
Connections 23
- CLI user → CLI entry: runs commands
README.md - CLI entry → Input expansion: expands inputs
crates/ddc-cli/src/main.rs - Input expansion → DEX structure: parses DEX
- DEX structure → Binary reader: reads bytes
crates/ddc-dex/src/file.rs - DEX structure → Instruction decode: decodes code
crates/ddc-dex/src/file.rs - Method decompiler → Control-flow graph: builds CFG
crates/ddc-dec/src/method.rs - Method decompiler → Register lifting: lifts registers
crates/ddc-dec/src/method.rs - Method decompiler → Refinement passes: refines IR
crates/ddc-dec/src/method.rs - Class rendering → Method decompiler: decompiles methods
crates/ddc-dec/src/classdec.rs - Class rendering → Class context: uses context
crates/ddc-dec/src/classdec.rs - Class rendering → Cure simplifier: simplifies output
crates/ddc-dec/src/classdec.rs - CLI entry → Class rendering: decompiles classes
- Class rendering → Platform symbols: uses symbols
- CLI entry → Java output: writes Java
README.md - CLI entry → Browse commands: dispatches queries
crates/ddc-cli/src/main.rs - CLI entry → Typed query cores: dispatches typed queries
crates/ddc-cli/src/main.rs - CLI entry → Manifest inspection: handles manifest queries
crates/ddc-cli/src/main.rs - Manifest inspection → Binary XML: parses binary XML
crates/ddc-cli/src/manifest.rs - Manifest inspection → Resource table: looks up resources
crates/ddc-cli/src/arsc.rs - Browse commands → Reference search: searches references
crates/ddc-cli/src/browse.rs - REST and MCP → Typed query cores: exposes queries
crates/ddc-cli/src/xyz_api.rs - CLI user → REST and MCP: uses REST or MCP
README.md - CLI entry → Bilingual messages: selects messages
crates/ddc-cli/src/main.rs