Android odex文件反编译
2016-04-05 11:19
309 查看
Android odex文件反编译
odex 是经过优化的dex文件,且独立存在于apk文件。odex 多用于系统预制应用或服务。通过将apk中的dex文件进行 odex,可以加载 apk 的启动速度,同时减小空间的占用。请参考ODEX关于odex 的说明。
在反编译 odex 文件的过程中,我们需要使用到以下工具
smali/baksmali
dex2jar
JD Compiler, jar反编译工具
smali/baksmali是odex与dex文件格式互相转换的两个工具,dex2jar则是将dex文件转为java的jar文件,JD Compiler用于反编译jar文件。也就是说,经过以上一系列的操作,我们最终可以从一个odex文件得到一个可读的java文件。(事实上,也不是完全可读,与源码上还是有差别,有时候部分代码还无法反编译过来,只能以jdk虚拟机指令的方式存在了)。
首先,一个 odex 文件的生成过程是:java -> class -> dex -> odex,那么反编译的就是上面过程的逆操作了:odex -> dex -> class -> java。
我的测试环境:
Android 4.1.2
Samsung Galaxy II
以Android系统中的 uiautomator.odex 文件为例,目标是反编译其源码(其实它的源码grepcode).
工具准备
创建一个临时目录test,将 smali/baksmali 相关的工具都放入其中。反编译 (odex -> dex)
首先,将目标 odex 文件拿出来。关于命令的使用,直接执行
java -jar baksmali-2.0.2.jar可以得到相关的使用说明。这里要用到的参数主要是:
[-a | --api-level]: Android API等级,Android 4.1.2是16
[-x | --deodex]: 操作,反编译
[-d|--bootclasspath-dir]: 依赖包的目录,我们用当前目录.
开始反编译,执行以下命令:
/system/framework/core-junit.odex,那就从系统中提取。
out目录,里面放的是中间文件。这时,可以使用这些中间文件来生成
dex文件:
之所以反编译 uiautomator,是因为Android SDK中给出的 uiautomator.jar 包中很多API都没有包含其中,也没有在其官方文档中给予说明。通过阅读 uiautomator 的源码,发现它有很多可以扩展的地方。
相关文章推荐
- [转]Android开发实践:Java层与Jni层的数组传递
- android textview 部分文字加颜色并可点击
- Android的ListView中添加数据库中的Image和RatingBar
- Android中Bitmap和Drawable
- Android自定义ListView实现下拉刷新,效果仿SwipeRefreshLayout
- android listview优化几种写法详细介绍
- Android Studio如何使用Git提交代码到GitHub和OsChina并解决冲突
- Android 带清除功能的输入框控件ClearEditText
- Android中viewpager轮播图小点儿
- 自己写的按钮点击倒计时控件
- 开启隐藏的开发者模式
- Android textview maxEms与maxLengt 属性
- Android 添加页面切换动画, 避免冷启动
- android不同线程之间数据交互
- android studio 运行单个activity
- android:padding和android:margin的用法及区别
- android开源的酷炫的交互动画和视觉效果:Interactive-animation
- android获得控件在屏幕中的绝对坐标 getLocationInWindow 和 getLocationOnScreen
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Android中EditText控件的Ime Options属性