大家都知道在系统/system/app里面会有很多以.odex为后缀的文件..
.odex是apk程序的核心,为什么要将odex从apk中独立出来呢?其实是为了odex来代替apk中的dex,其作用就是提前将apk解包了
这样做可以加快软件的启动速度,预先提取apk中的dex,减少对RAM的占用,如果没有odex的话,系统要从apk包中提取dex再运行
这样能减少在/data/dalvik-cache的缓存生成量,从而增加data目录的可用空间,也就是你能多安装几个程序
什么是dalvik-cache?
当Android启动时,DalvikVM监视所有的程序(APK文件)和框架,并且为他们创建一个依存关系树。DalvikVM通过这个依存关系树来为每个程序优化代码并存储在Dalvik缓存中。这样,所有程序在运行时都会使用优化过的代码。这就是当你刷一个新的ROM时,有时候第一次启动时间非常非常长的原因。当一个程序(或者框架库)发生变更,DalvikVM将会重新优化代码并且再次将其存在缓存中。在cache/dalvik-cache是存放system上的程序生成的dex文件,而data/dalvik-cache则是存放data/app生成的dex文件。
也一定程度的保护了apk程序的版权
不过deodex非常容易,这个版权说法确实有点搞笑!!!
那么deodex的
好处:能节省出/system系统目录的空间,并且能对framework.jar或者services.jar进行修改
坏处:手机的程序安装目录变小了,大存储的不需要担心...
关于网络上其他odex的说明,大家也可以参考下:
揭秘ODEX——有ODEX版ROM与无ODEX版ROM区别立显
以前不知道,也没有看过。今天一搜,发现网上很多,也许这个也不是原创,不过我想讲的应该有些道理
不少机油经常看到说某ROM是DEX版,无ODEX文件,然后模糊地知道ODEX对系统的作用,但是似乎没有一个帖子清晰简明的给予说明,同时能够帮助机油自己动手进行一些简单的ODEX
DIY。我这里抛砖引玉,有不对和不足之处请大神们补充。
什么是Odex?
【Odex是安卓上的应用程序apk中提取出来的可运行文件,是通过apk安装包的中的dex优化过的,再把apk包里的dex文件删除。这样做可以加快软件的启动速度,预先提取,减少对RAM的占用,因为没有odex的话,系统要从apk包中提取dex再运行。
什么是dalvik-cache?
当Android启动时,DalvikVM监视所有的程序(APK文件)和框架,并且为他们创建一个依存关系树。DalvikVM通过这个依存关系树来为每个程序优化代码并存储在Dalvik缓存中。这样,所有程序在运行时都会使用优化过的代码。这就是当你刷一个新的ROM时,有时候第一次启动时间非常非常长的原因。当一个程序(或者框架库)发生变更,DalvikVM将会重新优化代码并且再次将其存在缓存中。在cache/dalvik-cache是存放system上的程序生成的dex文件,而data/dalvik-cache则是存放data/app生成的dex文件。
而做Deodex的,会在cache/dalvik-cache是产生存放system上的程序生成的dex文件,】
【其他网上找的】
这个真心感觉到了。。。。date空间少了30M+。。
所谓Odex,是由android软件中的classes.dex生成的,Odex化即是把那个文件预先提取出来作用是能加快软件加载速度和开机速度。不过Odex也有缺点,那就是有时候加刷东西会出现问题。
看懂了吗?用我的理解,简单说,原本系统每次执行APK都需要先提取一部分出来,而Odex化就是现在你提前把它提取出来了。系统启动或者程序运行加快的原因也就在此。而由于提取了Odex出来,会占用一部分存储空间,所以做Odex化的时候需要考虑空间方面的问题。
Odex的效果
Odex化后系统启动和程序运行速度大大提高,稳定性不变。因此推荐做Odex化。
一般来说官方rom都是odex化的rom(含Odex文件),而定制rom大部分都是deodex化的(无odex文件)。两者应该各有优点吧,貌似现在也没有统一的说法。官方rom大部分每个apk对应一个.odex文件,而deodex化的rom里面只有一个apk,把.odex转换成classes.dex放到apk包里面了。所以
odex rom的.apk+.odex=deodex化rom的1个.apk (简单地来说,其实就上一个合并的过程)
Odex的优点:
1.刷完机首次进入系统的时间会缩短一些。文件的运行速度应该也有所提升。
2.APK文件不能单独安装,并且如果反编译APK文件,一般也只能得到资源文件。可以说是起到一定的保护作用,避免被肆意修改和使用。这样做可以使其厂商保证一定的反盗版,因为没有没有dex文件的apk是无法正常安装的。
3.会增加一些可安装应用的空间,虽然不是很多。(这个我没发现)
Odex的缺点:
1.不方便修改ROM以及文件本身。
2.增加ROM包的体积,虽然不是很多。
3.当你升级某个被Odex的应用后,这个应用将会出现故障,最常见的就是FC。
而现在的定制rom之所以基本上都是deodex化(无odex文件)的是因为:
1. 可以适当减小文件的体积,起到节省rom空间的作用;
2.主要方便rom定制者对rom的个性化定制和移植;apk相对容易反编译和修改,而odex先要解包成smali然后才能生成classes.dex,如果要再生成odex,还要用dexopt-wrapper,比较麻烦。
个人的感觉:Odex化后系统启动和程序运行速度的确提高了,多少不知道,但是做了Deodex(合并apk和odex)的刷机后的启动速度确没有Odex的来得快,也就是官方的,没有做Deodex的。大家刷过这两种的包就知道。所以,希望能够少些做Deodex的rom。多出基于官方的。
一些ROM制作者跨进的误区
官方辛辛苦苦对软件 以及jar的框架文件进行了odex化,目的就是为了加速软件的运行,及启动,而一些ROM
制作做,偏偏去进行odex文件的合并,这样反倒会影响程序的运行速度!