How can one decompile Android DEX (VM bytecode) files into corresponding Java sourcecode?
Since Dheeraj Bhaskar's answer is relatively old as many years past.
Here is my latest (2019 year) answer:
from dex to java sourcecode, currently has two kind of solution:
One Step: directly convert dex to java sourcecodeTwo Step: first convert dex to jar, second convert jar to java sourcecodedex directly to java sourcecodebin folder can see command line jadx or GUI version jadx-gui, double click to run GUI version: jadx-gui
dex file
then can show java source code:

File -> save as gradle project
then got java sourcecode:

dex to jardownload dex2jar zip, unzip got d2j-dex2jar.sh, then:
apk to jar: sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apkdex to jar: sh d2j-dex2jar.sh -f ~/path/to/dex_to_decompile.dexexample:
➜ v3.4.8 /Users/crifan/dev/dev_tool/android/reverse_engineering/dex-tools/dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f com.huili.readingclub8825612.dex
dex2jar com.huili.readingclub8825612.dex -> ./com.huili.readingclub8825612-dex2jar.jar
➜ v3.4.8 ll
-rw------- 1 crifan staff 9.5M 3 21 10:00 com.huili.readingclub8825612-dex2jar.jar
-rw------- 1 crifan staff 8.4M 3 19 14:04 com.huili.readingclub8825612.dex
jar to java sourcecodemany code will decompile errorminor code will decompile errorno code decompile error
Procyon
here demo Procyon convert jar to java source code:
download procyon-decompiler-0.5.34.jar
then using syntax:
java -jar /path/to/procyon-decompiler-0.5.34.jar -jar your_to_decompile.jar -o outputFolderName
example:
java -jar /Users/crifan/dev/dev_tool/android/reverse_engineering/Procyon/procyon-decompiler-0.5.34.jar -jar com.huili.readingclub8825612-dex2jar.jar -o com.huili.readingclub8825612
using editor VSCode to open exported source code, look like this:

Conversion correctness : Jadx > Procyon > CRF > JD-GUI
Recommend use: (One step solution's) Jadx
for more detailed explanation, please refer my online Chinese ebook: 安卓应用的安全和破解