Smali是什么?
Android采用的是java语言 进行开发,但是Android系统有自己的虚拟机Dalvik,代码编译最终不是采用的java的class而是使用的smali。 JAVA虚拟机运行的是JAVA字节码,Dalvik虚拟机运行的是Dalvik字节码。Smali语言是Davlik的寄存器语言。
Dalvik和JVM介绍
JAVA程序经过编译,生成JAVA字节码保存在class文件中,JVM通过解码class文件中的内容来运行程序。而DVM运行的是Dalvik字节码,所有的Dalvik字节码由JAVA字节码转换而来,并被打包到一个DEX(Dalvik Executable)可执行文件中,DVM通过解释DEX文件来执行这些字节码,DEX文件解析出来就是smali寄存器语言。
详细参考: JAVA虚拟机Dalvik虚拟机和ART虚拟机简要对比
java虚拟机和Dalvik虚拟机的区别
ToDo 反编译流程和细节