dex和odex相互转换
2016-05-02 15:39
477 查看
一、dex和odex
dex是安卓dalvik虚拟机的可执行文件,可以在导出的apk文件里用解压缩软件直接打开。odex是经过优化过的dex。odex一种是从apk程序中提取出来的,与apk文件存放在同一目录,文件后缀为odex,这类odex文件多是Android ROM的系统程序;另一种缓存文件,这类odex仍以dex为后缀,存放在cache/dalvik-cache目录下。存放文件名格式为“apk路径@apk名@class.dex”,例如“system@app@Calculator@class.dex”,表示/system/app目录下的Calculator.apk程序的odex文件。
二、dex转换为odex
使用dexopt-wrapper可以将dex转换为odex。dexopt-wrapper在安卓2.3以前的源码中可以找到。将dex-wrapper编译后放到手机中。
随意从apk文件中提取一个dex文件,将其改名为classex.dex,zip将其压缩后改名为HelloDex.zip
如果执行无错误会有如下输出
当前目录会有HelloDex.odex文件。现在将其导出方便以后操作。
adb push dexopt-wrapper /data/local
adb shell chmod 777 /data/local/dexopt-wrapper
随意从apk文件中提取一个dex文件,将其改名为classex.dex,zip将其压缩后改名为HelloDex.zip
adb push HelloDex.zip /data/local adb shell cd /data/local ./dexopt-wrapper HelloDex.zip HelloDex.odex
如果执行无错误会有如下输出
./dexopt-wrapper HelloDex.zip HelloDex.odex --- BEGIN 'HelloDex.zip' (bootstrap=0) --- --- waiting for verify+opt, pid=721 --- would reduce privs here --- END 'HelloDex.zip' (success) ---
当前目录会有HelloDex.odex文件。现在将其导出方便以后操作。
adb pull /data/local/HelloDex.odex d:\
三、odex转换为dex
odex转换为dex的原理就是先将odex转为smali文件,然后将smali文件转为dex文件。需要下载smali.jar和baksmali.jar。
java -jar baksmali.jar -x HelloDex.odex
可能会有如下错误:
将手机中的/system/framework文件夹导出。放入odex目录下的framework文件夹内。
执行命令
java -jar baksmali.jar -x HelloDex.odex -d framework //-d 表示指定framework目录
如果无错误会无任何输出,工作目录最终如下,out目录为导出的smali保存目录。
接下来将smali转换为dex
执行命令
java -jar smali.jar out -o OutHelloDex.dex //将out目录转换为OutHelloDex.dex文件
如果无错误无任何输出。当前目录下会生成OutHelloDex.dex文件。
四、相关下载
相关文章推荐
- Ubuntu创建启动快捷方式
- 禁用ViewPager边界滑动效果
- LeetCode #347. Top K Frequent Elements
- JSP内置对象
- 最简单的UIScrollView 下拉刷新思路
- ExtJS5 +Spring MVC CRUD
- 由博客评论引发的思考和实践(关于搜狗输入法)
- spark集群配置
- HDUOJ-1015 Safecracker(深搜)
- Android学习必用-推荐大牛的博客
- 第8周项目3-用对象数组操作长方柱类
- Java序列化之关于Serializable的解释
- 图像的小波变换
- iOS 上传自己的库到cocoapod
- Invoke-WebRequest Invoke-RestMethod 乱码研究
- spark编译过程与实现
- 剑指offer-面试题58:二叉树的下一个结点
- Service 广播 到Fragment
- 20159311《网络攻击与防范》第九周学习总结
- Service 广播 到Fragment