Andriod的Dalvik时代已经过去,Art时代的到来,引发了一些列的变化,或许在开发者的眼里,没有任何的改变,概念上的一些解释也只是入耳即过,但是作为学习安全的一名菜鸟级人物,虽说没有大牛们的高瞻远瞩,但是也略有自己的一点看法与总结。
早在Dalvik上就有动态加载这么回事,当然到了Art时代,动态加载依旧存在,好了,现在开始开门见山地来说说吧!
Dalvik上地动态加载机制是说动态加载一个apk,zip或dex文件进内存,然后开始解析dex文件到一个数据结构中,最后Dalvik会边解释边执行Dex文件中的每一条smali指令;
然而在Art时代时,却发生了质的改变,早在apk进行安装的时候,Android系统就将apk中的dex文件编译成了集dex内容和arm指令于一身的oat文件,这样当开始运行软件的时候,就可以直接运行arm指令,而这时候art虚拟机只是充当了一个索引一样,从dex中找寻和arm相关的映射,于是就舍去了原来的"大无畏”的解释的职责,那么可想而知,软件的运行效率自然上升了,同样会说编译的时候做了牺牲,但这点牺牲应当是在用户能够接受的范围内的!那么,说到这里,动态加载载art时代究竟是怎样的?
大家可以想像,当你开发一款产品时,如果你时开发者,那么你写的一段代码中动态加载的文件,会是什么文件?毫无疑问,还是dex文件或apk,zip等格式的压缩文件,对,那么这时候就有一个文件,既然apk里面的dex主文件已经被翻译成了oat文件,那