工程实践
Smali与Dex
· 三面体
Dex就是可以在安卓Java虚拟机上运行的Java程序
什么是Dex
概括来说, Dex就是可以在安卓Java虚拟机上运行的Java程序。 展开来说, Dex 文件格式是专为 Dalvik 设计的一种压缩格式。所以可以简单的理解为:Dex 文件是很多 .class 文件处理后的产物,最终可以在 Android 运行时环境执行。 通俗的讲, 一般情况下,我们编写java程序源文件,文件格式是.java。Java源程序通过编译器生成Java字节码(.class文件),然后就可以直接在Java虚拟机上运行了。但是,鉴于移动设备的特殊属性,例如内存很少、电量很珍贵等理由吧,谷歌针对编译生成的Java字节码文件进行二次加工,生成以.dex结尾的程序代码文件,这种文件可以在为移动设备设计的Java虚拟机上执行。

什么是Smali
概括来说, Smali是一种编程语言。就像Java、C、汇编等语言一样。
Dex与Smali的联系
概括来说, 他们之间没啥联系。
但是:
Converting a .dex file to smali (called baksmaling) gives us readable code in smali language.
.dex文件是一种压缩的文件格式,不具备可读性。所以我们需要将其转换为可读的文件格式,而Smali就是.dex文件反编译后生成的文件格式,具备较好的可读性。同时smali代码与Java源代码还可以互相进行转换。
但鉴于Smali是较为偏向汇编的底层语言,与Java这样的高级语言存在较大的差异,所以在他们之间互相转换时可能存在信息丢失的现象。也就是说不会百分之百完整转换。
.png)
参考资料
[浅谈 Android Dex 文件 掘进](%3Ca href="https://juejin.im/post/5bf22bb5e51d454cdc56cbd5"%3Ehttps://juejin.im/post/5bf22bb5e51d454cdc56cbd5%3C/a%3E)
[What is smali in Android? Quora](%3Ca href="https://www.quora.com/What-is-smali-in-Android"%3Ehttps://www.quora.com/What-is-smali-in-Android%3C/a%3E)