zoukankan      html  css  js  c++  java
  • dex和odex相互转换

    一、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编译后放到手机中。

    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

    可能会有如下错误:image

    将手机中的/system/framework文件夹导出。放入odex目录下的framework文件夹内。

    执行命令

    java -jar baksmali.jar -x HelloDex.odex -d framework  //-d 表示指定framework目录

    如果无错误会无任何输出,工作目录最终如下,out目录为导出的smali保存目录。

    image

    接下来将smali转换为dex

    执行命令

    java -jar smali.jar out -o OutHelloDex.dex  //将out目录转换为OutHelloDex.dex文件

    如果无错误无任何输出。当前目录下会生成OutHelloDex.dex文件。

    四、相关下载

    所有下载

  • 相关阅读:
    01-2-SpringMVC-为Myeclipse安装spring的插件
    01-1-SpringMVC-怎么从官网下载Spring的jar包
    01-SpringMVC-HelloWorld
    1-2 如何将主机WIN7中文件共享到虚拟机中的Mac中
    1-1 win7 vmware虚拟机 中 mac系统无法上网
    1 在虚拟机上安装Mac OS
    10_mybatis与Spring的整合
    ReadWriteLock锁的应用
    ArrayList类的不安全性 以及 CopyOnWriteArrayList 类的引入
    洛谷P1129 [ZJOI2007]矩阵游戏(二分图匹配)
  • 原文地址:https://www.cnblogs.com/Reyzal/p/5452453.html
Copyright © 2011-2022 走看看