关于odex在art模式上的意义的理解

  • Post author:
  • Post category:其他






开始我的理解之前,先来说说今天看到的高手在做ROM的时候发表的一些见解。

华丽丽的分割线

————————————————————————————————————————-


什么是ODEX?




Android应用程序中有一个叫做classes.dex的文件,这是Java源码经过ADT的编译后会转换出来的。




它是Android系统中可以在Dalvik虚拟机上直接运行的文件格式,而odex则是由classes.dex生成的。






ODEX优化有什么用?




ODEX的用途是分离程序资源和可执行文件,达到加快软件加载速度和开机速度的目的。




一般来说,厂商的原厂系统都会为自己的ROM做ODEX优化处理以提高性能。




而第三方民间ROM(除魔趣之外)几乎都没有做,实在搞不懂这是什么道理- -!






棒棒糖与ART带来的疑问?




很多人会有疑问,Android 5.0开始,默认已经使用ART,弃用Dalvik了。




应用程序会在安装时被编译成OAT文件,(ART上运行的格式)ODEX还有什么用呢?




这里我们引用Google权威的回答:


Dex file compilation uses a tool called dex2oat and takes more time than dexopt. The increase in time varies, but 2-3x increases in compile time are not unusual. For example, apps that typically take a second to install using dexopt might take 2-3 seconds.




这里我来解释下,DEX转换成OAT的这个过程是在用户安装程序或是刷入ROM、OTA更新后首次启动时执行的。




按照Google的说法,相比做过ODEX优化,未做过优化的DEX转换成OAT要话费更长的时间,比如2-3倍。




比如安装一个odex优化过的程序假设需要1秒钟,未做过优化的程序就需要2~3秒。




由此可见,虽然dalvik被弃用了,但ODEX预优化在Android棒棒糖上依旧拥有显著的优化效果。




首先ODEX优化不仅仅只是针对应用程序,还会对内核镜像、Jar库文件等进行优化。




其次,资源和可执行文件分离带来的性能提升无论是运行在ART还是Dalvik,都是有效的!






关于魔趣ODEX优化:




魔趣只为正式版本和历史版本启用了ODEX优化,以进一步加强正式版和历史版的稳定、优秀地位。




当初Android 5.0.2并不是一个较为稳定的版本,我们在测试MK50.2中发现ODEX优化后存在一些奇怪的BUG。




比如一加的双击唤醒、手势等功能莫名其妙因为ODEX优化而失灵,所以我们临时取消了这一优化。




而现在,随着Android 5.1.1的发布以及MK51.1的日益稳定,我们将在下个版本让这一优化重新回到魔趣。




使魔趣能够继续为大家带来一些其它民间ROM上绝无仅有的优化。(除了ODEX优化技术,魔趣还有诸如PNG优化等特色)


——————————————————————————————————————————–


以上链接来自马丁龙猪的mokee论坛,当然,这个是他的见解,而我所作的,就是在他的见解的基础上,再说说我自己的看法,可以说是更加的通俗的。

原文链接





当然,有人会说,做了art模式之后,在用odex来优化是没有必要的,而在马丁龙猪的帖子上,引用了谷歌的说明,就是说,在安装apk文件的时候,做了优化和没有做优化的apk,之间的安装速度是相差了大约一半的时间的,而关键性的问题来了。





我们在使用android手机的时候,在处于art模式的操作下,在安装应用时,都会有一种莫名的感觉,就是无论多强大的手机,都会卡顿,其实,这就是art模式所带来的不便,因为art模式会转化apk的代码,让运行时,更加的快速,而不用去依赖dvm虚拟机,这是很有好处的,但是,也带来了一个不小的问题,这就是apk安装包很大的时候,有很多代码或者资源文件需要重新去转换,你无法想象得到,当你使用第一次使用apk模式,而且在应用商店去把大量的apk下载好等待安装的时候,这个等待的过程是多么的漫长啊,是的,dvm转art模式的时候,等待的时间也是很长很卡的。所以,这里,马丁龙猪给我们的提示信息正好告诉我们,使用odex,可以正确去优化它们,当然,也是有相对的坏处的,那就是占用空间,art模式转化后会变dvm模式下运行的程序占用的空间更大。所以说,技术可能会是双刃剑,在google调整了这么些年后,android总算有点粘手了,但是还是会有各种问题和各种优化,这个问题也是手机ROM制作者们更应该去考虑的问题,不过我觉得,制作odex的机制还是很有必要的,毕竟为了安装的时候让手机还能继续用,不那么卡,这也是一种用户体验的表现啊。



版权声明:本文为g1im2原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。