Convert smali back to readable Java source code — or get the smali disassembly of any APK or DEX.
Drag and drop a .smali file, or an APK or DEX you want smali for.
Smali is assembled into a DEX, then decompiled to Java with JADX.
Read the Java sources and the smali disassembly side by side.
Smali is the assembly language for the Dalvik virtual machine — the bytecode format Android apps actually run. The name comes from the Icelandic word for "assembler", and its counterpart baksmali ("disassembler") is what apktool uses under the hood to turn a classes.dex file into a tree of readable .smali files.
Each .smali file describes exactly one class: its superclass, its fields, and every method as a sequence of Dalvik instructions with explicit register allocation. Where Java has int x = a + b;, smali has add-int v0, v1, v2. Nothing is inferred and nothing is reconstructed — it is a direct, lossless textual form of the bytecode.
Going from smali back to Java is a two-stage process, and this tool does both. First the smali source is assembled into a Dalvik executable, which validates that your smali is well-formed and resolves all the register and type references. Then that DEX is decompiled to Java.
This round trip is useful when you have been handed a single smali class out of context — from a bug report, a security advisory, or a colleague — and you want to read it as Java rather than as assembly. Your smali must be a complete class definition, starting with a .class directive; a bare .method block will not assemble on its own.
Every Android file decompiled on this site now produces a smali/ folder alongside the usual sources/ and resources/ folders. The package structure mirrors the Java tree, so sources/com/example/MainActivity.java has its counterpart at smali/com/example/MainActivity.smali.
Having both is more useful than having either alone, because they fail in different places.
Java decompilers reconstruct source code from bytecode, and reconstruction is a best-effort process. Smali is a transcription, and transcription always succeeds. That difference matters in several common situations:
// Couldn't decompile comments; the smali is unaffected.switch. If you are doing a security review, the smali is the authoritative record.Class.forName are trivial to grep for in smali, where every constant appears literally as const-string.Dalvik is register-based rather than stack-based, which makes smali noticeably easier to read than JVM bytecode. A few conventions cover most of what you will see:
v0, v1, … are local registers; p0, p1, … are parameters, with p0 being this in an instance method.invoke-virtual, invoke-static, invoke-direct and invoke-interface distinguish call types; the result is retrieved with move-result.I is int, Ljava/lang/String; is String, [B is a byte array..line directives carry original source line numbers when the app was not built with debug info stripped.Upload your .smali file. It is assembled back into a Dalvik executable and then decompiled to Java with JADX. You get the Java class alongside the original smali so you can read both.
Smali is the human-readable assembly language for the Dalvik virtual machine used by Android. It is what apktool and baksmali produce when they disassemble a DEX file. Each .smali file corresponds to one Java class.
Yes. Every APK, XAPK, AAB and DEX file decompiled here produces a smali folder next to the Java sources, so you can compare the exact Dalvik instructions against the reconstructed Java.
Smali is an exact representation of what the app actually executes, while decompiled Java is a reconstruction. When a decompiler produces broken or missing code — common with heavy obfuscation — the smali is still correct and complete.
This tool assembles smali into a DEX so you can verify your edits compile and see what Java they correspond to. Repacking and signing a full APK still needs apktool and apksigner on your own machine.
Uploads are limited to 1 GB. Smali disassembly of very large APKs is capped so decompilation stays fast; when that happens a note in the smali folder tells you how many classes were written.