如何从apk中分离odex

odex全称opendex,odex是安卓上的应用程序apk中提取出来的可运行文件,是通过apk安装包的中的dex优化过的,再把apk包里的dex文件删除。这样做可以加快软件的启动速度,预先提取,减少对RAM的占用,因为没有odex的话,系统要从apk包中提取dex再运行。所谓odex,是由android软件中的classes.dex生成的,odex化即是把那个文件预先提取出来作用是能加快软件加载速度和开机速度。不过odex也有缺点,那就是有时候加刷东西会出现问题。简单说,原本系统每次执行APK都需要先提取一部分出来,而odex化就是现在你提前把它提取出来了。系统启动或者程序运行加快的原因也就在此。而由于提取了odex出来,会占用一部分存储空间,所以做odex化的时候需要考虑空间方面的问题。一般来说官方rom都是odex化的rom(含odex文件),而定制rom大部分都是deodex化的(无odex文件)。两者应该各有优点吧,貌似现 在也没有统一的说法。odex的优点:1.刷完机首次进入系统的时间会缩短一些。文件的运行速度应该也有所提升。2.APK文件不能单独安装,并且如果反编译APK文件,一般也只能得到资源文件。可以说是起到一定的保护作用,避免被肆意修改和使用。这样做可以使其厂商保证一定的反盗版,因为没有没有dex文件的apk是无法正常安装的。3.会增加一些可安装应用的空间,虽然不是很多。csngmap资源站-安卓资源大本营odex的缺点:1.不方便修改ROM以及文件本身。2.增加ROM包的体积,虽然不是很多。3.当你升级某个被odex的应用后,这个应用将会出现故障,最常见的就是FC。而现在的定制rom之所以基本上都是deodex化(无odex文件)的是因为:(1). 可以适当减小文件的体积,起到节省rom空间的作用;csngmap资源站-安卓资源大本营 http://csngmap.wodemo.c om(2).主要方便rom定制者对rom的个性化定制和移植;apk相对容易反编译和修改,而odex先要解包成smali然后才能生成classes.dex,如果要再生成odex,还要用dexopt-wrapper,比较麻烦。为什么把分离出odex会加快运行速度:当Android启动时,DalvikVM监视所有的程序(APK文件)和框架,并且为他们创建一个依存关系树。DalvikVM通过这个依存关系树来为每个程序优化代码并存储在Dalvik缓存中。这样,所有程序在运行时都会使用优化过的代码。这就是当你刷一个新的ROM时,有时候第一次启动时间非常非常长的原因。当一个程序(或者框架库)发生变更,DalvikVM将会重新优化代码并且再次将其存在缓存中。在cache/dalvik-cache是存放system上的程序生成的dex文件,而data/dalvik-cache则是存放data/app生成的dex文件。1.从单个apk文件中分离odex教程把要分离的apk在手机安装,然后apk会在data/dalvik-cache里生成dex文件,找出相应的文件,把它重命名为apk的文件的名称,把后缀格式改为odex,然后apk用WINRAR打开,把classes.dex删除,然后签名(其实不用签名也可以),把他们放在一起,就是已分离的两个文件了。2.批量从apk中分离出odex,适用于任意ROM教程开始:1、下载dexopt-wrapper2、用re管理器放到system/bin里面,权限全部打勾重启3、打开USB调试连接电脑。在电脑中选择“开始”-“运行”4、敲代码:输入cmd,按下回车。输入adb shell按下回车输入su按下回车接下来输入dexopter fr按下回车等待出现#符号后就表示完成了此时框架文件都被odex化再输入dexopter app按下回车system/app里的文件都被odex相关磨http://hyy520.wodemo.com/entry/260586