Android DEX 基础
来源:互联网 发布:python图形界面生成exe 编辑:程序博客网 时间:2024/06/11 13:07
转载请标明出处:http://www.cnblogs.com/zhaoyanjun/p/5736305.html
本文出自【赵彦军的博客】
1、什么是dex?
简单说就是优化后的android版.exe。每个apk安装包里都有。
相对于PC上的java虚拟机能运行.class;android上的Davlik虚拟机能运行.dex。
为何要研究dex格式?因为dex里面包含了所有app代码,利用反编译工具可以获取java源码。理解并修改dex文件,就能更好的apk破解和防破解。
2、dex好处
dex文件有个天大的好处:它可以直接用DexClassLoader类加载,这叫动态加载。于是我们只要在dex上加壳,在程序运行时脱壳,就可以规避静态反编译的风险。
3、一般的反编译流程是什么样子的。
1、下载apk文件,然后解压 ,得到 class.dex 文件
2、用dex2jar 把 class.dex 还原成 classes-dex2jar.jar 文件
3、用 jd-gui.exe 把 classes-dex2jar.jar 文件打开,就可以看到源码了。
4、Android 为什么会出现 65536限制问题?
在Android系统中,一个App的所有代码都在一个Dex文件里面。Dex是一个类似Jar的包,存储了很多Java编译字节码的归档文件。因为Android系统使用Dalvik虚拟机,所以需要把使用Java Compiler编译之后的class文件转换成Dalvik能够执行的class文件。这里需要强调的是,Dex和Jar一样是一个归档文件,里面仍然是Java代码对应的字节码文件。当Android系统启动一个应用的时候,有一步是对Dex进行优化,这个过程有一个专门的工具来处理,叫DexOpt。DexOpt的执行过程是在第一次加载Dex文件的时候执行的。这个过程会生成一个ODEX文件,即Optimised Dex。执行ODex的效率会比直接执行Dex文件的效率要高很多。但是在早期的Android系统中,DexOpt有一个问题,也就是这篇文章想要说明并解决的问题。DexOpt会把每一个类的方法id检索起来,存在一个链表结构里面。但是这个链表的长度是用一个short类型来保存的,导致了方法id的数目不能够超过65536个。当一个项目足够大的时候,显然这个方法数的上限是不够的。尽管在新版本的Android系统中,DexOpt修复了这个问题,但是我们仍然需要对老系统做兼容。
- Android DEX 基础
- Android DEX 基础
- Android DEX 基础
- Android插件化基础篇 — dex 文件
- Android插件化基础篇 — dex 文件
- Android [Dex Loader] Unable to execute dex:
- Android dex分包方案 (多dex)
- Android [Dex Loader] Unable to execute dex:
- Android dex分包方案 (多dex)
- Android DEX 文件格式
- Android Dex文件结构
- android编译dex-preopt
- Android Dex文件结构
- Android dex分包方案
- Android dex分包方案
- android dex分包
- Android dex分包方案
- Android dex分包技术
- MySQL binlog
- 剑指offer 7. 用两个栈实现队列
- Java 策略模式和状态模式
- lamp环境修改phpmyadmin路径
- 学习需要的是 韧劲 坚持不懈
- Android DEX 基础
- 排序算法小结
- 详解Google Chrome浏览器(操作篇)(下)
- Android Git 客户端
- 软件、工具、编辑器
- 机器学习之特征工程
- 算法导论读书笔记(11)散列表
- STL之stack容器
- mysql count 优化